Buscar

POO 5 encapsulamento

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

ENCAPSULAMENTO
Thaís Alves Burity Rocha
Agenda
 Encapsulamento
 Pacotes e declarações import
 Modificadores de acesso
Encapsulamento
 Capacidade de ocultar dados dentro de modelos, 
permitindo que somente operações especializadas 
os manipulem
 “Esconder” uma ideia, ocultando detalhes internos para 
o usuário do código
 Em Java, as classes são os modelos e é necessário 
fazer com que o acesso aos atributos seja feito 
somente através de métodos
Exemplo de Falta de Encapsulamento
 Sistema bancário
 Do jeito visto até aqui, qualquer um pode atribuir o 
valor de saldo que quiser
 Não há nada que faça que somente os métodos de 
creditar() e debitar() alterem o valor do saldo
Conta minhaConta = new Conta(“11139-2”, 500);
minhaConta.saldo = 100000;
Encapsulamento
 Possibilita a criação de programas com menos 
erros, mais claros e mais fáceis de manter
 Encapsular dados em modelos deve ser um dos 
principais objetivos do programador OO
 Classes são modelos, ou seja, abstrações da 
realidade
Encapsulamento
 Em Java, é possível encapsular dados em classes 
utilizando modificadores de acesso sobre atributos 
e métodos que os manipulam
 Classes podem ser organizadas em “diretórios”, 
denominados pacotes
 É possível também utilizar modificador de acesso 
sobre uma classe para restringir o acesso à ela com 
base no pacote
 Logo, pacotes também podem ser interpretados como 
um meio de encapsulamento
Introdução
Exemplos
Pacotes e Declarações Import
Pacotes
 Mecanismo para organizar classes, tal como uma 
estrutura de diretório
 Delimita um espaço de nomes (namespace)
 Não é possível existir duas classes com o mesmo nome
em um mesmo pacote
 O nome completo de uma classe é o nome do pacote
+ nome atribuído à classe
Pacotes
 Quando não são definidos pacotes explícitamente, 
todas as classes são mantidas em um único pacote
(default)
 É uma boa prática definir pacotes
 Recomendável que as classes em um mesmo pacote
estejam relacionadas entre si
 Interface gráfica
 Estruturas de dados
 Banco de dados
Pacotes
 A declaração do pacote deve ser a primeira coisa
no arquivo de código-fonte que contém a classe
 Uso da palavra reservada package
package pack1;
class Conta{
double saldo;
}
Pacotes
 Convenção de nome
 Iniciar com o nome de domínio da empresa invertido
 Exemplo
 CESAR: www.cesar.org.br
 br.org.cesar.<nome que caracteriza classes do pacote>
 Pacote br.org.cesar.domain
 Classe br.org.cesar.domain.Doctor
Declarações import
 Quando uma classe quer referenciar outra classe
localizada em um pacote diferente, é 
recomendável usar a declaração de import
 Importação de uma classe de um pacote:
 Importação de todas as classes de um pacote: 
import <nome do pacote>.<nome da classe>;
import <nome do pacote>.*;
Declarações import
 A declaração de import deve vir antes da
declaração da classe
 Fundamental para utilizar a biblioteca Java (API)
 Isso não significa que é obrigatória
Declarações import: Exemplo
package pack1;
import pack2.Cliente;
class Conta{
String numero;
double saldo; 
Cliente cliente;
void creditar(){}
void debitar(){}
}
Declaração do pacote
Declaração de “importação” 
da classe “pack2.Cliente”
Variável de referência
package pack2;
class Cliente{
String cpf;
double nome; 
...
} 
Declarações import: Exemplo
 E se o programador não quiser usar import?
package pack1;
class Conta{
String numero;
double saldo; 
pack2.Cliente cliente;
void creditar(){}
void debitar(){}
}
Utiliza o nome 
completo da classe
Classes
Atributos
Métodos
Modificadores de acesso
Modificadores de Acesso de Classes
 Definem a “visibilidade” da classe
 public
 A classe é acessível a partir de qualquer outra
 A classe pode ser instanciada
 A classe pode ser estendida (herança)
 Os métodos e atributos definidos pela classe podem ser 
acessados, dependendo de seus modificadores de acesso
 default
 Quando não é especificado
 Significa acesso em nível de pacote
