Encapsulamento Alcides Pamplona alcides.pamplona@gmail.com
Tópicos Acessando atributos e Métodos Encapsulamento Modificadores de Acesso Métodos get() e set() Exercício 2
Acessando Membros de Objetos 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 Porém, acesso direto aos atributos não deve ser permitido 3
Encapsulamento 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 4
Encapsulamento O encapsulamento é o mecanismo utilizado na OO para disponibilizar métodos que operem sobre os dados do objeto protegendo-os do acesso direto e indevido por outros objetos. Esta proteção consistem em usar modificadores de acesso, restringindo o acesso aos atributos e fornecendo métodos para alterar esses atributos. O encapsulamento previne o problema de interferência externa sobre os dados de um objeto. 5
Encapsulamento Um exemplo de uso do encapsulamento é o atributo saldo da classe conta corrente. O saldo não pode ser alterado diretamente por outras classes, deve ser feito através de métodos adequados para isso, como saques e depósitos. A alteração aleatória do saldo causaria um problema nos cálculos e inconsistência nos dados. Por conta disso, é necessário criar classes encapsuladas que fornecem os métodos adequados para operar sobre seus dados O Encapsulamento também evita que um programa se torne tão interdependente que uma pequena mudança tenha grandes efeitos além de simplificar o reuso de código. 6
Modificadores de Acesso 7
Modificadores de Acesso Atributos devem ser todos privados (modificador private) Por exemplo: public class ContaCorrente{ } private String agencia; private String numero; private double saldo; 8
Lab1 - Encapsulando Atributos Encapsule o estado da classe contacorrente. Verifique que erros o encapsulamento provocou e porque? 9
Modificadores de Acesso 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 Alteração (métodos mutators) Acesso (métodos accessors) 10
Métodos get() e set() Como referenciar a própria classe?? public class contacorrente{ private String numero; private double saldo; } public String mudarnumero(string pnumero){ contacorrente.numero = pnumero;} public class contacorrente{ private String numero; private double saldo; } public String mudarnumero(string pnumero){ this.numero = pnumero;} 11
Métodos get() e set() 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; } 12
Métodos get() e set() Método de Acesso retorna um valor do tipo do atributo, sendo nomeado da seguinte forma: get + nome do atributo a ser retornado Por exemplo: public String getnumero( ){ // retorna o atributo numero return this.numero; } 13
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){...} } 14
Lab1 - Métodos (get/set) Na Classe TAD Implemente métodos mutatórios (set) que gravem o a agência e número de conta (passados como argumento) Altere o método Depositar() de modo que não seja possível depositar um valor menor do que zero Implemente métodos que permitam o acesso (get) a seus atributos(agência, número e saldo) Na classe aplicativo: Crie um objeto do tipo contacorrente Altere os valores dos atributos (agência e número) Deposite um valor na conta Exiba os valores dos atributos do objeto criado 15
Resumo 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 16
Exercício 3 Crie um novo projeto, defina uma classe que permita ao usuário informar dados de 3 candidatos (nome, número, partido). Crie uma classe aplicativo que exiba os dados dos 3 candidatos 17
Exercício 3 Insira na classe aplicativo a possibilidade de fazer uma eleição entre os candidatos (votar nos números dos candidatos) Para isso considere o seguinte: Os números 00 e 99 correspondem aos candidatos branco e nulo. Caso o eleitor digite um número inválido (nenhum candidato) seu voto será nulo Caso o eleitor não informe nenhum número seu voto será branco Caso seja informado (-1) eleição termina no número do candidato a Deve-se acrescentar uma propriedade no candidato que armazene seu total de votos 18
Exercício 3 Ao término da eleição deve-se exibir: Total de Comparecimento (número de votos) Qual candidato foi eleito (mostrar: número, nome e total de votos). Total de votos em Branco e Nulos. Para receber dados do Teclado em uma caixa de diálogo: javax.swing.joptionpane.showinputdialog (<Msg>); Para exibir dados em uma caixa de Diálogo javax.swing.joptionpane.showmessagedialog (null,<msg>,"informação",javax.swing.joptionpane.i NFORMATION_MESSAGE); 19
Projeto Trazer para a próxima aula: 1. Encapsulamento dos atributos de cada classe 2. Desenvolvimento das classes aplicativo do projeto utilizando as classes TAD criadas 3. Demonstração do funcionamento do aplicativo com cada uma das classes (acesso e mutação dos atributos) 20