Relazioni di generalizzazione

Nel modellamento UML, una relazione di generalizzazione è una relazione in cui un elemento del modello (il secondario) dipende da un altro elemento del modello (il principale). Le relazioni di generalizzazione vengono utilizzate nei diagrammi di classe, componente, distribuzione e casi d'uso per indicare che il secondario riceve tutti gli attributi, le relazioni e le operazioni definite nel principale.

Per essere compatibili con la semantica UML, gli elementi di modello in una relazione di generalizzazione devono essere dello stesso tipo. Ad esempio, una relazione di generalizzazione può essere utilizzata tra actor o casi d'uso; tuttavia, non può essere utilizzata tra un actor e un caso d'uso.

È possibile utilizzare le relazioni di generalizzazione per acquisire attributi, operazioni e relazioni in un elemento del modello principale e quindi riutilizzarli in uno o più elementi di modello secondari. Dal momento che gli elementi secondari nelle generalizzazioni ereditano attributi, operazioni e relazioni del principale, è sufficiente definire per il secondario solo gli attributi, le operazioni o le relazioni distinte dal principale.

L'elemento principale può disporre di uno o più elementi secondari e viceversa. Lo scenario più comune prevede la presenza di un solo elemento del modello principale e di più elementi secondari.

Le relazioni di generalizzazione non hanno nomi.

Come viene illustrato nelle seguenti figure, una relazione di generalizzazione viene visualizzata nell'editor del diagramma come una linea piena con una freccia vuota rivolta dall'elemento del modello secondario all'elemento del modello principale.

Singolo elemento principale con singolo elemento secondario

Singolo elemento principale con più elementi secondari

Una forma della classe contenente il nome Parent e un'altra contenente il nome Child. Viene visualizzata una linea piena con una freccia vuota che va dalla classe secondaria a quella principale. Due forme della classe con i nomi Child1 e Child2, ognuna delle quali collegata alla forma della classe denominata Parent. Ogni connettore è una linea piena con una freccia vuota che va dalla classe secondaria a quella principale.

Esempio

Nella seguente figura viene descritta un'applicazione e-commerce per un sito Web che vende merce di vario tipo. L'applicazione dispone di una classe denominata InventoryItem che è la classe principale (nota anche come superclasse). Tale classe contiene gli attributi, ad esempio Price, e le operazioni, ad esempio setPrice, utilizzati da tutta la merce.

Dopo avere definito la classe principale, viene creata una classe secondaria (nota anche come sottoclasse) per ogni tipo di merce, tra cui libri e DVD. La classe dei libri utilizza gli attributi e le operazioni nella classe di inventario e quindi aggiunge attributi tra cui Author e operazioni tra cui setAuthor. Anche la classe dei DVD utilizza gli attributi e le operazioni nella classe di inventario e quindi aggiunge attributi tra cui Manufacturer e operazioni tra cui setManufacturer, differenti rispetto a quelli della classe dei libri.

Questa è un'illustrazione dell'esempio descritta nel paragrafo precedente.
Attività correlate
Specifica delle relazioni nei diagrammi UML

Feedback