Dois princípios de programação orientados para objectos em baixo (leia sobre abstracção aqui e encapsulamento aqui), faltam ainda dois! Hoje vamos dar uma vista de olhos à herança. Em comparação com a abstracção e o encapsulamento, a herança é um pouco mais directa (na minha opinião pessoal).
Como com os outros princípios do OOP, a herança destina-se a optimizar o trabalho dos programadores. O papel que a herança desempenha nesta optimização é permitir aos engenheiros de software criar hierarquias de classes, onde as classes e os objectos herdam propriedades e comportamentos da sua classe mãe (ou super). Uma classe que herda de uma classe pai (ou super) é chamada subclasse ou classe filha, e os objectos que recebem propriedades e comportamentos de um pai através da herança são referidos como objectos filhos.
Como é que isto é útil? Uma grande parte da utilidade da herança é a reusabilidade. Vou usar Noé e a arca como exemplo. Para aqueles que não estão familiarizados com a história, a Terra está ameaçada por uma inundação mundial e Noé constrói uma arca a fim de armazenar dois de cada animal de criação na Terra, para que sobrevivam à tempestade. Digamos que Noé queria usar um programa de software para o ajudar a manter um registo de todos os animais na arca e das suas várias necessidades.
Criar uma classe única para cada animal seria rapidamente muito repetitivo porque existem algumas propriedades e comportamentos que se aplicam a cada animal, desde um rato a um elefante. As funções partilhadas podem incluir alimentação( ), hidrato( ), cleanEnclosure( ). Em vez de criarmos estes atributos partilhados repetidamente para cada animal, poderíamos, em vez disso, criar uma classe Animal parental! Esta classe parental conteria as propriedades e comportamentos universais a todos os animais e poupar-nos-ia de ter de criar essas funções partilhadas ad infinitum.