Um package é um mecanismo suportado pela linguagem de programação Java que permite agrupar tipos relacionados entre si, fornece outro nível de controlo de acesso e realiza uma gestão do espaço de nomes.
Há várias razões para agrupar tipos num mesmo package:
- Qualquer programador fica a saber que os tipos pertencentes a um mesmo package estão relacionados entre si.
- Os nomes dos tipos definidos num package não entram em conflito com os tipos definidos noutro package porque cada package cria o seu espaço de nomes.
- Pode-se permitir que os tipos dentro de um package tenham acesso a determinados membros de tipos do package e restringir o acesso a estes mesmos membros por parte de tipos definidos fora deste package.
Criar um package
Para criar um package, é necessário escolher o nome para o package e inserir uma instrução package com o nome seleccionado no topo de cada ficheiro fonte que contem os tipos se quer incluir no package. No editor, cada ficheiro que pertence ao package editor.core deverá ter como primeira instrução o seguinte:
package editor.core;
O nome completo de uma classe é uma combinação do nome do package a que pertence a classe e o nome da classe: nomePackage.nomeClasse. Por exemplo, a classe Editor definida no package editor.core tem como nome completo editor.core.Editor.
Usar os membros de um package
Os tipos definidos dentro de um package são designados como os membros do package. Um tipo tem acesso automático a todos os membros definidos no seu package.
Há três formas de um tipo se referir a outro um membro público de outro package:
- Referir-se ao membro utilizando o seu nome completo. Esta solução deve ser utilizada apenas quando o membro em causa é raramente referenciado;
- Importar o membro em causa do package. Esta solução funciona bem se se referenciar poucos tipos do package em causa;
- Importar todos os membros do package. Esta abordagem funciona bem quando se referem muitos membros do mesmo package;
import editor.core.Square;presente na classe editor.Test permite importar a classe editor.core.Square para ser utilizada noutra classe definida noutro package. Após esta instrução, pode-se referir ao tipo Square utilizando apenas o nome simples da classe.
Para importar todos os tipos de um dado package com uma única instrução pode utilizar a instrução import substituindo o nome da classe pelo caracter asterisco (*).
import editor.core.*;
Após esta instrução é possível referir-se a qualquer classe definida no package editor.core simplesmente utilizando o nome simples da classe.
Gestão dos ficheiros
Cada package pode estar guardado num dado directório do sistema de ficheiros. A parte final do caminho correspondente ao directório coincide com o nome do package. Por exemplo, a classe editor.core.Editor deverá estar guardada no directório editor/core que deve existir algures no seu sistema de ficheiros. A classe editor.Test deverá estar presente no directório editor, que deve existir algures no sistema de ficheiros.
Para mais informação sobre packages pode consultar o documentação oficial do Java