Como Utilizar a Instrução Package em Java: Fundamentos e Boas Práticas
Fundamentos da Instrução Package
Utilizar corretamente a instrução package
em Java é crucial para organizar e manter projetos de software de forma eficaz. O processo de empacotamento em Java é uma abordagem comum para organizar classes e interfaces.
Seguindo os padrões da linguagem Java, um pacote é nomeado obedecendo algumas regras importantes para diminuir a probabilidade de colisão entre classes que possuem o mesmo nome. Os pacotes são vistos como recipientes para classes, mas eles definem na verdade uma hierarquia de diretórios para a localização de classes e interfaces.
Empacotar classes e interfaces, também tem como objetivo promover o reaproveitamento de código, a sustentabilidade e o princípio orientado a objeto de encapsulamento e modularidade. Neste artigo, vamos explorar os fundamentos dessa instrução, as regras de nomeação de pacotes e como evitar conflitos de classe, garantindo um código mais limpo e sustentável.
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: