Pacotes – Organizando suas classes e bibliotecas

Propaganda
Pacotes – Organizando suas classes e
bibliotecas
Material baseado na apostila FJ-11: Java e
Orientação a Objetos do curso Caelum,
Ensino e Inovação, disponível para download
em http://www.caelum.com.br/apostilas/
1
O que são pacotes?
•
Um pacote é um agrupamento de tipos relacionados
fornecendo proteção de acesso e gerência de “espaço de
nomes”
–
Tipos aqui são usados para referir-se a classes e interfaces.
–
A implementação física de um pacote está freqüentemente
associada a uma pasta ou diretório do sistema de arquivos.
2
Benefícios do Empacotamento
•
Você e outros programadores podem facilmente determinar
que as classes e interfaces do pacote são relacionadas.
•
Você e outros programadores sabem onde procurar classes e
interfaces que possam fornecer, por exemplo, funções
relacionadas a gráficos, bancos de dados, persistência, etc.
•
Os nomes de suas classes e interfaces não irão conflitar com
os nomes em outros pacotes porque o pacote cria um novo
espaço de nomes.
•
Você pode permitir que as classes dentro de um mesmo
pacote tenham acesso irrestrito umas as outras ao mesmo
tempo em que restringe o acesso para as classes fora do
pacote
3
Organização em pacotes
•
As próprias classes do JRE estão também organizadas
em pacotes
4
Criando um pacote
•
Para criar um pacote, você escolhe um nome para o
pacote e põe um comando package com o nome
escolhido na primeira linha de cada arquivo fonte que
contém os tipos (classes e interfaces) que você quer
incluir no pacote.
•
Se você não usa um comando package, seu tipo resulta
em um pacote sem nome.
–
Use um pacote sem nome somente para aplicações pequenas ou
temporárias
5
Colocando uma classe em um pacote
•
Para colocar uma classe em um pacote, são necessários dois
passos:
1.
incluir a declaração package na primeira linha do código fonte
package br.ufrj.nce.siga;
class Aluno {
...
}
6
Colocando uma classe em um pacote
2.
colocar os bytecodes gerados pelo processo de compilação em uma
pasta que segue a estrutura da declaração package.
???
br
ufrj
nce
siga
Aluno.class
7
Padrão da nomenclatura de pacotes
•
O padrão recomendado pela Sun para nomes de pacotes é o
domínio da empresa, do mais genérico para o mais específico.
package br.ufrj.nce.siga;
package br.ufrj.dcc.gris;
•
Esse padrão evita ao máximo o conflito de nomes entre pacotes de
diferentes empresas.
•
Nomes de pacotes devem conter apenas letras minúsculas.
8
Importando e usando classes de outros
pacotes
9
Usando classes do mesmo pacote
•
Para usar uma classe do mesmo pacote, basta fazer
referência a ela.
10
Usando classes de outros pacotes
•
Para usar uma elemento público (classes e interfaces) de
fora do pacote, você deve escolher uma das seguintes
opções:
–
Importar o elemento do pacote usando o comando import
–
Importar todos os elementos do pacote usando o comando import
–
Referenciar o elemento pelo seu nome qualificado completo (sem
usar o import)
11
Importando Pacotes
•
A fim de poder usar classes fora do pacote onde você
está trabalhando, você tem de importar o pacote dessas
classes.
•
Por default, todos os programas Java importam o pacote
java.lang.*. Por esse motivo, você pode usar classes
como String e Integer em seus programas ainda que você
não tenha importado nenhum pacote.
•
A sintaxe para importar um pacote é:
import <nomedoPacote>;
12
Exemplo: importando uma Classe ou um
Pacote
•
Nesse último exemplo, todas as classes do pacote são importadas,
mas não os subpacotes. Assim, para importar as classes dos pacotes
javax.swing e javax.swing.event, é preciso fazer:
13
Importação de classes
•
Importar todas as classes de um pacote não implica em
perda de performance em tempo de execução, mas pode
trazer problemas com classes de mesmo nome!
•
Além disso, a importação explícita de classes é
considerada boa prática de programação, pois facilita a
leitura do código por outros programadores.
14
Usando classes de outros pacotes através
do nome qualificado
15
Acesso aos atributos, construtores e métodos
Onde:
C1 classes filhas no
mesmo pacote
+
~
#
+
~
#
+
C2 classes filhas em
outro pacote
C3 classes acessando
através de referências
(no mesmo pacote)
+
~
#
+
#
As marcações em vermelho
mostram a visibilidade dos
atributos e métodos da classe
Qualquer para as outras
classes do projeto, em função
do modificador utilizado.
C4 classes acessando
através de referências
(fora do pacote)
16
Classes públicas
•
Para que uma classe possa ser importada por outra
classe fora do pacote, ela tem de ser declarada com o
modificador public
•
Um arquivo pode conter uma única classe pública, e esta
determina o nome do arquivo (no exemplo anterior, o arquivo
que contém a classe Funcionario tem de ter o nome
Funcionario.java)
17
Classpath
•
Vamos voltar ao exemplo da classe Aluno no slide 7. Já vimos que o
arquivo Alunos.class, contendo os bytecodes gerados pelo processo
de compilação devem estar em uma pasta que reproduza a
declaração package do arquivo Alunos.java
•
Mas onde devo colocar esta estrutura de arquivos?
???/br/ufrj/nce/siga/Aluno.class
???
br
ufrj
nce
siga
Aluno.class
18
Classpath
•
???/br/ufrj/nce/siga/Aluno.class
•
Você pode colocar sua estrutura de pastas onde quiser, mas sua
escolha tem de ser informada ao compilador Java através da variável
de ambiente CLASSPATH
•
Suponha que você decida montar a estrutura de pastas na raiz do
driver C. Seria necessário então fazer:
C:\> set classpath=c:\
•
Para sistemas Unix, supondo que nossos arquivos *.class estão no
diretório /usr/local/minhasClasses, escreveríamos:
export classpath=/usr/local/minhasClasses
19
Classpath
•
Você pode ainda incluir mais de um caminho na variável de ambiente
CLASSPATH, basta separá-los por ; (windows) ou : (Unix).
Exemplo:
set classpath=C:\;D:\;E:\MeusProgramas\Java
•
para sistemas Unix:
export classpath=/usr/local/java:/usr/minhasClasses
20
Trabalhando com pacotes no NetBeans
•
Trabalhar com pacotes no NetBeans é muito fácil! Quando criamos
uma nova classe, o NetBeans, automaticamente, cria a estrutura de
diretórios correspondente à declaração package
21
Trabalhando com pacotes no NetBeans
•
A pasta chamada classes é automaticamente incluída na
CLASSPATH
22
Trabalhando com pacotes no NetBeans
•
Você pode mudar uma classe de pacote simplesmente arrastando o
arquivo correspondente com o mouse
•
O NetBeans exibe uma tela de confirmação e, em seguida, muda a
declaração package do arquivo para corresponder ao caminho da
23
nova pasta.
Download