Encapsulamento em oo
-
Upload
marconi-rodrigues -
Category
Documents
-
view
2.046 -
download
0
Transcript of Encapsulamento em oo
EncapsulamentoEncapsulamento
Programação em Java
2/27
Pilares da programação OO
Encapsulamento
Herança (Generalização/Especialização)
Polimorfismo
3/27
Encapsulamento
Separa a interface de um
objeto dos detalhes de seu funcionamento
interno
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.
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.
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
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.
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.
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
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.
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
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.
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
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); } }
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!
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.
17/27
Exemploclass ProdutoSemEncapsulamento {
public int codigo; public String nome; public double preco; public double desconto_a_vista; }
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));}
19/27
Exemplo
O que aconteceria se o programadortivesse digitado um desconto de 200?
20/27
Exemplo
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;
}
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;
}
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;
}
}
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.
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;
}
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);
} }
EncapsulamentoEncapsulamento
Programação em Java
Prof. Maurício Braga