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.
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++ |
![]() |
![]() |