Академический Документы
Профессиональный Документы
Культура Документы
Programao em Java
Pilares da programao OO
Encapsulamento
Herana (Generalizao/Especializao) Polimorfismo
2/27
Encapsulamento
Separa a interface de um objeto dos detalhes de seu funcionamento interno
3/27
Encapsulamento
Permite que uma aplicao seja construda a partir de um conjunto de componentes que realizam seu trabalho de forma independente.
Cada componente contm tudo que precisa para realizar seu trabalho independentemente dos outros componentes. Estimula a diviso de responsabilidades: cada objeto faz apenas o que deve fazer, no realizando tarefas extras.
4/27
Encapsulamento
A independncia entre os objetos obtida escondendo detalhes internos do funcionamento de cada componente, tornando o uso do componente acessvel apenas atravs de uma interface externa.
Facilita o controle ao acesso de informaes do estado interno do objeto. Voc no precisa saber como um telefone realmente funciona, para poder us-lo. S precisamos saber para que ele serve, e conhecer sua interface, ou seja a forma de nos comunicarmos com ele.
5/27
Encapsulamento
Se a companhia telefnica mudar seus processos, voc vai continuar usando o aparelho normalmente
A implementao de uma classe, pode ser alterada sem afetar a sua interface. Se um novo telefone for criado, como um telefone digital, a implementao foi alterada, mas a interface permanece a mesma
6/27
Interface
7/27
Interface
8/27
Exemplo Encapsulamento
Telefone
interface
Carro
interfaces
9/27
10/27
Mtodos de acesso
Modificador de visibilidade Tipo de retorno Nome do mtodo
Instruo de retorno
11/27
Utilizados para modificar o estado de um objeto. Alcanados por meio da modificao do valor de um ou mais atributos do objeto.
12/27
Mtodos modificadores
Modificador de visibilidade
Tipo de retorno (void) Nome do mtodo Parmetro
13/27
Exemplo Encapsulamento
class Cliente { private double credito; private String nome; public String getNome() { return nome; } public void setNome(String nome_cliente) { nome = nome_cliente; } public void imprimaDadosCliente(Cliente c) { imprimir(c.nome, c.credito); } private void imprimir(String nome, double credito) { System.out.println(Cliente: + nome + Crdito: R$ + credito); } }
14/27
public String getNome() public void setNome(String nomeCliente) public void imprimaDadosCliente(Cliente c)
Note que o mtodo privado imprimir no faz parte da interface!
15/27
Vantagens do encapsulamento
Reutilizao Uma vez que o componente independente, ele pode ser utilizado em diferentes programas com facilidade.
Diviso de responsabilidades Cada objeto faz apenas o que lhe devido, no assumindo funes extras. Facilidade de modificao Uma vez que o mundo exterior no conhece a implementao do componente, esta pode ser alterada sem problemas. Ausncia de efeitos colaterais Uma vez que o componente no depende de partes do seu programa para funcionar, no h risco dele modificar o funcionamento do programa.
16/27
Exemplo
class ProdutoSemEncapsulamento { public int codigo; public String nome; public double preco; public double desconto_a_vista; }
17/27
Exemplo
public static void main(String[] args) { ProdutoSemEncapsulamento p = new ProdutoSemEncapsulamento(); p.codigo = 1; p.nome = "Samsung 17 polegadas"; p.preco = 500; p.desconto_a_vista = 10; System.out.println("Preo prazo: " + p.preco); System.out.println("Preo vista: " + (p.preco p.preco*p.desconto_a_vista/100)); }
18/27
Exemplo
19/27
Exemplo
20/27
Encapsulamento
Exerccio
Corrija a classe do exemplo anterior (vista abaixo). Esta classe dever usar encapsulamento, possuir um construtor, um mtodo que calcula o preo a vista bem como um mtodo setDesconto, que recebe o valor do desconto, e se o mesmo for superior a 100 ou menor que zero, configurar o desconto como zero.
class ProdutoSemEncapsulamento { public int codigo; public String nome; public double preco; public double desconto_a_vista; }
21/27
Soluo
class Produto { private int codigo; private String nome; private double preco; private double desconto_a_vista;
public Produto(int cod_prod, String nome_prod, double preco_prod, double desc) { codigo = cod_prod; nome = nome_prod; preco = preco_prod; desconto_a_vista = desc; }
22/27
Soluo
public double getPreco() { return preco; } public double getPrecoAVista() { double preco_a_vista; preco_a_vista = preco - preco*desconto_a_vista/100; return preco_a_vista; } public void setDesconto(double desc) { if ((desc > 100) || (desc < 0)) desconto_a_vista = 0; else desconto_a_vista = desc; }
23/27
Exerccio
Crie uma classe para representar uma conta bancria. Esta classe dever:
Usar encapsulamento; Possuir dois atributos, cdigo e saldo; Possuir um construtor que receba o nmero da conta e o saldo inicial. Se for passado um valor negativo para o saldo,utilizar zero como saldo inicial; Possuir mtodos para creditar um valor, sacar um valor e imprimir o saldo. Se o valor a ser sacado for maior do que o saldo, sacar apenas o valor correspondente ao saldo (saldo ser igual a zero), retornando o valor sacado em seguida.
24/27
Soluo
class Conta {
25/27
Soluo
public double debitar(double val) { if (val > saldo) val = saldo; saldo = saldo - val; return val; } public void imprimaSaldo() { System.out.println(Conta: + numero + Saldo: R$ + saldo); } }
26/27
Encapsulamento