Beruflich Dokumente
Kultur Dokumente
Pilares da programao OO
Encapsulamento
Herana (Generalizao/Especializao) Polimorfismo
Encapsulamento
Separa os aspectos externos de um objeto dos detalhes de implementao
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.
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.
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
Interface
Interface
Exemplo Encapsulamento
Telefone
interface
Carro
interfaces
Exemplo Encapsulamento
Em sistemas orientados a objetos, todos os atributos so privados e apenas podem ser acessados ou alterados atravs de operaes na interface pblica Exerccio Descreva as funes presentes na interface de um sistema de som
10
11
Mtodos de acesso
Modificador de visibilidade Tipo de retorno Nome do mtodo
Instruo de retorno
12
Utilizados para modificar o estado de um objeto. Alcanados por meio da modificao do valor de um ou mais atributos do objeto.
13
Mtodos modificadores
Modificador de visibilidade
Tipo de retorno (void) Nome do mtodo Parmetro
14
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.numero, c.credito); } private void imprimir(long numero, double saldo) { System.out.println(Cliente: + nome + Crdito: R$ + credito); } }
15
public String getNome() public void setNome(String nomeCliente) public void imprimaDadosCliente(Cliente c)
Note que o mtodo privado imprimir no faz parte da interface!
16
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.
17
Exemplo
class ProdutoSemEncapsulamento { public int codigo; public String nome; public double preco; public double desconto_a_vista; }
18
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)); }
19
Exemplo
20
Exemplo
21
Encapsulamento
Exerccio
Corrija o programa, criando uma nova classe Produto. 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.
22
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; }
23
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; }
24
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.
25
Soluo
class Conta {
26
Soluo
public void debitar(double val) { if (val > saldo) val = saldo; saldo = saldo - val; } public void imprimaSaldo(Conta c) { imprimir(c.numero, c.saldo); } private void imprimir(long numero, double saldo) { System.out.println(Conta: + numero + Saldo: R$ + saldo); }
27
Discusso
28
Encapsulamento