Programação Orientada a Objetos: Uma Abordagem com Java/Princípios da programação na linguagem Java/Classes Java/Pacotes

PacotesEditar

No desenvolvimento de pequenas atividades ou aplicações, é viável manter o código da aplicação e suas classes associadas em um mesmo diretório de trabalho — em geral, o diretório corrente. No entanto, para grandes aplicações é preciso organizar as classes de maneira a evitar problemas com nomes duplicados de classes e permitir a localização do código da classe de forma eficiente. Em Java, a solução para esse problema está na organização de classes e interfaces em pacotes.

Um pacote é uma unidade de organização de código que congrega classes, interfaces e exceções relacionadas. O código-base de Java está todo estruturado em pacotes e as aplicações desenvolvidas em Java também devem ser assim organizadas.

Essencialmente, uma classe Xyz que pertence a um pacote nome.do.pacote tem um “nome completo” que é nome.do.pacote.Xyz. Assim, se outra aplicação tiver uma classe de mesmo nome não haverá conflitos de resolução, pois classes em pacotes diferentes têm nomes completos distintos.

A organização das classes em pacotes também serve como indicação para o compilador Java para encontrar o arquivo que contém o código da classe. O ambiente Java normalmente utiliza a especificação de uma variável de ambiente CLASSPATH, a qual define uma lista de diretórios que contém os arquivos de classes Java. No entanto, para não ter listas demasiadamente longas, os nomes dos pacotes definem subdiretórios de busca a partir dos diretórios em CLASSPATH.

No mesmo exemplo, ao encontrar no código uma referência para a classe Xyz, o compilador deverá procurar o arquivo com o nome Xyz.class; como essa classe faz parte do pacote nome.do.pacote, ele irá procurar em algum subdiretório nome/do/pacote. Se o arquivo Xyz.class estiver no diretório /home/java/nome/do/pacote, então o diretório /home/java deve estar incluído no caminho de busca de classes definido por CLASSPATH.

Para indicar que as definições de um arquivo fonte Java fazem parte de um determinado pacote, a primeira linha de código deve ser a declaração de pacote:

package nome.do.pacote;

Caso tal declaração não esteja presente, as classes farão parte do “pacote default”, que está mapeado para o diretório corrente. No entanto, a prática de criar classes no pacote default deve ser evitada.

Para referenciar uma classe de um pacote no código fonte, é possível sempre usar o “nome completo” da classe; no entanto, é possível também usar a declaração import. Por exemplo, se no início do código estiver presente a declaração

import nome.do.pacote.Xyz;

então a classe Xyz pode ser referenciada sem o prefixo nome.do.pacote no restante do código. Alternativamente, a declaração

import nome.do.pacote.*;

indica que quaisquer classes do pacote especificado podem ser referenciadas apenas pelo nome no restante do código fonte. As boas práticas de programação Java, no entanto, não recomendam esse uso da declaração com o asterisco.

A única exceção para essa regra que obriga a definição explícita do nome do pacote refere-se às classes do pacote java.lang — essas classes são consideradas essenciais para a interpretação de qualquer programa Java e, por este motivo, o correspondente import é implícito na definição de qualquer classe Java.