Generalizzazioni astratte

Nei diagrammi di classe, una generalizzazione astratta è una relazione di dipendenza in cui esiste una mappatura tra l'elemento principale e quello secondario.

Una generalizzazione astratta è simile alla relazione di eredità o di generalizzazione tra classi. Con tale generalizzazione, una classe principale forza la classe secondaria a ereditare una determinata funzionalità per creare un'interfaccia.

Nota: in C/C++, una generalizzazione astratta si ottiene tramite pure operazioni virtuali. Una classe principale che contiene una pura operazione virtuale è denominata classe di base astratta. Non è possibile creare istanze di tale classe. Una classe secondaria deve sostituire la pura operazione virtuale nella rispettiva dichiarazione; altrimenti non è possibile creare istanze da tale classe. La classe di base astratta applica un'interfaccia di progettazione su una classe secondaria.

Ad esempio, quando si visualizza una generalizzazione astratta e una classe C/C++, una classe principale può diventare un'interfaccia o un modello di progettazione. La classe Vehicle è una classe principale che usa una generalizzazione astratta. Tale classe diventa un'interfaccia o un modello di progettazione per tutti i relativi elementi secondari forzandoli a utilizzare determinate operazioni. La classe secondaria Boat eredita diverse operazioni dalla classe Vehicle. La classe Boat non può essere implementata senza tali operazioni. Di conseguenza, la classe Vehicle opera come interfaccia di progettazione per tutti i relativi elementi secondari.

Nei diagrammi di classe di visualizzazione UML, una generalizzazione astratta viene mostrata differenziando il titolo della classe da altre classi. Una classe principale che utilizza una generalizzazione astratta ha il titolo in corsivo. Anche tutte le operazioni ereditate dalle classi secondarie (pure operazioni virtuali) vengono visualizzate in corsivo.

Nella seguente figura vengono illustrate le differenze tra una relazione di generalizzazione normale e una astratta.

Generalizzazione normale C/C++ Generalizzazione astratta C/C++
Viene visualizzata una generalizzazione C/C++ normale. Viene visualizzata una generalizzazione C/C++ astratta.

Concetti correlati
Relazioni di associazione
Relazioni di dipendenza
Relazioni di generalizzazione
Relazioni di manifestazione
Relazioni di associazione di elementi di proprietà
Relazioni di autorizzazione
Informazioni aggiuntive per riferimenti non definiti

Feedback