Generalizações Abstratas

Nos diagramas de classes, uma generalização abstrata é um relacionamento de dependência em que existe um mapeamento entre o pai e o filho.

Uma generalização abstrata é muito parecida com 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.

Nota: No C/C++, uma generalização abstrata é obtida por meras operações virtuais. Uma classe-pai que contém uma mera operação virtual é chamada de classe-base abstrata. É possível que a classe-base abstrata nunca seja instanciada. Uma classe-filha deve substituir a mera operação virtual em sua declaração; caso contrário, ela não pode ser instanciada. A classe-base abstrata força uma interface de design em uma classe-filha.

Por exemplo, quando você visualiza uma classe e uma generalização abstrata do C/C++, uma classe-pai pode se tornar uma interface ou um modelo de design. A classe Vehicle é uma classe-pai que utiliza uma generalização abstrata. A classe Vehicle se torna um modelo ou uma interface de design para todas as suas filhas forçando-as a utilizar determinadas operações. A classe-filha Boat herda diversas 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 todas as suas filhas.

Nos diagramas de classes da visualização UML, uma generalização abstrata é mostrada diferenciando o título da classe das outras classes. Uma classe-pai que utiliza uma generalização abstrata tem um título de classe em letras em itálico. Da mesma forma, todas as operações herdadas por suas filhas (puras operações virtuais) 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 do C/C++ Generalização abstrata do C/C++
É exibida uma generalização regular do C/C++. É exibida uma generalização abstrata do C/C++.

Conceitos relacionados
Relacionamentos de Associação
Relacionamentos de Dependência
Relacionamentos de Generalização
Relacionamentos de Manifestação
Relacionamentos de Associação de Elementos Owned
Relacionamentos de Permissão

Feedback