# Diagrama de paquets

Un diagrama de paquets és una representació gràfica que agrupa un conjunt de paquets i mostra les dependències entre aquests. Els diagrames de paquets serveixen per facilitar la gestió de models dins d'un sistema complex. Cada paquet del diagrama està format per un nom, l'element pare, la documentació, les abstraccions, la fulla, l'arrel i els fills.

## Definició

Un paquet és un mecanisme utilitzat per agrupar elements de UML, facilitant d'aquesta manera la gestió dels models en un sistema complex. Els paquets poden ser simples estructures conceptuals o poden estar reflectits a la implementació.
Els paquets permeten dividir un model per agrupar i encapsular els seus elements en unitats lògiques individuals. Poden tenir una interfície i una implementació d'aquesta. També poden estar niats els uns dins els altres, i un paquet pot dependre d'altres paquets. Podem utilitzar-los per plantejar l'arquitectura del sistema a nivell general.

## Elements d'un diagrama de paquets
### Paquet

Un paquet s'utilitza per agrupar elements, a més de proporcionar un denominador (namespace) pel conjunt dels elements agrupats. Un paquet pot contenir altres paquets.
Propietats d'un paquet:
| Nom | Nom del paquet |
| Element pare | Element que conté el paquet |
| Documentació | Descriu el paquet. |
| Abstracció | Si és abstracte, el paquet no té una declaració completa i, en general, no pot ser instanciat. La intenció de fer un paquet abstracte és que pugui ser utilitzat per altres paquets. |
| Fulla | Indica si és possible especialitzar més el paquet. Si el valor és cert, el paquet no es pot especialitzar més. |
| Arrel | Indica si el paquet té o no antecessors. Si el valor és cert, el paquet no té cap antecessor (element pare). |
| Fills | Els fills del paquet |

### Subsistema

Un subsistema és una unitat de descomposició jeràrquica per a grans sistemes. Un subsistema té elements de realització i elements d'especificació. Els elements de realització defineixen els continguts reals del subsistema. Consisteixen en classes, així com les relacions entre elles, o bé contenen una jerarquia de subsistemes, amb classes i fulles. Els elements d'especificació, en canvi, defineixen la visió externa del subsistema. Aquests descriuen els serveis oferts pel subsistema, el comportament d'aquest i la seva interfície, però sense revelar-ne l'estructura interna.
Propietats d'un subsistema:
| Nom | Nom del subsistema |
| Element pare | Element que conté el subsistema |
| Abstracció | Si és cert, el sistema no proporciona una declaració completa i, en general, no pot ser instanciat. La intenció de fer un subsistema abstracte és que pugui ser utilitzat per altres subsistemes. |
| Documentació | Descriu el subsistema. |
| Fulla | Indica si és possible especialitzar més el subsistema. Si el valor és cert, el subsistema no es pot especialitzar més. |
| Arrel | Indica si el subsistema té o no antecessors. Si el valor és cert, el subsistema no té cap antecessor (element pare). |
| Operacions | Una operació és una característica de comportament d'un subsistema que especifica el nom, el tipus, els paràmetres i les restriccions per invocar un comportament associat. Un subsistema pot tenir diverses operacions. |
| Fills | Els fills del subsistema |

### Model

Un model és un paquet UML especialitzat que descriu un sistema des d'un punt de vista determinat. Els models es poden utilitzar per crear diagrames de models. Un model es pot dibuixar utilitzant el símbol d'un paquet normal però amb un petit triangle a la part superior dreta del rectangle. Els sistemes descrits per un model poden estar formats per diversos paquets, amb possibles relacions entre ells.

### Dependència

Una dependència és una relació que significa que un element (paquet) o un conjunt d'elements (subsistema) necessita altres elements per a la seva especificació o implementació. Això significa que la semàntica completa dels elements dependents és semànticament o estructural dependent de la definició dels elements dels quals depenen.
Propietats d'una dependència:
| Nom | Nom de la dependència |
| Proveïdor | Element o conjunt d'elements que proporciona una semàntica i/o estructura de la qual depèn l'element o conjunt d'elements de l'altra banda de la relació de dependència. En algunes relacions de dependència en el context d'un disseny de classes orientat a objectes (OO), la intenció és que l'element més abstracte tingui aquest rol. |
| Documentació | Descriu la dependència. |
| Client | Element o conjunt d'elements dependent del proveïdor |

### Generalització

Una generalització és una relació taxonòmica entre dos classificadors, un de més general i un de més específic. Cada instància del classificador específic és també una instància del classificador general. Per tant, el classificador específic hereta les característiques del classificador més general.
Propietats d'una generalització:
| Nom | Nom de la generalització |
| General | Classificador general a la relació de generalització |
| Específic | Classificador específic a la relació de generalització |
| Documentació | Descriu la generalització. |
| Substituïble | Indica si el classificador específic pot ser utilitzat en qualsevol cas en què puguem fer servir el classificador general. Si és cert, les traces d'execució del classificador específic seran un subconjunt de les traces d'execució del classificador general. |

### Importació

Una importació és una relació dirigida d'un element (paquet, model, subsistema...) proveïdor a un element client. Aquesta relació defineix que els membres del proveïdor són importats per part de l'element client. Tant la part proveïdora com la part client poden ser també conjunts d'elements.
Propietats d'una importació:
| Nom | Nom de la importació |
| Proveïdor | Element o conjunt d'elements que proporciona uns elements dels quals depèn el paquet o conjunt de paquets de l'altra banda de la relació d'importació. En algunes relacions d'importació en el context d'un disseny de classes orientat a objectes (OO), la intenció és que el paquet més abstracte tingui aquest rol. |
| Visibilitat | Especifica la visibilitat dels elements importats, és a dir, si els elements importats seran visibles per als paquets que, al seu torn, importin elements d'aquest paquet. Si la importació és pública (importació), els elements importats seran visibles fora del paquet, mentre que si la importació és privada (accés) no ho seran. Quan parlem d'una importació tindrem per defecte la visibilitat pública. |
| Documentació | Descriu la importació. |
| Client | Element o conjunt d'elements que importa membres del proveïdor |

