next up previous contents
Next: Sugestões de desenvolvimento Up: O Modelo de Objetos Previous: Agregação   Sumário


Generalização e Herança

Generalização e herança são abstrações poderosas para compartilhar similaridades entre classes e ao mesmo tempo preservar suas diferenças.

Generalização é o relacionamento entre uma classe e um ou mais versões refinadas (especializadas) desta classe. A classe sendo refinada é chamada de superclasse ou classe base, enquanto que a versão refinada da classe é chamada uma subclasse ou classe derivada. Atributos e operações comuns a um grupo de classes derivadas são colocadas como atributos e operações da classe base, sendo compartilhados por cada classe derivada. Diz-se que cada classe derivada herda as características de sua classe base. Algumas vezes, generalização é chamada de relacionamento is-a (é-um), porque cada instância de uma classe derivada é também uma instância da classe base.

Generalização e herança são transitivas, isto é, podem ser recursivamente aplicadas a um número arbitrário de níveis. Cada classe derivada não apenas herda todas as características de todos seus ancestrais como também pode acrescentar seus atributos e operações específicos.

A Figura [*] mostra a notação diagramática de OMT para representar generalização, um triângulo com o vértice apontado para a classe base. Um discriminador pode estar associado a cada associação do tipo generalização; este é um atributo do tipo enumeração que indica qual a propriedade de um objeto está sendo abstraída pelo relacionamento de generalização. Este discriminador é simplesmente um nome para a base de generalização.

Figura: Representação diagramática de OMT para generalização.





\includegraphics[]{omtgener.eps}


Uma classe derivada pode sobrepor1.2 uma característica de sua classe base definindo uma característica própria com o mesmo nome. A característica local (da classe derivada) irá refinar e substituir a característica da classe base. Uma característica pode ser sobreposta, por exemplo, por questões de refinamento de especificação ou por questões de desempenho.

Entre as características que podem ser sobrepostas estão valores default de atributos e métodos de operação. Uma boa estratégia de desenvolvimento não deve sobrepor uma característica de forma inconsistente com a semântica da classe base.


next up previous contents
Next: Sugestões de desenvolvimento Up: O Modelo de Objetos Previous: Agregação   Sumário
Ivan Luiz Marques Ricarte 2001-06-01