Java:
Pacotes e
Modificadores de Visibilidade
Alcides Calsavara
1
Pacotes (packages)
- definição básica Maneira
de organizar classes em
grupos
Um pacote contém um número
qualquer de classes relacionadas de
acordo com:
– propósito
– escopo
– herança
2
Pacotes
- utilidades/razões Permitem
organizar classes em
unidades, de forma similiar à
organização de arquivos em pastas,
facilitando a sua manipulação.
Reduzem problemas de conflitos de
nomes, pois classes podem ser
"escondidas" em pacotes.
3
Pacotes
- utilidades/razões Permitem
proteger classes, atributos e
métodos de forma mais abrangente que
proteção baseada em classes (modificadores
de visibilidade package e protected).
Podem ser usados para identificação de
classes (um pacote de classes para um certo
propósito pode conter o nome da
organização e o nome do autor do pacote).
4
Pacotes
- organização em hierarquia Um
pacote pode conter outro pacote,
definindo uma hierarquia de pacotes.
Exemplo: O pacote java, contém os
pacotes io, net, util e awt. O pacote awt,
por sua vez, contém o pacote image e
outros. Assim o nome completo deste
último pacote é java.awt.image.
5
Pacotes
- utilização Classes
do pacote java.lang (System, Date, String,
Integer, ...) são automaticamente disponíveis.
Uma classe de outro pacote pode ser referenciada
através de seu nome completo (por exemplo,
java.awt.Font f = new java.awt.Font(); ).
Classes de outro pacote usadas com freqüência
devem ser "importadas" (individual ou
coletivamente), permitindo que sejam
referenciadas somente por nome (por exemplo,
Font).
6
Pacotes
- comando import
Usado para importar uma certa classe. Ex:
import java.util.Vector ;
...
Vector v = new Vector();
Usado para importar todas as classes públicas de um
pacote. Ex: import java.awt.* ;
Não importa pacotes recursivamente. Por exemplo, import
java.awt.* não importa as classes do pacote image.
Devem aparecer no início de um arquivo.
7
Pacotes
- conflitos de nomes Duas
classes com o mesmo nome (obviamente,
pertencentes a dois pacotes distintos) só podem ser
referenciadas através de seu nome completo.
Exemplo: Classe Table disponível nos pacotes
Oracle e SQLServer.
import Oracle.* ;
import SQLServer.* ;
Oracle.Table t1 = new Oracle.Table( ... );
SQLServer.Table t2 = new SQLServer.Table( ... );
8
Pacotes
- variável CLASSPATH Java
combina duas coisas para encontrar classes: o
nome do pacote e a lista de diretórios especificada
na variável de ambiente CLASSPATH.
Para cada nome de pacote deve haver um diretório
no sistema de arquivos, recursivamente (a
hierarquia de diretórios espelha a hierarquia de
pacotes). Por exemplo, para o pacote java.applet
deve haver o diretório java e, dentro deste, o
diretório applet, contendo as classes do pacote.
9
Pacotes
- variável CLASSPATH (cont.)
Cada
diretório raiz (correspondente a um
pacote raiz) deve estar contido em um dos
diretórios listados na variável CLASSPATH.
Por exemplo, a variável CLASSPATH pode
ser definida como
C:\java\lib; C:\netscape\lib; .
onde o ponto final significa o diretório
corrente.
10
Pacotes
- processo de criação Definir
um nome. Por exemplo,
pucpr.ccet.ppgia.
Criar a correspondente estrutura de
diretórios. Por exemplo, criar o diretório
pucpr dentro de um dos diretórios
especificados em CLASSPATH, daí,
dentro de pucpr, criar o diretório ccet, e
dentro deste o diretório ppgia.
11
Pacotes
- processo de criação - (cont.)
Usar
o comando package para inserir classes
em um pacote.
– Deve ser único em um arquivo e deve ser o
primeiro comando presente no arquivo.
– Todas as classes definidas no arquivo passam a
fazer parte do pacote especificado.
– Quando não especificado, as classes são
inseridas no pacote default de Java.
– Pode ser especificado com o mesmo nome de
pacote em diversos arquivos.
12
Pacotes
- proteção de classes Uma
classe só é visível fora de seu pacote se
for qualificada como public.
Um arquivo pode conter diversas classes,
mas somente uma delas pode ser qualificada
como public (o nome do arquivo deve ser
igual ao nome dessa classe).
Um comando import do tipo import p.*
importa somente as classes públicas do
pacote p.
13
Pacotes
- proteção de classes - (cont.)
Exemplo:
package colecoes;
public class Lista { // arquivo Lista.java
private Nodo raiz;
public void insere(Object o) { ... }
...}
class Nodo { // visibilidade package
... }
14
Modificadores de Visibilidade
15
Modificadores de Visibilidade
Permitem
controlar a manipulação de
membros (atributos e métodos) por métodos
considerando os escopos de classe,
subclasse e pacote, de forma combinada.
Modificadores:
–
–
–
–
private
protected
package
public
16
Pacote (package)
Organização
lógica de classes em grupos
Corresponde à noção de módulo
Há pacotes disponibilizados em Java: java.io,
java.lang, java.net, java.awt, ...
Usuários podem criar seus próprios pacotes:
basta adicionar a cláusula package <nome>
como primeira linha de comando em um
arquivo
17
Modificador private
Um
membro qualificado como private
somente é acessível a partir de
métodos da própria classe à qual
pertence o membro.
18
Modificador public
Um
membro qualificado como public é
acessível a partir de qualquer método
de qualquer classe, independentemente
de subclasse e de pacote.
19
Modificadores public e private
Exemplo 1
class Pessoa
{ private int idade;
private int altura;
public Pessoa(int i, int a)
{ idade = i; altura = a; }
private void cresce( ) { idade++; altura++; }
private void decresce( ) { idade++; altura--; }
public void envelhece( )
{ if (idade < 22) cresce( ) else decresce( ); }
}
20
Modificadores public e private
Exemplo 2
class Funcionario extends Pessoa
{ private int nivel;
private int horas;
public Funcionario(int i, int a, int n, int h)
{ super(i, a); nivel = n; horas = h; }
public double salario( )
{ return ( nivel * 80 * horas) ; }
}
21
Modificador package
Um
membro qualificado como package
é acessível a partir de qualquer método
de qualquer classe pertencente ao
mesmo pacote que a classe à qual
pertence o membro,
independentemente de subclasse.
22
Modificador protected
Um
membro qualificado como protected
é acessível a partir de qualquer método
de qualquer classe, exceto se a classe
de acesso estiver em pacote distinto e
não for subclasse da classe à qual
pertence o membro.
23
Modificadores package e
protected - Exemplo 1
class Veiculo {
int ano; // package
protected int potencia; ... }
class Carro extends Veiculo
{ ... potencia++;
ano++;
... }
class Retificadora
{ ... Carro c = new Carro (...) ;
c.ano = 1980;
c.potencia = 100; ... }
24
Modificadores package e
protected - Exemplo 2
package Basico; // arquivo 1
class Veiculo {
int ano; // package
protected int potencia; ... }
package Extensao; // arquivo 2
class Carro extends Veiculo
{ ... potencia++; ... } // sem acesso a ano
class Retificadora
{ ... Carro c = new Carro (...) ; ... }
// sem acesso a ano e potencia
25
Resumo
Visibilidade
Public
Protected
Package
Private
Da mesma classe
S
S
S
S
De qualquer classe do mesmo pacote
S
S
S
N
De qualquer classe fora do pacote
S
N
N
N
De uma subclasse no mesmo pacote
S
S
S
N
De uma subclasse fora do pacote
S
S
N
N
26