Em diagramas de classe, uma generalização abstrata é um relacionamento de dependência no qual existe um mapeamento entre o pai e o filho.
Uma generalização abstrata é quase como o relacionamento de generalização ou herança entre classes. Com a generalização abstrata, uma classe-pai força a classe-filha a herdar determinada funcionalidade para criar uma interface.
Por exemplo, quando você visualiza uma classe C/C++ e uma generalização abstrata, uma classe-pai pode tornar-se uma interface ou um gabarito de design. A classe Vehicle é uma classe-pai que utiliza uma generalização abstrata. A classe Vehicle torna-se um gabarito de design ou interface para todos os seus filhos, forçando-os para utilizar determinadas operações. A classe-filha Boat herda várias operações da classe Vehicle. A classe Boat não pode ser implementada sem utilizar essas operações. Portanto, a classe Vehicle age como uma interface de design para todos os seus filhos.
Em diagramas de classe de visualização UML, uma generalização abstrata é mostrada pela diferenciação do título da classe de outras classes. Uma classe-pai que utiliza uma generalização abstrata possui um título de classe em letras em itálico. Além disso, todas as operações herdadas por seus filhos (operações virtuais puras) também aparecem em itálico.
A figura a seguir ilustra as diferenças entre um relacionamento de generalização normal e um relacionamento de generalização abstrata.
Generalização normal C/C++ | Generalização abstrata C/C++ |