Programação Java - Encapsulamento Marco Fagundes [email protected] © 2007 Marco Fagundes - [email protected] 1 Tópicos Acessando atributos e Métodos Information Hiding Métodos get() e set() Exercício © 2007 Marco Fagundes - [email protected] 2 Acessando Membros de Objetos Lembrando que, uma vez criado o objeto seus membros podem ser acessados usando o operador “.” : (<objeto>.<membro>) Por exemplo: c1.numConta = “001”; //Acessando atributos c1.depositar(); //Acessando métodos Conforme mencionado, o acesso direto aos atributos não deve ser permitido © 2007 Marco Fagundes - [email protected] 3 Information Hiding Problema: c1.saldo = -2.0; //saldo inválido Solução: Proteger/ocultar o estado interno de um objeto servidor de ser corrompido pelos objetos clientes Fornecer uma interface com operações que manipulem o estado do objeto servidor Objeto © 2007 Marco Fagundes - [email protected] operações/métodos/ comportamento propriedades/atributos/dados/ variáveis Acesso 4 Information Hiding O ato de ocultar detalhes de implementação de um objeto é chamado de “information hiding ” ou encapsulamento Atributos devem ser todos privados (modificador private) Por exemplo: public class ContaCorrente{ private String numero; private double saldo; } © 2007 Marco Fagundes - [email protected] 5 Lab1 - Encapsulando Atributos Encapsule o estado da classe ContaCorrente. Verifique quais erros o encapsulamento provocou. © 2007 Marco Fagundes - [email protected] 6 Encapsulamento O acesso a um membro privado fora da classe ocasiona um erro de compilação Deve-se construir a interface do objeto com métodos públicos (modificador public) Métodos para manipulação do estado do objeto para alteração (métodos mutators) ou acesso (métodos accessors) Objeto Métodos de acesso (get) © 2007 Marco Fagundes - [email protected] Métodos de Mutação (set) 7 Encapsulamento Método de Acesso retorna um valor, sendo nomeado da seguinte forma: get + nome do atributo a ser retornado Por exemplo: public String getNumero( ){ // retorna o atributo numero return this.numero; } © 2007 Marco Fagundes - [email protected] 8 Encapsulamento Método de Alteração não retorna nenhum valor (void), sendo nomeado da seguinte forma: set + nome do atributo a ser modificado Por exemplo: public void setNumero(String pNumero){ // atualiza o atributo numero this.numero =pNumero; } © 2007 Marco Fagundes - [email protected] 9 Encapsulamento Classe ContaCorrente com atributos privados, métodos accessors e mutators public class ContaCorrente{ private String numero; private double saldo; public void setNumero(String pNum){numero = pNum;} public String getNumero(){return numero;} public double getSaldo(){return saldo;} public boolean depositar(double pVal){...} public boolean sacar(double pVal){...} } © 2007 Marco Fagundes - [email protected] 10 Lab1 - Métodos (get/set) Implemente um método mutatório (set) que grave um número de conta (passado como argumento) no atributo número. Implemente métodos na classe ContaCorrente que permitam o acesso (get) a seus atributos(número e saldo) Na classe aplicativo: Crie um objeto do tipo ContaCorrente Grave valores em seus atributos (número e saldo) Mostre para o usuário os valores dos atributos do objeto criado © 2007 Marco Fagundes - [email protected] 11 Exercício 1 Estenda o Exercício 2 (do Aula Anterior), encapsulando os atributos da classe candidato. Disponibilize métodos de acesso e mutação para os atributos que foram encapsulados. Na classe aplicativo, ilustre a utilização dos métodos implementados. © 2007 Marco Fagundes - [email protected] 12 Pontos Principais O estado interno do objeto deve ser protegido/escondido dos outros objetos (informatiom hiding ou encapsulamento) Todos os atributos de uma classe devem ser privados (modificador private) Deve-se disponibilizar métodos accessor(get) e mutator(set) para permitir a manipulação dos atributos privados © 2007 Marco Fagundes - [email protected] 13