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 de herdar propriedades e comportamento de uma classe pai, estendendo-a. Por outro lado, Composição é a capacidade de uma classe de conter objetos de diferentes classes como dados de membro.
O que é herança?
Conforme mencionado acima, Herança é a capacidade de uma classe de herdar propriedades e comportamento de uma classe pai, estendendo-a. A herança fornece essencialmente a reutilização de código, permitindo estender as propriedades e o comportamento de uma classe existente por uma classe recém-definida. Se a classe A estende B, então a classe B é chamada de classe pai (ou superclasse) e a classe A é chamada de classe filha (ou classe / subclasse derivada). Neste 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.
Herança representa um relacionamento “é um” em OOP. Isso significa essencialmente que A também é 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 criar primeiro a classe Employee e depois generalizá-la para uma classe Person (isto é, 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 de conter objetos de diferentes classes como dados de membro. Por exemplo, a classe A pode conter um objeto da classe B como membro. Aqui, todos os métodos (ou funções) públicos definidos em B podem ser executados dentro da 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 Containership. Neste exemplo, pode-se dizer que a classe A é composta pela classe B. Em OOP, a composição representa um relacionamento “tem um”. É importante observar que, embora o contêiner tenha acesso para executar todos os métodos públicos da classe contida, ele não é capaz de 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 assim pode-se dizer que um Form contém um TextBox (ou, alternativamente, um Form é composto por um TextBox).
Qual é a diferença entre herança e composição?
Embora Herança e Composição sejam dois conceitos OOP, eles são bastante diferentes no que permitem que o programador alcance. Herança é a capacidade de uma classe herdar propriedades e comportamento de uma classe pai estendendo-a, enquanto Composição é a capacidade de uma classe de conter objetos de classes diferentes como dados de membro. Se uma classe for estendida, ela herda todas as propriedades / comportamentos públicos e protegidos e esses comportamentos podem 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. Herança representa um relacionamento “é um” em OOP, enquanto Composição representa um relacionamento “tem um”.