Generalização e Herança
A generalização e a herança são abstrações poderosas para o compartilhamento de semelhanças entre classes, ao mesmo tempo em que suas diferenças são preservadas. Por exemplo, gostaríamos de poder modelar a seguinte situação: Cada peça de equipamento tem fabricante, peso e preço. As bombas têm, além disso, pressão de sucção e taxa de fluxo. Os tanques também têm volume e pressão. Queremos definir características dos equipamentos.
Generalização é o relacionamento entre uma classe e uma ou mais versões refinadas dela. A classe que estiver em processo de refinamento é chamada de superclasse e cada versão refinada é denominada subclasse. Por exemplo, Equipamento é a superclasse de Bomba e de Tanque. Os atributos e operações comuns a um grupo de subclasses são incluídos na superclasse e compartilhados por todas as subclasses. Diz-se que cada subclasse herda as características de sua superclasse. Como por exemplo, Bomba herda os atributos fabricantes, peso e preço de Equipamento. A generalização às vezes é chamada de relacionamento é-um porque cada instância de uma subclasse é também uma instância da superclasse.
A generalização e a herança são transitivas através de um número arbitrário de níveis. Os termos ancestral e descendentes referem-se à generalização de classes através de múltiplos níveis. Uma instância de uma subclasse é simultaneamente uma instância de todas as suas classes ancestrais. O estado de uma instância inclui um valor para cada atributo de cada classe ancestral. Qualquer operação em qualquer classe ancestral pode ser pode ser aplicada a uma instância. Cada subclasse não só herda todas as características de seus ancestrais como também acrescenta seus próprios atributos específicos e suas próprias operações. Por exemplo, Bomba adiciona o atributo taxa de fluxo, que não é compartilhado por outros tipos de equipamento.
Ex.:
Aula produzida por Leonardo Mendes Simão, Rafael de O. Valle dos Santos e Rafael Sabbagh Armony