Вы находитесь на странице: 1из 27

Encapsulamento

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

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.

7/27

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.

8/27

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

9/27

Encapsulamento em Java - Mtodos de acesso

Junto com os mtodos modificadores, viabilizam o encapsulamento.

Mtodos de acesso permitem acessar os atributos do objeto.

10/27

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)

11/27

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.

12/27

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

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

Interface da classe Cliente

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

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

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 {

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; }

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

Programao em Java Prof. Maurcio Braga

Вам также может понравиться