Fundamentos da Instrução Package
O processo de empacotamento em Java é uma abordagem comum para organizar classes e interfaces. Seguindo os padrões da linguagem, um pacote é nomeado obdecendo algumas regras importantes para diminuir a probabilidade de colisão entre classes que possuem o mesmo nome. Os pacotes são vistos como recepientes para classes, mas eles definem na verdade uma hierarquia de diretórios para a localização de classes e interfaces.
Empacotar classes, também tem como objetivo promover o reaproveitamento de código, a sustentabilidade e o princípio orientado a objeto de encapsulamento e modularidade. Este artigo irá demonstrar a você como e quando empacotar suas classes e interfaces seguindo os padrões de codificação definidos na linguagem Java.
1. Instrução package
Em Java existe um grupo de palavras que são reservadas, ou seja, não podem ser usadas como nome de variáveis. Quando classes e interfaces são criadas em um pacote específico é necessário colocar no topo da classe e da interface, como primeira instrução, o nome completo do pacote. A instrução package
é uma destas palavras reservadas da linguagem e é ela que define que tal classe pertence a um pacote.
Quando um pacote for criado, ele deve seguir uma regra de nomeação que é a seguinte: utilize o endereço eletrônico da empresa mballem.wordpress.com
de trás para frente com.wordpress.mballem
, seguido do nome do projeto com.wordpress.mballem.artigos
e a partir deste ponto insira dentro as classes, interfaces e até novos pacotes se necessário. Essa regra de nomeação foi desenvolvida para evitar que classes e interfaces de mesmo nome não acabem em conflito quando importadas em um mesmo projeto. Por exemplo, a classe Cliente criada na empresa “A” e outra na empresa “B” poderia acabar em conflito se usadas em um mesmo projeto e não tivessem sido separadas por pacotes distintos. Já o nome do projeto é importante para definir o objetivo das classes contidas nele.
Outras regras sobre o uso da instrução “package” são as seguintes:
- São limitadas a uma por arquivo;
- O nome dos pacotes são similares a estrutura de um diretório. O nome do pacote
com.wordpress.mballem.artigos
seria equivalente ao diretóriocom/wordpress/mballem/artigos
; - Os nomes dos pacotes que começam com
java
ou comjavax
são reservados para o uso da JavaSoft, a unidade comercial da Sun Microsystems, atualmente adquirida pela Oracle; - Os pacotes devem ter seus nomes em letras minúsculas e palavras compostas devem ser separadas pelo caractere underscore
com.wordpress.mballem.artigos.artigo_pacotes
.
Quando você projeta pacotes em Java para agrupar classes, os seguintes pontos devem ser considerados:
Atributo do pacote | Benefício de aplicação |
Acoplamento de classes | Dependências de pacotes são reduzidas com acoplamento de classes. |
Acoplamento de sistema | Dependências de pacotes são reduzidas com acoplamento de sistemas. |
Tamanho do pacote | Normalmente, pacotes maiores suportam reutilização, enquanto que pacotes menores suportam melhor a manutenção. |
Manutenção | Frequentemente, as mudanças de software podem ser limitadas a um único pacote quando os pacotes são orientados a funcionalidades. |
Nomenclatura | Pense em convenções quando nomear seus pacotes. Utilize nomeação reversa de domínios para a estrutura de pacotes. Utilize letras minúsculas com underscore (_) para separar palavras em nomes de pacotes. |
2. Por que seguir as regras da especificação?
A especificação de codificação Java define varias regras para que o código desenvolvido por um programador americano, seja perfeitamente entendido e compreensível para seus colegas e também por programadores brasileiros, ingleses, italianos, entre outros.
Veja um exemplo de como um conflito de classes poderia ocorrer se não usássemos corretamente as especificações referentes a empacotamento. Uma empresa chamada Cápsula (capsula.com.br
) está desenvolvendo um projeto Geometry. Neste projeto não está sendo utilizada a especificação Java de nomeação dos pacotes. Um grupo de classes foi criado, Plane
, Point
e Polygon
. Na mesma empresa um segundo projeto está sendo desenvolvido, o Simulator, com as classes Plane
, HotAirBalloon
e Helicopter
. Veja que se for necessário unir estes projetos, teria conflito entre as classes Plane
. Usando corretamente a nomenclatura de pacotes esse problema deixa de existir, teríamos dois pacotes distintos, o br.com.capsula.geometry
e o br.com.capsula.simulator
.
Quando uma classe é criada em um pacote específico a instrução package
deve estar no topo do arquivo desta classe, veja na Listagem 1 o exemplo da classe Plane
do projeto Geometry. E na Listagem 2 o exemplo da classe Plane
do projeto Simulator.
package br.com.capsula.geometry; public class Plane { //conteudo da classe }
package br.com.capsula.simulator; public class Plane { //conteudo da classe }
Se o pacote “power” for adicionado ao projeto Simulator, e nele for criada a classe Energy, se deve declarar a instrução “package” da seguinte maneira (Listagem 3):
package br.com.capsula.simulator.power; public class Energy { //conteudo da classe }
Referencia: