Orientação a Objetos e a Linguagem Java

Propaganda
Orientação a Objetos e a Linguagem Java
Afrânio Assis
[email protected]
Novembro/2006
1
Encapsulamento e Visibilidade
Novembro/2006
2
Introdução
• Cenário de uso de software
– De um lado, programadores de bibliotecas
– Do outro, programadores clientes
• Por que esconder a implementação dos
programadores clientes?
– Eles não precisam reescrever código
– Programadores de bibliotecas tem liberdade de
modificar código interno sem se preocupar se o
código dos usuários vai compilar
Novembro/2006
3
Introdução
• Como evitar que um objeto altere as variáveis de
um outro objeto?
• Como definir os métodos de objeto que são
apenas de uso interno?
• Precisamos de especificadores de acesso
Novembro/2006
4
package
• Antes de definirmos os especificadores de
acessos precisamos conhecer o conceito de
pacote
– Um conjunto de classes sobre algum domínio
– Ex: biblioteca de elementos gráficos, biblioteca
matemática
• import
import java.util.*;
– Mecanismo para gerenciar espaço de nomes
– Através do import podemos distinguir a Classe A da
biblioteca X da classe A da biblioteca Y
Novembro/2006
5
package
• Um arquivo fonte implica em uma unidade de
compilação
– extensão “.java”
– uma única classe pública, outras são de suporte
– compilação gera “.class”
• Em cada arquivo fonte devemos definir a qual
pacote as classes daquele arquivo pertencem.
package figuras.quadrilateros;
public class Quadrado {
}
package figuras.quadrilateros;
public class Retangulo {
}
Novembro/2006
6
package
• Quando não definimos um pacote, as classes
pertencerão ao package default, que é formado
por todas as classe do “diretório corrente”
Novembro/2006
7
package
• A estrutura de diretórios na qual uma classe se
encontra deve respeitar o pacote definido para
ela. Por exemplo, seja o pacote:
package figuras.quadrilateros;
public class Quadrado {
}
• A classe Quadrado deve estar no diretório:
...\figuras\quadrilateros
Novembro/2006
8
package
• Para usar a classe Quadrado devemos fazer um
import no início do programa
import figuras.quadrilateros.Quadrado
• A JVM usa a variável de ambiente CLASSPATH
para localizar classes importadas.
• Na JVM o diretório atual sempre faz parte do
CLASSPATH.
• Quando adicionamos uma library ao nosso
projeto no JDeveper ela é inserida no
CLASSPATH do projeto.
Novembro/2006
9
package
• O que acontece se duas bibliotecas importadas
via “*” definem a mesma classe X?
– se você não usa a classe X, tudo bem!
– se não, usar o nome qualificado (completo) da classe
Novembro/2006
10
Especificadores de Acesso
Especificadores: public, private e protected
• Nenhum especificador: “friendly” ou “package”
– Todas as classes X do mesmo pacote da classe A
têm acesso aos membros (métodos e atributos) de A
– Todas as classes X externas ao pacote da classe A
não têm acesso aos membros de A
• mesmo que sejam subclasses de A
• public: membros “disponíveis para todo
mundo!”
Novembro/2006
11
Especificadores de Acesso
• private: “não disponibilizo para ninguém!”
– Ninguém pode acessar, apenas a própria classe
– Útil para UM programador de biblioteca
• “package” é útil para TODOS programadores de
biblioteca
– Boas práticas de programação:
• Objetos como caixas-pretas
• O acesso deve ser liberado apenas quando for
necessário
Novembro/2006
12
Especificadores de Acesso
• protected: “somente para filhos”
– Classes filhas têm acesso aos membros da classe
mãe.
– Além disso, todas as classes X do mesmo pacote da
classe A têm acesso aos membros de A.
Novembro/2006
13
Especificadores de Acesso
Especificador
classe
subclasse
classes
classes
A
de A
pacote
mundo
private
ok
protected
ok
ok
ok
public
ok
ok
ok
“friendly”
ok
ok*
ok
ok
• * apenas se estiver declarada no mesmo pacote
Novembro/2006
14
Especificadores de Acesso
• Construtores
– Se private, criação de objetos apenas pode ser feita
dentro da classe
– Se protected, apenas subclasses e classes do
mesmo pacote (além da própria classe) podem criar
objetos utilizando o construtor
• Variáveis locais
– Usar modificadores de acesso dentro de métodos é
ilegal e não faz sentido (pois variáveis locais só têm
escopo local)
Novembro/2006
15
Acesso de Classes
• Especificadores de acesso para classes
– Determinam se uma classe pode ser vista dentro de
outro pacote (public) ou não (“friendly”)
• Restrições
– Uma única classe pública por unidade de compilação
– Nome da classe pública exatamente nome do arquivo
Novembro/2006
16
Download