Sie sind auf Seite 1von 29

Encapsulamento

Programao em Java Prof. Maurcio Braga

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

Lista de servios oferecidos por um componente


Funciona como um contrato que o componente estabelece com o mundo exterior que define exatamente como este pode fazer uso do componente Funciona como um painel de controle do componente.

Interface

Formada por mtodos e atributos pblicos.


Ausncia de informaes sobre como o trabalho realizado. Liberdade para modificar o funcionamento do componente sem quebra de contrato com o mundo exterior.

Exemplo Encapsulamento

Telefone
interface

pblica- botes utilizados para interagir com

o objeto implementao - as operaes internas, o propsito do objeto

Carro
interfaces

pblicas - pedais, direo, cmbio implementao - o funcionamento do carro

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

Encapsulamento em Java - Mtodos de acesso

Junto com os mtodos modificadores, viabilizam o encapsulamento.

Mtodos de acesso permitem acessar os atributos do objeto.

11

Mtodos de acesso
Modificador de visibilidade Tipo de retorno Nome do mtodo

Lista de parmetros (vazia)

public String getNome() { return nome; }

Instruo de retorno

Incio e fim do corpo do mtodo (bloco)

12

Encapsulamento em Java - Mtodos modificadores

Utilizados para modificar o estado de um objeto. Alcanados por meio da modificao do valor de um ou mais atributos do objeto.

Geralmente contm instrues de atribuio. Geralmente recebem parmetros.

13

Mtodos modificadores
Modificador de visibilidade
Tipo de retorno (void) Nome do mtodo Parmetro

public void setNome(String nome_produto) { Atribuio nome = nome_produto; }


Atributo sendo alterado

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

Interface da classe Conta

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

O que aconteceria se o programador tivesse digitado um desconto de 200?

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 {

private double saldo; private long numero;


public Conta(long num, double val) { numero = num; if (val > 0) saldo = val; } public void creditar(double val) { saldo = saldo + val; }

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

H alguma situao na qual o encapsulamento pode trazer problemas?

28

Encapsulamento

Programao em Java Prof. Maurcio Braga

Das könnte Ihnen auch gefallen