Buscar

Encapsulamento TP1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

*
*
- Encapsulamento -
Flávio Ferro
Técnicas de Programação 1
*
*
Tópicos
Acessando atributos e Métodos
Information Hiding
Métodos get() e set()
Exercício
*
*
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
*
*
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
Information Hiding
Problema:
c1.saldo = -2.0; //saldo inválido
*
*
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;
}
*
*
Lab1 - Encapsulando Atributos
 Encapsule o estado da classe ContaCorrente.
 Verifique quais erros o encapsulamento provocou.
*
*
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)
*
*
Encapsulamento
Método de Acesso retorna um valor, sendo nomeado da seguinte forma: get + nome do atributo a ser retornado
*
*
Encapsulamento
Método de Alteração não retorna nenhum valor (void), sendo nomeado da seguinte forma: set + nome do atributo a ser modificado
*
*
Encapsulamento
 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){...}
}
Classe ContaCorrente com atributos privados, métodos accessors e mutators
*
*
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 e um valor de saldo (passado como argumento) no atributo saldo.
Implemente métodos na classe ContaCorrente que permitam o acesso (get) a seus atributos(número e saldo)
Na classe TestaContaCorrente:
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
*
*
Aprendizagem1 - Encapsulamento
Exemplo:
Agenda: guardar uma data e uma anotação importante a ser lembrada.
Crie um novo projeto denominado Agenda.
Não crie a classe principal
Clique com o botão direito do mouse em cima do Pacote Padrão e adicione um nova classe Java denominada Agenda.
Adicione o código: 
*
*
Aprendizagem1 - Encapsulamento
Crie um método “anote” que anotará a descrição do dia.
*
*
Aprendizagem1 - Encapsulamento
É importante também verificar se a data da anotação é uma data válida. 
Se for uma data válida registra-se a anotação, caso contrário a anotação recebe uma informação de data inválida.
*
*
Aprendizagem1 - Encapsulamento
*
*
Aprendizagem1 - Encapsulamento
Onde está o encapsulamento?
Calma! O objetivo desse exemplo é mostrar a fragilidade do código que não usa o encapsulamento. 
*
*
Aprendizagem1 - Encapsulamento
Para isso, criaremos dois objetos com a classe Agenda: agenda1 e agenda2. 
agenda1 – uma anotação com uma data válida, e 
agenda2 – uma data inválida. 
Finalmente, consultaremos os dados dos atributos de cada objeto, em especial a anotação que foi registrada, utilizando o método mostraAnotacao(). 
*
*
Aprendizagem1 - Encapsulamento
Clique com o botão direito do mouse em cima do Pacote Padrão e adicione um nova classe Java denominada Main.
Adicione o método main para que possamos executar a aplicação:
*
*
Aprendizagem1 - Encapsulamento
Adicione o código abaixo para testarmos a fragilidade do código que não usa o encapsulamento. 
Resultado:
*
*
Aprendizagem1 - Encapsulamento
Veja o que acontece se fizéssemos uma pequena modificação no método main(). Adicione o código:
Resultado: 
*
*
Aprendizagem1 - Encapsulamento
Veja que sua Agenda permitiu que você inserisse uma data inválida para uma anotação. Isso significa que seu código está suscetível a falhas. 
Qual é a solução? 
Encapsulamento.
Codificar em OO usando o encapsulamento nada mais é que aplicar os modificadores de acesso às classes. 
*
*
Aprendizagem1 - Encapsulamento
Sem Modificadores de Acesso
*
*
Aprendizagem1 - Encapsulamento
A classe Agenda não usa nenhum dos modificadores de acesso de forma explícita. 
Implicitamente ela é Package ou Friendly. 
O modificador de acesso Package permite que classes do mesmo pacote acessem atributos ou métodos que estejam com tal modificador.
Considerando que a classe Principal está no mesmo pacote, então, ele tem acesso aos atributos e métodos da classe Agenda. 
*
*
Aprendizagem1 - Encapsulamento
Quando a classe Principal teve acesso aos atributos da classe Agenda? 
O método main da classe principal está acessando os atributos, dia, mes, ano e anotacao da classe Agenda. E está modificando informações sem passar pelo teste de validade da data.
*
*
Aprendizagem1 - Encapsulamento
Aplicando o encapsulamento: 
Private para os atributos e o método validaData(), 
Public para os métodos anote() e mostraAnotacao().
*
*
Aprendizagem1 - Encapsulamento
*
*
Aprendizagem1 - Encapsulamento
Agora, o compilador já não aceita usar os comandos abaixo. Isso causaria erro! Ou seja, os atributos da classe Agenda agora são privados apenas para a uso da própria classe Agenda.
*
*
Aprendizagem1 - Encapsulamento
Com essa modificação, só é possível inserir uma anotação na classe Agenda usando o método anote(). 
O método anote() garante que a data inserida para a anotação será validada com o método validaData(), que também é privado ao uso apenas da classe Agenda.
*
*
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.
*
*
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
*

Continue navegando