### Accés

La relació d'accés consisteix en una relació d'importació en què la visibilitat és privada. Per exemple, si un paquet A té una relació d'accés cap a un paquet B i un paquet C té una relació d'accés o importació cap al paquet A, el paquet C podrà importar o accedir als elements propis del paquet A, però no als elements del paquet B als quals el paquet A hagi accedit.
Propietats d'una importació:
| Nom | Nom de la importació |
| Proveïdor | Element o conjunt d'elements que proporciona uns elements dels quals depèn el paquet o conjunt de paquets de l'altra banda de la relació d'accés. En algunes relacions d'accés en el context d'un disseny de classes orientat a objectes (OO), la intenció és que el paquet més abstracte tingui aquest rol. |
| Visibilitat | Especifica la visibilitat dels elements importats, és a dir, si els elements importats seran visibles per als paquets que, al seu torn, importin elements d'aquest paquet. Quan parlem d'un accés la visibilitat sempre serà privada. |
| Documentació | Descriu la importació. |
| Client | Element o conjunt d'elements que importa membres del proveïdor |

### Combinació

Una combinació (merge) de paquets és una relació dirigida entre dos paquets que indica que es vol combinar els continguts dels dos paquets. És molt semblant a la generalització en el sentit que l'element font afegeix conceptualment les característiques de l'element objectiu a les seves pròpies característiques, de manera que l'element resultant combina les característiques d'ambdós.
Aquest mecanisme s'hauria d'utilitzar quan els elements definits a paquets diferents tenen el mateix nom i pretenen representar el mateix concepte. Sovint s'utilitza aquesta relació per obtenir diferents definicions d'un concepte donat a partir d'una definició base. El concepte base es va estenent a partir de diversos increments, cada un definit en un paquet diferent. D'aquesta manera, podem obtenir una definició particular per a un objectiu concret simplement seleccionant quins increments combinarem.
Propietats d'una combinació:
| Nom | Nom de la combinació |
| Proveïdor | Element o conjunt d'elements que proporciona uns elements dels quals depèn el paquet o conjunt de paquets de l'altra banda de la relació de combinació. En algunes relacions d'importació en el context d'un disseny de classes orientat a objectes (OO), la intenció és que el paquet més abstracte tingui aquest rol. |
| Documentació | Descriu la combinació. |
| Client | Element o conjunt d'elements que importa membres del proveïdor |

### Realització

La realització és una relació d'abstracció especialitzada entre dos conjunts d'elements model, un que representa una especificació (proveïdor) i un altre que representa una implementació del primer (client). La realització es pot utilitzar per modelar gradualment optimitzacions, transformacions, patrons, síntesis de models, etc.
Propietats d'una realització:
| Nom | Nom de la realització |
| Proveïdor | Element o conjunt d'elements que proporciona uns elements dels quals depèn el paquet o conjunt de paquets de l'altra banda de la relació de realització. En algunes relacions d'importació en el context d'un disseny de classes orientat a objectes (OO), la intenció és que el paquet més abstracte tingui aquest rol. |
| Documentació | Descriu la realització. |
| Client | Element o conjunt d'elements que importa membres del proveïdor |
| Esquematització | Composició d'una expressió que defineix la relació d'abstracció entre el proveïdor i el client. En alguns casos, com ara la derivació, és generalment formal i unidireccional, però en d'altres sol ser informal i bidireccional. L'expressió d'esquematització (mapping) és opcional i es podria ometre si la relació concreta entre els dos elements no està especificada. |

### Restricció

Una condició o restricció té com a objectiu declarar alguna de les semàntiques d'un element.
Propietats d'una restricció:
| Nom | Nom de la restricció |
| Expressió | La condició que, en ser avaluada, ha de ser certa per tal que la restricció es compleixi. |
| Documentació | Descriu la restricció. |

### Comentari

Un comentari permet afegir diverses observacions als elements. No té cap importància semàntica, però pot contenir informació útil per al modelador.
Propietats d'un comentari:
| Nom | Nom del comentari |
| Documentació | Especifica una cadena de caràcters (string) que conté el comentari. |

## Exemple

Posem per exemple una aplicació per tal de gestionar les matrícules i els seminaris impartits per una universitat, on els actors serien els estudiants, els professors que imparteixen els seminaris, i els administradors financers que tramiten les inscripcions i els pagaments. Tot i que el diagrama de paquets no és necessari, ja que només es tracta d'un esquema conceptual, simplifica molt el sistema, dividit en paquets que actuen com subsistemes. Es pot dividir el sistema de la universitat en 3 paquets: un per a la gestió financera, un per a gestionar les inscripcions dels alumnes, i un altre per a la gestió dels seminaris que s'imparteixen. Alhora, el paquet de la gestió financera es pot dividir en 2 subpaquets: un referent a les matrícules íntegres, i un altre per a gestionar el sistema de beques.
D'aquesta manera, s'ha pogut crear un diagrama molt senzill, simplificat mitjançant paquets que es poden implementar per separat, per tal de tractar el problema en parts més senzilles, i on cada actor només està connectat amb la secció del sistema amb la qual interactua. La incorporació de subpaquets dins de paquets més generals fa que es puguin crear molts nivells d'encapsulament, fent possible així la simplificació de qualsevol sistema.

## Enllaços externs

* Package Diagrams
* UML Model
* UML Packages and Subsystems Arxivat 2014-10-16 a Wayback Machine.