O que é composição sobre herança?
A composição sobre herança é uma metodologia de programação usada em linguagens de programação orientadas a objetos para ajudar a estabelecer relacionamentos mais dinâmicos e mutáveis entre objetos em um aplicativo. O formato básico para composição sobre herança é a inclusão de uma instância de um objeto dentro de outro objeto. Isso é distintamente diferente do método de herança orientado a objetos, mas pode servir ao mesmo propósito em muitos modelos. As vantagens da composição sobre a herança incluem bordas bem definidas entre os objetos compostos e os objetos do wrapper, a capacidade de alterar a implementação de um objeto sem afetar toda uma hierarquia de herança e uma estrutura menos restritiva para o design inicial do programa. Algumas das complicações, no entanto, podem incluir dificuldade na serialização e estruturas excessivamente complexas em programas grandes e estabelecidos.
Na programação orientada a objetos, uma das características que é importante estabelecer durante o design é como os diferentes objetos se relacionam. A herança é um mecanismo central na programação orientada a objetos e permite que um objeto herde todos os dados e métodos de seu pai, que podem ser adicionados, modificados ou ampliados com sua própria implementação. Um exemplo de design baseado em herança pode ser com um programa que possui uma classe principal que define um carro e modela alguns atributos genéricos de todos os carros. A classe para cada marca individual de carro é então criada como descendente da classe principal, mas define informações específicas, como tamanho do motor, capacidade de combustível ou outras informações específicas para essa marca específica de carro.
A composição é expressa pela inclusão de instâncias de objetos em outros objetos. Se houver uma classe principal que define um carro genérico, em vez de criar subclasses para marcas de carro específicas, a classe principal poderá conter instâncias de outros objetos que definem o carro mais especificamente. Isso pode significar que a classe principal do carro pode conter um objeto para o tipo de motor e outro para a capacidade de combustível, que seria definido quando a classe for usada para criar uma instância de uma marca específica de carro.
Com a composição sobre a herança, os objetos que estão contidos na classe principal não estão diretamente relacionados à classe principal, dando aos desenvolvedores a liberdade de alterar como os objetos individuais funcionam. Um problema que a composição sobre herança pode ajudar a evitar é uma situação em que uma árvore de herança pode ser excessivamente profunda, o que significa que qualquer modificação em uma classe na árvore pode exigir alterações no comprimento da árvore. Nem todas as linguagens orientadas a objetos têm suporte para várias heranças, e a composição sobre herança é um método que pode ser usado para solucionar essa restrição.