# Diagrama d'estructura composta

Un diagrama d'estructura composta és un diagrama que mostra l'estructura interna d'una classe, així com les col·laboracions que permet. A més, permet descriure els objectes i rols que conformen el comportament de la classe que els conté. És semblant a un diagrama de classes, però mostra parts individuals en lloc de classes senceres.
Aquest diagrama pot incloure parts internes, ports a través dels quals les parts interactuen entre elles o bé les instàncies de la classe interactuen amb les parts i els elements exteriors, i connectors entre parts i ports. Un port també pot especificar els serveis que una classe requereix del seu entorn, així com els que proporciona. Una estructura composta és un conjunt d'elements interconnectats que col·laboren en temps d'execució per aconseguir algun objectiu.

## Elements principals d'un diagrama d'estructura composta
### Classe

Una classe descriu un conjunt d'objectes que comparteixen les mateixes especificacions de característiques, restriccions i semàntica. Una classe és un tipus de classificador les característiques del qual són mètodes i atributs.
Propietats d'una classe:
| Nom | Nom de la classe |
| Element pare | Element que conté la classe |
| Documentació | Descriu la classe. |
| Abstracció | Si és abstracta, la classe no té una declaració completa i, en general, no pot ser instanciada. La intenció de fer una classe abstracta és que pugui ser utilitzada per altres classes. |
| Fulla | Indica si és possible especialitzar més la classe. Si el valor és cert, la classe no es pot especialitzar més. |
| Arrel | Indica si la classe té o no antecessors. Si el valor és cert, la classe no té cap antecessor (element pare). |
| Activa | Determina si un objecte especificat per la classe és actiu o no. Si el valor és cert, la classe es considera activa. Per contra, si el valor és fals la classe es considera passiva. |
| Atributs | Propietats que són atributs directes (no són heretats ni importats) de la classe. |
| Mètodes | Accions i funcions pròpies de la classe. |

### Port

Un port és una propietat d'una classe que especifica un punt d'interacció persona-ordinador entre una classe i el seu entorn o bé entre la classe i les seves parts internes. Els ports es connecten a les propietats de la classe mitjançant connectors a través dels quals es poden fer peticions per invocar els mètodes de la classe. Un port pot especificar els serveis que una classe ofereix al seu entorn, així com els que el requereix.
Propietats d'un port:
| Nom | Nom del port |
| Documentació | Descriu el port. |
| Fulla | Indica si és possible especialitzar més el port. Si el valor és cert, el port no es pot especialitzar més. |
| Atributs | Es refereix a totes les propietats que són atributs directes (no són heretats ni importats) de la classe. |
| Tipus | El tipus de dades al qual pertany aquest port. |
| Estàtic | Especifica si s'està instanciant una instància de la classe (fals) o la classe en si (cert). |
| Servei | Si és cert, indica que aquest port s'utilitza per proporcionar la funcionalitat pública d'una classe. Si és fals, en canvi, indica que el port s'utilitza per implementar la classe però no forma part de la seva funcionalitat essencial (vist des de fora). |

### Connector

Especifica un enllaç que possibilita la comunicació entre dues o més instàncies. Així, aquestes poden interactuar en temps d'execució.
Propietats d'un connector:
| Nom | Nom del connector |
| Documentació | Descriu el connector. |
| Fulla | Indica si és possible especialitzar més el connector. Si el valor és cert, el connector no es pot especialitzar més. |
| Origen | La font del connector |
| Destí | El destí del connector |

### Part

Una part representa un paper representat en temps d'execució per una instància o un conjunt d'instàncies d'una classe. Una part pot anomenar el paper, una superclasse abstracta o bé una classe concreta.
Propietats d'una part:
| Nom | Nom de la part |
| Documentació | Descriu la part. |
| Abstracció | Si és abstracta, la part no té una declaració completa i, en general, no pot ser instanciada. La intenció de fer una part abstracta és que pugui ser utilitzada per altres classes. |
| Classificador | Referencia la classe que conté la part. |
| Valor inicial | Valor inicial de l'atribut quan s'inicia la seva classe |
| Tipus | El tipus de dades que conté aquesta part |
| Àmbit | Determina si la part és una instància o una classe. |

### 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. |

### Dependència

Una dependència és una relació que significa que un element o un conjunt d'elements 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 |

### 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 quelcom que necessita l'element o conjunt d'elements 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 l'element 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. |

## Enllaços externs

* Composite Structure Diagrams (anglès)