Composite Structure Diagram
# Composite Structure Diagram

I Composite structure diagram ("diagrammi di struttura composta") sono un nuovo tipo di diagramma introdotto nella versione 2.0 del linguaggio di modellazione object-oriented UML. Consentono la rappresentazione della struttura interna di classi e altri componenti software. Possono inoltre essere usati per rappresentare design pattern attraverso la simbologia grafica delle collaborazioni.

## Composizione

UML 2.0 introduce un nuovo stile per rappresentare la composizione, ovvero relazioni parte-tutto fra classi. Il seguente diagramma delle classi UML mostra la struttura di due diversi tipi di impianti sonori usando la notazione standard per la composizione (rappresentata graficamente dal rombo pieno).

Il diagramma indica che un sistema hi-fi standard è composto da un amplificatore e due altoparlanti, mentre un sistema home theater è composto da un amplificatore e sei altoparlanti (fra cui un subwoofer). Il diagramma indica anche che gli altoparlanti sono controllati attraverso le uscite dell'amplificatore.

Di per sé, il diagramma non include alcuni vincoli fondamentali. Il seguente diagramma degli oggetti mostra una combinazione di oggetti completamente consistente con il modello proposto, in cui però i collegamenti fra altoparlanti e amplificatori sono fatti in modo evidentemente scorretto:

Quest'ultimo diagramma contraddice l'ovvia regola che gli altoparlanti di un certo sistema hi-fi sono collegati all'amplificatore di quello stesso sistema hi-fi, e non di un altro. Nel caso specifico, questa regola potrebbe essere aggiunta, a completamento del modello, nella forma di un vincolo OCL:

    context SistemaHifi
    inv amplificatore.altoparlanti = casse

Tuttavia, a fronte di strutture composte complesse, i corrispondenti vincoli OCL tenderebbero a diventare sempre più numerosi e intricati. UML 2.0 consente di rappresentare questi vincoli graficamente come segue:

Nel diagramma, gli elementi che si trovano all'interno della classe SistemaHifi sono detti parti (da intendersi nel senso di "parte in una recita", e non nel senso di "pezzo"). Sono caratterizzati da un nome (opzionale) e, dopo i due punti, il nome della classe i cui oggetti possono ricoprire quel ruolo. Le parti possono essere legate da linee dette connettori. Affinché un connettore possa connettere due parti, dovrebbe esistere una associazione fra le due classi corrispondenti; questa associazione viene indicata dopo i due punti (nel caso specifico, i connettori sono lasciati anonimi, e solo il nome dell'associazione è mostrato).

Le parti di una classe possono essere rappresentate come porte (ed essere poste graficamente sul bordo del rettangolo principale) nel caso in cui si voglia consentire che siano raggiunte da connettori provenienti dall'esterno. In questo senso, le parti dette porte rappresentano punti di interazione distinti dell'oggetto composto. Nel caso specifico, le uscite sono parti di un amplificatore ma rappresentano anche il suo punto di interazione con gli altoparlanti.

