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
Download

Pacotes e modificadores de visibilidade