O que são pacotes e diagramas de pacotes
Pacote é um mecanismo para organizar e gerenciar elementos de modelos no UML, agrupando elementos de modelos conceitualmente semelhantes e relacionados (incluindo estáticos e dinâmicos) em um pacote, formando módulos com diversas funções ou usos, e controlando a visibilidade dos elementos no pacote para facilitar a compreensão de sistemas complexos.
Um diagrama de pacotes é composto por relacionamentos entre pacotes, exibindo as dependências entre os diversos módulos do sistema por meio da descrição dos relacionamentos entre pacotes.

Representação de Pacotes
Os pacotes são representados de maneira semelhante às pastas do sistema operacional, portanto, no UML, utilizam-se símbolos de pasta semelhantes para representá-los:

Nome do Pacote
Dentro do mesmo nível, cada pacote deve ter um nome distinto dos outros pacotes. Os nomes dos pacotes podem ter duas formas:
1. Nome Simples (Simple Name)O nome simples contém apenas a string do nome do pacote, como no exemplo abaixo:

2. Nome de Caminho (Path Name)Em muitos casos, um pacote pode conter outros pacotes. Quando se utiliza um pacote interno, pode-se usar o nome de caminho para especificar o caminho do pacote, com a sintaxe básica: Nome do Pacote Externo::Nome do Pacote Interno. A imagem abaixo ilustra que o pacote “Borrow” está localizado dentro do pacote “SystemInterface”:

Elementos Dentro do Pacote
Pacotes são mecanismos de agrupamento, portanto, um pacote pode conter qualquer elemento do UML, como classes, casos de uso, interfaces, componentes, nós, etc., e também pode conter outros pacotes, diagramas de casos de uso, diagramas de colaboração, diagramas de sequência, etc.
Visibilidade dos Elementos Dentro do Pacote
A visibilidade dos elementos dentro de um pacote inclui três tipos principais:
A imagem abaixo mostra os três tipos de visibilidade dos elementos dentro de um pacote:

Contém três métodos de representação de visibilidade para elementos
A visibilidade das três classes “classe A”, “classe B” e “classe C” na figura acima são públicas, privadas e protegidas respectivamente.
Relacionamentos Entre Pacotes
Os relacionamentos entre pacotes são principalmente de dependência e generalização.
1. DependênciaA dependência entre pacotes refere-se à existência de uma dependência entre alguns elementos de dois pacotes. A dependência é representada por uma linha pontilhada com uma seta, apontando do pacote que depende para o pacote sendo dependido. Os relacionamentos de dependência entre pacotes podem ser generalização, implementação, importação, etc. A imagem abaixo representa a dependência entre dois pacotes:

A dependência de importação (import dependency) permite que os elementos de um pacote acessem os elementos de outro pacote e pode ser representada adicionando o estereótipo <<import>> na linha pontilhada. A dependência de importação não é transitiva.
2. GeneralizaçãoA generalização entre pacotes é semelhante à generalização entre classes. A generalização entre pacotes refere-se a um pacote especializado substituindo elementos de um pacote geral e podendo adicionar novos elementos. Na prática, a generalização entre pacotes também é um tipo de dependência.
Estereótipos de Pacote
A imagem abaixo mostra alguns estereótipos de pacotes e utiliza diferentes gráficos ou símbolos para representá-los:

Princípios de Design de Pacote