Atenção: esse artigo tem uma palestra complementar. Clique e assista!
Atenção: esse artigo tem um vídeo complementar. Clique e assista!
C# Primeiros passos com a linguagem - Parte 1
C# Primeiros passos com a linguagem - Parte 2
C# Primeiros passos com a linguagem - Parte 3
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.