Aula 8: Encapsulamento Prof. Jefersson Alex dos Santos Conceitos • • • Escrita de Classes Encapsulamento Manipulação de Objetos Encapsulamento Serve para controlar o acesso aos atributos e métodos de uma classe É uma forma eficiente de proteger os dados manipulados dentro da classe Determina onde esta classe poderá ser manipulada Pode ser dividido em dois níveis: Classe: pública ou padrão Atributos e métodos Modificadores de Acesso Visível apenas para a classe (private) Visível para o mundo (public) Visível para o pacote e todas as subclasses (protected) Visível para o pacote (o padrão, sem modificador) Métodos Acessores e Modificadores Geralmente, os campos de dados privados são de natureza técnica e interessam apenas ao criador das operações. Assim, o acesso aos atributos deve ser permitido pela implementação por meio de três itens: Um campo de dados privado Um método de leitura (acessador) Um método de alteração (modificador) Por convenção, acessores e modificadores são chamados Getter and Setter • https://fedorahosted.org/spacewalk/wiki/JavaCodi ngConventions Métodos Acessores e Modificadores Vantagens: Implementação interna pode ser modificada sem afetar nenhum código fora da própria classe Os métodos “modificadores” podem fazer testes contra erros Exemplo: método getPixel do TP1. Os limites da imagem puderam ser testados. Os atributos sempre devem ter modificadores individuais? Método Construtor O que é? Sobrecarga: Quantos construtores uma classe pode ter? Construtores podem ser “recursivos”? Construtor padrão: O que é? Para que serve? É possível ter uma classe sem construtores? Modificadores de acesso: Os construtores são sempre públicos? Pra que serviria um construtor privado? Construtor Privado Motivos Impedir a instanciação da classe Permitir a instanciação através de um método estático da classe Exemplos Classes utilitárias: java.lang.Math e java.utils.Arrays. Enumerations (enum) Padrões de projeto Singleton o construtor só é acessível por um método público e estático da classe a classe pode ser instanciada uma única vez Outras palavras-chave Static (atributos, métodos e em um “bloco estático”, associação com classe e não com instancia) Abstract (classes não poderão ser instanciadas e métodos não podem ser implementados) Final (imutabilidade, classe não pode ser herdada, método não pode ser sobrescrito) Campos Estáticos Constantes public static final double CM_PER_INCH = 2.54; Métodos Estáticos Só podem acessar atributos estáticos de uma classe Blocos Estáticos static double[] buffer = new double[BUFFER_SIZE]; static { for (int i = 0; buffer.length; i++) buffer[i] = java.lang.Math.random(); } Como escrever uma classe 1. Sempre mantenha os dados privados 2. Sempre inicialize os dados 3. Não use tipos básicos em demasia em uma classe String rua; int numero; String complemento; ... (?) 4. Nem todos os campos precisam de “acessores” e “modificadores” 5. Use uma forma padrão de definição das classes (consistência) 6. Divida classes com muitas tarefas 7. Dê nomes às classes, métodos e atributos que representem suas tarefas Usando Objetos Variável objeto Endereço end; Criando um objeto end = new Endereço(); Inicialização Endereço res = null; Endereço res = new Endereço(); Atribuição de objetos res = end; Método clone Objetos como argumentos Objetos são referências, mas eles não são passados por referência! Os parâmetros dos métodos funcionam como novos “ponteiros” Os métodos podem mudar o estado de um objeto usado como parâmetro se ele tiver acesso aos métodos “modificadores” Referência • Core Java 2 - Volume I Fundamentos