Atenção: esse artigo tem uma palestra complementar. Clique e assista!

Atenção: esse artigo tem um vídeo complementar. Clique e assista!

Do que trata o artigo

Neste artigo serão tratados os principais elementos para que se use herança com a linguagem C#. Veremos quais as providências necessárias quando criamos uma classe para que esta possa ter sua funcionalidade ampliada através da herança permitindo que outras classes derivem seus elementos. Também teremos contato com o uso das interfaces para criarmos um modelo básico de classe que não implemente nada a princípio podendo servir para classes mais complexas mantendo, porém, uma estrutura a ser seguida.

Para que serve

As classes dentro da programação orientada a objetos permitem que se desenvolva soluções mais fáceis de se implementar e entender. Sempre que se desenvolve um programa, as classes servem para separar partes do problema a ser resolvido. Cada uma precisa resolver um único problema por vez. Entretanto, durante o ciclo de vida de um software novas funcionalidades são acrescentadas e o programa precisa resolver um número maior de problemas do que foi originalmente desenvolvido para solucionar. Assim, com o uso de herança é possível estender a funcionalidade de uma classe para que faça mais do que aquilo para a qual foi originalmente projetada.

Em que situação o tema é útil

Você vai precisar da herança quando estiver trabalhando em projetos cujo ciclo de vida seja relativamente longo e esteja em constante aperfeiçoamento. Bons programas costumam evoluir e realizar suas tarefas de uma maneira cada vez melhor e consequentemente agregando valor através do aumento de funcionalidades. Você não irá achar produtivo ficar reescrevendo todo o seu código sempre que precisar adicionar alguma funcionalidade nova, então, a herança poderá ajudar a resolver os seus problemas desde que certos cuidados sejam tomados como veremos neste artigo.

Resumo do DevMan

Os programas normalmente surgem para resolver um problema bem específico. O desenvolvedor projeta seu sistema, elabora as classes que usará para resolver o problema. Implementa estas classes. Escreve o código, a interface com o usuário e faz os testes entregando o seu produto. Entretanto, é muito comum que ao final deste processo o usuário já tenha a necessidade mudada. Quer seja porque ele especificou com poucos detalhes o que precisava ou porque tenham surgido novas necessidades. Então o programa precisará ter sua funcionalidade ampliada. É neste cenário que a herança torna-se útil. Existem certas medidas a serem tomadas com as classes criadas para que a herança possa ser usada. Uma vez utilizada a herança pode ser ainda que você ache mais interessante usar um modelo primitivo para os dados e que deva ser seguido em todo o projeto não tomando o cuidado de como isso será implementado. Tal modelo consiste de uma interface. Para que seja melhor entendido, veremos os conceitos que são envolvidos e criaremos um projeto que fará uso destes.

A programação orientada a objetos procura repetir em linguagem de computador modelos do mundo real. Para isso usamos classes com campos que são usados para armazenar os atributos destes objetos e métodos para executarmos operações com estes objetos.

Considere a seguinte situação aplicada às figuras geométricas por exemplo. Tomemos uma figura base como o quadrado da Figura 1.

Figura 1. Quadrado

Se fôssemos elaborar uma classe quais atributos precisaríamos? Talvez os seguintes: tamanho dos lados e um eventual cálculo da área.

Agora considere a Figura 2.

Figura 2. Retângulo

Ela possui algumas semelhanças com a primeira? Se você fosse implementar uma classe, faria uma nova classe, mesmo esta tendo poucas diferenças?

Considere então as Figuras 3 e 4.

Figura 3. Losango

Figura 4. Paralelogramo

Todas elas têm em comum o fato de possuírem quatro lados. Você poderia desenvolver uma classe para cada elemento ou, uma classe básica com alguns elementos fixos como, por exemplo, o número de lados da figura geométrica a ser representada e a medida de cada lado e também o ângulo formado entre os lados. Provavelmente faria um modelo básico sem cuidar de como exatamente cada elemento se comporta.

O conceito de herança trata desta tarefa: reaproveitar o código que foi escrito anteriormente acrescentando apenas o que for necessário. Existem muitas situações em que a herança pode ser implementada. Ela será usada sempre que você quiser estender a funcionalidade de um código já pronto sem precisar alterar o que já está funcionando.

Em C# a herança é implementada nas classes fazendo com que a nova classe possua todos os elementos da anterior, denominada como “classe base” e mais os atributos e métodos que precisarem ser adicionados para atender a nossa necessidade. A classe que expande as funcionalidades de uma base já existente é também chamada de “derivada” e os elementos da classe original que aparecem na nova classe são chamados de elementos “herdados”.

Você não precisará implementar novamente os métodos da classe base caso não queira modificá-los, mas a classe original precisa estar preparada para permitir que esta herança possa ser realizada através da observação de alguns pontos ao se escrever o código.

Preparando a classe para herança

O uso da herança na linguagem C# estabelece algumas condições principalmente vinculadas com os modificadores de acesso que são usados tanto para os atributos como para os métodos.

Nota: Para padronizar, sempre que eu colocar a palavra “atributos” da classe, você deve entender como os campos e propriedades para armazenar dados, ao passo que “métodos” são as funções que fazem parte da classe.
...

Quer ler esse conteúdo completo? Tenha acesso completo