A herança na programação de POO é uma maneira de organizar objetos em uma hierarquia do geral para o específico. É a engenhoca usada para estender uma classe para outra classe, preservando uma execução análoga.
Na maioria das linguagens orientadas a objetos baseadas em classe, um objeto criado por herança, chamado objeto filho, obtém todas as propriedades e comportamentos do objeto pai.
Portanto, é uma qualidade que representa o relacionamento entre diferentes classes. A herança permite que uma classe tenha o mesmo comportamento que outra classe e estenda ou adapte esse comportamento para fornecer uma ação especial para necessidades específicas.
A herança pode ajudar a representar objetos com algumas diferenças e semelhanças na maneira como eles funcionam. Você pode colocar todos os objetos de funcionalidade em comum em uma classe base e, em seguida, definir uma ou mais subclasses com sua própria funcionalidade personalizada.
Características da herança
A herança é um dos principais recursos da programação orientada a objetos, que serve para definir uma nova classe a partir das classes existentes.
Ou seja, novas classes podem ser derivadas de classes base existentes, adicionando novos recursos. Não precisa ser escrito do zero. Portanto, a herança fornece uma maneira de reutilizar facilmente o código existente.
Se você já possui uma classe que faz quase tudo o que deseja, pode criar uma subclasse que substitua parcialmente parte de seu comportamento ou talvez adicione uma nova funcionalidade.
Uma classe derivada herda todos os métodos da classe base, exceto o seguinte:
– Construtores, destruidores e copiadores da classe base.
– Operadores de classe base sobrecarregados.
– Funções amigáveis da classe base.
Hierarquia
Como uma árvore genealógica, a herança serve para formar uma hierarquia de classes. Importante, os atributos determinados para uma classe base estarão automaticamente presentes na classe derivada. Além disso, os métodos para a classe base funcionarão para derivativos.
Diz-se que uma classe é uma subclasse da classe da qual herda. Por outro lado, esta classe será sua super classe. A classe mais genérica pode ser chamada de classe base, estando na base da hierarquia.
Polimorfismo
A herança é muito popular em algumas linguagens com tipos estáticos, porque permite ao programador ignorar algumas das restrições de tipo estático.
Um objeto que herda de outro objeto é considerado um subtipo desse objeto. Um exemplo pode ser os objetos “instrutor” e “aluno”, cada um dos quais herdado de “pessoa”.
Se instrutor e aluno são do mesmo tipo de pessoa, você pode escrever uma função que aceite o tipo de pessoa como parâmetro e que funcione nos objetos de instrutor e aluno, porque ambos são herdeiros da pessoa.
Tipos de herança
Herança única
Quando uma classe derivada herda as propriedades e o comportamento de uma única classe base. Ou seja, uma classe se estende para outra única classe.
Herança multinível
Refere-se ao gadget no qual você pode herdar de uma classe derivada, tornando essa classe derivada a classe base para uma nova classe. Ou seja, resulta quando uma classe derivada é criada a partir de outra classe derivada.
Herança hierárquica
Nesta herança, muitas subclasses herdam de uma única classe. Ou seja, acontece quando uma única classe base é herdada por mais de uma classe derivada.
Herança híbrida
É a herança resultante quando qualquer uma das três heranças anteriores é combinada (única, hierárquica e multinível).
Herança múltipla
Corresponde à figura da herança quando uma classe herda de mais de uma superclasse. A desvantagem desse tipo de herança é que a classe derivada terá que processar a dependência que possui com duas classes base.
Por outro lado, esse tipo de herança permite que os programadores erigam classes que combinam os aspectos de várias classes e suas hierarquias correspondentes.
Tipos de herança de uma classe base
Herança pública
Quando uma classe é derivada de uma classe base pública, os membros públicos da classe base tornam-se membros públicos da classe derivada e os membros protegidos da classe base tornam-se membros protegidos da classe derivada.
Os membros privados de uma superclasse nunca serão diretamente acessíveis a partir de uma classe derivada, mas serão acessíveis por chamadas a membros públicos e protegidos da classe base.
Herança protegida
Quando você cria uma classe que herda de uma superclasse protegida, os membros públicos e protegidos dessa superclasse se tornarão membros protegidos da classe derivada.
Herança privada
Ao criar uma subclasse de uma superclasse privada, os membros públicos e protegidos dessa superclasse se tornarão membros privados da subclasse.
Exemplos
Exemplo em Python
Para mostrar como o princípio da herança funciona, os robôs ou uma classe melhor de robôs serão usados na linguagem de programação Python. Para isso, será especificada uma classe chamada RobotMédico ( PhysicianRobot ), derivada da superclasse Robot.
Se você olhar o código da classe RobotMédico, verá que nenhum atributo ou método foi definido nessa classe.
Como a classe RobotMedical é uma subclasse de Robot, nesse caso, ela herda os métodos __init__ e say_hi. Herdar esses métodos significa que eles podem ser usados como se tivessem sido definidos na classe RobotMedical.
Quando uma instância do RobotMédico é criada, a função __init__ também cria um atributo de nome. O método say_hi pode ser aplicado ao objeto RobotMédico “y”, como pode ser visto no resultado do código anterior.
Exemplo em C ++
Uma classe pode herdar de mais de uma classe, o que significa que pode herdar dados e funções de várias superclasses. Para definir uma classe derivada, uma lista de derivação de classe é usada para especificar as classes base.
Uma lista de desvio de classe C ++ nomeia uma ou mais classes base e tem o seguinte formato: class deriv-class : access-specifier classe-base , em que o especificador de acesso é público , protegido ou privado e a classe-base é o nome de uma classe definida anteriormente. Se o especificador de acesso não for usado , o privado será usado por padrão .
A superclasse “Formulário” e sua classe derivada “Retângulo” podem ser consideradas da seguinte maneira:
Quando o código acima é compilado e executado, ocorre a seguinte saída: “Área total: 35”.
Referências
- Dave Braunschweig (2020). Herança e polimorfismo. Comunidade Rebus. Retirado de: press.rebus.community.
- Curso de Python (2020). Herança. Retirado de: python-course.eu.
- Mentor de Dados (2020). R Herança. Retirado de: datamentor.io.
- Ponto de tutoriais (2020). Herança em C ++. Retirado de: tutorialspoint.com.
- Informações da rede (2020). Diferentes tipos de herança. Retirado de: net-informations.com.