Modificadores de Acesso de Classes: 
Exemplos
package pack1;
import pack2.Conta2;
import pack2.Conta3;
public class Conta1{
double saldo;
Conta2 conta2;
Conta3 conta3;
void creditar(){}
void debitar(){}
}
package pack2;
import pack1.Conta1;
class Conta2{ 
Conta1 conta1;
}
package pack2;
public class Conta3{
Conta2 conta2;
}
Código-fonte em Java
 No máximo, uma classe public por arquivo de 
código-fonte
 Pode conter várias classes que não sejam public
 Se houver classe public, nome do arquivo deve ser 
o nome da classe
 Se não há classe public, o arquivo pode conter
qualquer nome
Modificadores de Acesso de Atributos
e Métodos
 Definem a “visibilidade” de atributos e métodos
 Retomaremos esse assunto depois de ver herança
private
Pode ser acessado apenas dentro da classe onde foi
declarado
public Pode ser acessado a partir de qualquer classe
default Só pode ser acessado por classes no mesmo pacote
protected Default + subclasses (herança)
Modificadores de Acesso de Atributos
e Métodos: Exemplos
package pack1;
public class Conta{
public String titular;
String numero;
private double saldo;
private void creditar()
{}
public void debitar()
{}
double consultarSaldo()
{
return saldo;
}
}
package pack1;
public class MeuPrograma{
public void testar(){
Conta conta = new Conta();
conta.creditar();
conta.debitar();
double s1 = conta.consultarSaldo();
double s2 = conta.saldo;
String nome = conta.titular;
String numeroConta = conta.numero; 
}
}
Modificadores de Acesso de Atributos
e Métodos: Exemplos
package pack1;
public class Conta{
public String titular;
String numero;
private double saldo;
private void creditar()
{}
public void debitar()
{}
double consultarSaldo()
{
return saldo;
}
}
package pack2;
import pack1.Conta;
public class MeuPrograma{ 
public void testar(){
Conta conta = new Conta();
conta.creditar();
conta.debitar();
double s1 = conta.consultarSaldo();
double s2 = conta.saldo;
String nome = conta.titular;
String numeroConta = conta.numero;
}
}
Modificadores de Acesso de Atributos
e Métodos: Exercício
package pack1;
class Conta{
public String titular;
String numero;
private double saldo;
private void creditar(){}
public void debitar(){}
double consultarSaldo(){
return saldo;
}
}
package pack2;
import pack1.Conta;
public class MeuPrograma{
public void testar(){
Conta conta = new Conta();
conta.creditar();
conta.debitar();
double s1 = conta.consultarSaldo();
double s2 = conta.saldo;
String nome = conta.titular;
String numeroConta = conta.numero; 
}
}
O método testar() executará corretamente?
Modificadores de Acesso de Atributos
e Métodos: Exercício (solução)
package pack1;
class Conta{
public String titular;
String numero;
private double saldo;
private void creditar(){}
public void debitar(){}
double consultarSaldo(){
return saldo;
}
}
package pack2;
import pack1.Conta;
public class MeuPrograma{
public void testar(){
Conta conta = new Conta();
conta.creditar();
conta.debitar();
double s1 = conta.consultarSaldo();
double s2 = conta.saldo;
String nome = conta.titular;
String numeroConta = conta.numero;
}
}
A classe Conta não é visível fora de pack1! 
Modificadores de Acesso
 Não se aplicam à variáveis locais Variáveis declaradas dentro de métodos (ou outros 
blocos)
 Não são atributos
public int somar (int a, int b){
int resultado = a + b;
return resultado;
}
public int somar (int a, int b){
private int resultado = a + b;
return resultado;
}
RESULTADO 
é uma 
variável local
Boas Práticas de Programação OO
 Preferencialmente, declare os atributos como 
private
 Para permitir acesso de leitura a um atributo x, crie 
um método público getX que devolve x
 Para permitir acesso de escrita a um atributo x, crie 
um método público setX que modifica o valor de x
Boas Práticas de Programação OO
 Exemplo:
public class Cliente{
private String nome;
private String cpf; 
public String getNome(){
return nome; 
}
public void setNome(String nome){
this.nome = nome; 
}
...
} 
Mudanças na forma de 
armazenar nome e cpf
não afetam a utilização 
dos métodos get e set
Boas Práticas de Programação OO
 Cuidado!
 Nunca crie um método sem haver uma real necessidade
 Muitas vezes getters e setters nunca são invocados e 
poderiam ser substituídos por outros métodos
 Na classe Conta, não faz sentido existir setSaldo()
 É mais adequado existir métodos de creditar() e debitar()
 O método debitar() deve verificar a disponibilidade de 
saldo para realizar a operação

Outros materiais