Encapsulamento em oo

27
Encapsulamento Encapsulamento Programação em Java

Transcript of Encapsulamento em oo

Page 1: Encapsulamento em oo

EncapsulamentoEncapsulamento

Programação em Java

Page 2: Encapsulamento em oo

2/27

Pilares da programação OO

Encapsulamento

Herança (Generalização/Especialização)

Polimorfismo

Page 3: Encapsulamento em oo

3/27

Encapsulamento

Separa a interface de um

objeto dos detalhes de seu funcionamento

interno

Page 4: Encapsulamento em oo

4/27

Encapsulamento

Permite que uma aplicação seja construída a partir de um conjunto de componentes que realizam seu trabalho de forma independente.

Cada componente contém tudo que precisa para realizar seu trabalho independentemente dos outros componentes.

Estimula a divisão de responsabilidades: cada objeto faz apenas o que deve fazer, não realizando tarefas extras.

Page 5: Encapsulamento em oo

5/27

Encapsulamento

A independência entre os objetos é obtida escondendo detalhes internos do funcionamento de cada componente, tornando o uso do componente acessível apenas através de uma interface externa.

Facilita o controle ao acesso de informações do estado interno do objeto.

Você não 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.

Page 6: Encapsulamento em oo

6/27

Encapsulamento

Se a companhia telefônica mudar seus processos, você vai continuar usando o aparelho normalmente

A implementação de uma classe, pode ser alterada sem afetar a sua interface. Se um novo telefone for criado, como um telefone digital, a implementação foi alterada, mas a interface permanece a mesma

Page 7: Encapsulamento em oo

7/27

Interface

Lista de serviços 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.

Page 8: Encapsulamento em oo

8/27

Interface

Formada por métodos e atributos públicos.

Ausência de informações sobre como o trabalho é realizado.

Liberdade para modificar o funcionamento do componente sem “quebra de contrato” com o mundo exterior.

Page 9: Encapsulamento em oo

9/27

Exemplo Encapsulamento

Telefone interface pública- botões utilizados para interagir com

o objeto implementação - as operações internas, o propósito

do objeto

Carro interfaces públicas - pedais, direção, câmbio implementação - o funcionamento do carro

Page 10: Encapsulamento em oo

10/27

Encapsulamento em Java - Métodos de acesso

Junto com os métodos modificadores, viabilizam o encapsulamento.

Métodos de acesso permitem acessar os atributos do objeto.

Page 11: Encapsulamento em oo

11/27

Métodos de acesso

public String getNome(){ return nome;}

Tipo de retorno Nome do método Lista de parâmetros (vazia)

Início e fim do corpo do método (bloco)

Instrução de retorno

Modificador de visibilidade

Page 12: Encapsulamento em oo

12/27

Encapsulamento em Java - Métodos modificadores

Utilizados para modificar o estado de um objeto.

Alcançados por meio da modificação do valor de um ou mais atributos do objeto. Geralmente contêm instruções de atribuição. Geralmente recebem parâmetros.

Page 13: Encapsulamento em oo

13/27

Métodos modificadores

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

Tipo de retorno (void)

Nome do método Parâmetro

Modificador devisibilidade

Atribuição

Atributo sendo alterado

Page 14: Encapsulamento em oo

14/27

Exemplo Encapsulamentoclass 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 + “ Crédito: R$ “ + credito); } }

Page 15: Encapsulamento em oo

15/27

Interface da classe Cliente

public String getNome()

public void setNome(String nomeCliente)

public void imprimaDadosCliente(Cliente c)

Note que o método privado imprimir não faz parte da interface!

Page 16: Encapsulamento em oo

16/27

Vantagens do encapsulamento

Reutilização – Uma vez que o componente é independente, ele pode ser utilizado em diferentes programas com facilidade.

Divisão de responsabilidades – Cada objeto faz apenas o que lhe é devido, não assumindo funções extras.

Facilidade de modificação – Uma vez que o mundo exterior não conhece a implementação do componente, esta pode ser alterada sem problemas.

Ausência de efeitos colaterais – Uma vez que o componente não depende de partes do seu programa para funcionar, não há risco dele modificar o funcionamento do programa.

Page 17: Encapsulamento em oo

17/27

Exemploclass ProdutoSemEncapsulamento {

public int codigo; public String nome; public double preco; public double desconto_a_vista; }

Page 18: Encapsulamento em oo

18/27

Exemplopublic 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("Preço à prazo: " + p.preco);System.out.println("Preço à vista: " + (p.preco –

p.preco*p.desconto_a_vista/100));}

Page 19: Encapsulamento em oo

19/27

Exemplo

O que aconteceria se o programadortivesse digitado um desconto de 200?

Page 20: Encapsulamento em oo

20/27

Exemplo

Page 21: Encapsulamento em oo

21/27

Encapsulamento

Exercício Corrija a classe do exemplo anterior (vista abaixo). Esta classe

deverá usar encapsulamento, possuir um construtor, um método que calcula o preço a vista bem como um método 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;

}

Page 22: Encapsulamento em oo

22/27

Soluçãoclass 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;

}

Page 23: Encapsulamento em oo

23/27

Solução 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;

}

}

Page 24: Encapsulamento em oo

24/27

Exercício

Crie uma classe para representar uma conta bancária. Esta classe deverá: Usar encapsulamento; Possuir dois atributos, código e saldo; Possuir um construtor que receba o número da conta e o saldo

inicial. Se for passado um valor negativo para o saldo,utilizar zero como saldo inicial;

Possuir métodos 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.

Page 25: Encapsulamento em oo

25/27

Soluçãoclass 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;

}

Page 26: Encapsulamento em oo

26/27

Solução

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

} }

Page 27: Encapsulamento em oo

EncapsulamentoEncapsulamento

Programação em Java

Prof. Maurício Braga