Herança vs Composição
Herança e Composição são dois conceitos importantes encontrados em OOP (Programação Orientada a Objetos). Em termos simples, Composição e Herança lidam com o fornecimento de propriedades ou comportamento adicionais a uma classe. Herança é a capacidade de uma classe herdar propriedades e comportamento de uma classe pai, estendendo-a. Por outro lado, Composition é a capacidade de uma classe conter objetos de diferentes classes como dados de membros.
O que é herança?
Como mencionado acima, Herança é a capacidade de uma classe herdar propriedades e comportamento de uma classe pai, estendendo-a. A herança essencialmente fornece a reutilização de código, permitindo estender propriedades e comportamento de uma classe existente por uma classe recém-definida. Se a classe A estender B, a classe B será chamada de classe pai (ou superclasse) e a classe A será chamada de classe filha (ou classe / subclasse derivada). Nesse cenário de exemplo, a classe A herdará todos os atributos e métodos públicos e protegidos da superclasse (B). A subclasse pode opcionalmente substituir (fornecer funcionalidade nova ou estendida aos métodos) o comportamento herdado da classe pai.
A herança representa um relacionamento "is-a" no POO. Isso significa essencialmente que A também é um B. Em outras palavras, B pode ser a classe com uma descrição geral de uma determinada entidade do mundo real, mas A especifica uma certa especialização. Em um problema de programação do mundo real, a classe Person pode ser estendida para criar a classe Employee. Isso é chamado de especialização. Mas você também pode primeiro criar a classe Employee e generalizá-la para uma classe Person (ou seja, generalização). Neste exemplo, o Funcionário terá todas as propriedades e comportamento da Pessoa (ou seja, Funcionário também é uma Pessoa) e pode conter algumas funcionalidades adicionais (portanto, Pessoa não é um Funcionário) também.
O que é composição?
Composição é a capacidade de uma classe conter objetos de diferentes classes como dados de membros. Por exemplo, a classe A pode conter um objeto da classe B como membro. Aqui, todos os métodos públicos (ou funções) definidos em B podem ser executados na classe A. A classe A se torna o contêiner, enquanto a classe B se torna a classe contida. A composição também é conhecida como Recipiente. Neste exemplo, pode-se dizer que a classe A é composta da classe B. Na OOP, Composition representa um relacionamento "has-a". É importante observar que, embora o contêiner tenha acesso para executar todos os métodos públicos da classe contida, ele não pode alterar ou fornecer funcionalidade adicional. Quando se trata de um problema de programação do mundo real, um objeto da classe TextBox pode estar contido na classe Form e, portanto, pode-se dizer que um Form contém um TextBox (ou, alternativamente, um Form é composto de um TextBox).
Qual é a diferença entre Herança e Composição?
Embora Herança e Composição sejam dois conceitos de POO, eles são bem diferentes no que permitem ao programador alcançar. Herança é a capacidade de uma classe herdar propriedades e comportamento de uma classe pai, estendendo-a, enquanto Composition é a capacidade de uma classe de conter objetos de diferentes classes como dados de membros. Se uma classe for estendida, ela herdará todas as propriedades / comportamentos públicos e protegidos e esses comportamentos poderão ser substituídos pela subclasse. Mas se uma classe estiver contida em outra, o contêiner não terá a capacidade de alterar ou adicionar comportamento ao contido. A herança representa um relacionamento "is-a" no OOP, enquanto a Composition representa um relacionamento "has-a".