Diferença entre composição e herança

Na programação, o código reutilizável é o uso de software existente para construir um novo software usando os princípios da reutilização. A reutilização de código é considerada uma funcionalidade produtiva fundamental em negócios intensivos em tecnologia da informação. É promovido em sistemas orientados a objetos estabelecendo relacionamentos entre classes. Existem duas maneiras fundamentais de estabelecer esses relacionamentos na orientação a objetos programação - Herança e composição. Implementando herança é uma maneira de relacionar classes, mas OOP fornece um novo tipo de relação entre classes chamadas de composição. Ao estabelecer um relacionamento entre as classes novas e as existentes, uma nova classe pode herdar ou incorporar o código de uma ou mais classes existentes.

Em OOP, herança é a metodologia pela qual um objeto adquire as características de um ou mais outros objetos. É uma das ferramentas mais poderosas na implementação de reutilização de código em OOP. Ao usar herança, uma nova classe pode ser criada estabelecendo relacionamentos pai-filho com classes existentes. Objeto composição é uma alternativa à herança de classe. Usar um objeto dentro de outro objeto é conhecido como composição. Em muitas ocasiões, você desejaria usar um objeto como um campo dentro de outra classe porque é fácil criar classes complexas usando classes previamente escritas e bem projetadas como componentes. Isso é chamado de composição. Bem, tanto a herança quanto a composição fornecem funcionalidade equivalente em muitos casos, a composição de objetos é um modelo de reutilização melhor do que a herança de classes. Este artigo compara as duas abordagens.





O que é herança?

Herança é uma das ferramentas mais poderosas na implementação da capacidade de reutilização de código em programação orientada a objetos. Refere-se à funcionalidade pela qual um objeto adquire as características de um ou mais outros objetos. Herança em C ++ significa que você pode criar classes que derivam seus atributos de classes existentes. Isso significa que você especializa uma classe para criar um relacionamento entre as classes que resulta em um Forte acoplamento entre as classes base e derivadas. A implementação da herança promove a reutilização do código porque novas classes são criadas a partir das classes existentes. A herança de classe também torna mais fácil modificar a implementação que está sendo reutilizada. Mas a herança de classe também tem algumas desvantagens. Primeiro, como a herança é definida em tempo de compilação, você não pode alterar as implementações herdadas de classes pai em tempo de execução.



O que é composição?

OOP fornece ainda outro relacionamento entre as classes chamado composição, que também é conhecido como um relacionamento tem-um. Se as características de um objeto precisam ser parte de outro objeto, o relacionamento exige composição. Para compor uma classe a partir de classes existentes, um objeto de cada classe deve ser declarado como membro da nova classe. Em palavras simples, usar um objeto dentro de outro objeto é conhecido como composição. Muitas vezes, você pode querer usar um objeto como um campo dentro de outra classe. Você usa um objeto dentro de uma classe de composição. Ao contrário da herança de classe, a composição do objeto é definida dinamicamente em tempo de execução por meio de objetos que adquirem referências a outros objetos. Além disso, a composição fornece uma maneira melhor de usar um objeto sem comprometer os detalhes internos do objeto, que é onde a composição é útil.

Diferença entre composição e herança

Aproximação

Embora tanto a herança quanto a composição promovam a reutilização do código em sistema orientado a objetos, estabelecendo relacionamentos entre classes e forneçam funcionalidade equivalente de muitas maneiras, eles usam abordagens diferentes. Com a herança, você pode criar classes que derivam seus atributos de classes existentes, portanto, ao usar a herança para criar uma classe, você pode expandir em uma classe existente. Pelo contrário, usar um objeto dentro de outro objeto é conhecido como composição. A composição de objetos é uma alternativa à herança de classes. Se as características de um objeto precisam ser parte de outro objeto, o relacionamento exige composição.

Relação

Na herança, você especializa uma classe para criar um relacionamento “é um” entre as classes que resulta em um forte acoplamento entre as classes base e derivadas. Ele permite que uma hierarquia de classes seja projetada e a hierarquia comece com a classe mais geral e vá para classes mais específicas. Ao implementar a herança, as funções de membro de uma classe tornam-se propriedades de outra classe sem codificá-las explicitamente dentro da classe. Na composição, você usa um objeto dentro de uma classe e todas as solicitações ao objeto são encaminhadas para o objeto. Os detalhes internos não são expostos uns aos outros na composição, então é uma relação “tem-a”.



Implementação

A herança de classe é definida em tempo de compilação, portanto, você não pode alterar as implementações herdadas de classes pai em tempo de execução. Como a herança expõe uma subclasse a detalhes da implementação de seu pai, muitas vezes quebra o encapsulamento. Quaisquer mudanças na classe pai refletirão na subclasse, o que pode criar problemas quando você tenta reutilizar uma subclasse. A composição de objetos, ao contrário, é definida dinamicamente em tempo de execução por meio de objetos que adquirem referências a outros objetos. E como os objetos são acessados ​​apenas por meio de suas interfaces, isso não quebra o encapsulamento. Qualquer objeto pode ser substituído em tempo de execução por outro objeto, desde que tenha o mesmo tipo.

Composição vs. Herança: Gráfico de Comparação

Resumo de composição vs. herança

Em muitas ocasiões, você desejaria usar um objeto como um campo dentro de outra classe porque classes complexas são mais fáceis de criar usando classes previamente escritas e bem projetadas. É aqui que você usa a composição. A herança fornece uma maneira de reutilizar o código ao estender uma classe com o mínimo de esforço. É por isso que a herança é uma ferramenta valiosa no estabelecimento de relacionamentos entre classes. Em geral, é preferível usar composição, pois fornece uma maneira de usar um objeto sem comprometer os detalhes internos do objeto que é onde a composição é útil. A herança tem problemas, mas, como a herança, a composição do objeto levanta questões de desempenho semelhantes com relação à criação e destruição do objeto.

Publicações Populares

Diferença entre Apple iPhone 4G e HTC Evo

Apple iPhone 4G vs HTC Evo A velocidade é um dos fatores mais importantes hoje em dia quando se trata de telefones celulares que oferecem recursos multimídia. O iPhone 4

Diferença entre IQ e EQ

IQ vs EQ O conceito de IQ é medido como uma proporção. Ele mede os poderes matemáticos e lógicos de um indivíduo. No entanto, o EQ mede o quociente emocional

Diferença entre óculos de sol Oakley Jupiter e Jupiter LX

Oakley Jupiter vs Jupiter LX Sunglasses O Jupiter é uma linha muito popular de óculos de sol da Oakley. Seu submodelo, o Jupiter LX, levou as pessoas a perguntarem

O bom objetor de consciência Lew Ayres

Para a estrela de Hollywood Lew Ayres, seguir princípios pacifistas durante a guerra provou ser o seu próprio tipo de luta

Incursão Cambojana de Nixon

A operação militar 'mais bem-sucedida' da guerra que foi um desastre em casa.

Diferença entre HD e HDV

HD vs HDV HD é a abreviatura de 'Alta Definição'. Geralmente se refere à resolução de um sistema de vídeo. Qualquer resolução consideravelmente superior ao padrão