I package sono contenitori, in generale, di elementi UML (spesso classi). Un package definisce un namespace, quindi i nomi degli elementi al suo interno devono essere diversi.

Graficamente, un package può essere rappresentato con vari livelli di dettaglio, come ad esempio:

Untitled

I contenuti di un package si possono indicare anche con la notazione delle relazioni di annidamento:

Untitled

Motivazioni dei package

I package permettono di modellare sistemi complessi in modo gerarchico.

Ciascun package deve avere:

In questo modo, esso fornisce una vista relativa a un determinato aspetto del problema, il quale può allora essere analizzato, sviluppato, ecc.. in modo (per quanto possibile) indipendente dal resto del problema.

Relazioni tra package

Una relazione tra due package "riassume" relazioni multiple dello stesso tipo tra i singoli elementi che appartengono a tali package. In particolare, si possono definire relazioni di:

Esistono poi alcune relazioni che riguardano direttamente i package:

Dipendenze

Le relazioni di dipendenza tra package devono essere esplicite: non è sufficiente che gli elementi di un package siano pubblici perchè questi possano essere usati da altri package. Inoltre, le dipendenze non sono transitive: se il package A può accedere a B, e B può accedere a C, non è detto che A possa accedere a C.