Classe abstrata
O conceito de generalização na POO(Programação Orientada a Objetos) significa que um objeto encapsula comportamentos e estados para uma categoria de objetos.
Para ilustrar vamos pensar em algumas figuras geométricas conforme mostra a figura abaixo: |
O objeto genérico neste exemplo é figura geométrica que iremos definir como uma classe abstrata.
Muitas formas geométricas possuem área, perímetro e cor.
O conceito de especificação na POO significa que um objeto pode herdar o comportamento e o estado comum de um objeto genérico, porém cada objeto precisa definir seu próprio estado e comportamento.
No exemplo cada forma geométrica tem sua fórmula particular para calcular a área e o perímetro.
A herança permite a reutilização de código.
Para o exemplo como sabemos que todas as formas possuem cor deveríamos definir um atributo cor em cada forma. Correto ?
Não. Incorreto.
Seria melhor criar uma classe com um atributo cor e fazer com que as demais formas especializadas herdassem esse atributo cor.
Neste caso podemos definir um classe base Forma como uma classe abstrata e uma classe derivada para cada forma especifica que desejamos tratar.
Na vida real nós nunca calculamos a área e o perímetro de uma figura geométrica; para fazer isso você precisa saber qual o tipo de figura geométrica (quadrado, triângulo, círculo, etc.) para implementar o cálculo usando a fórmula apropriada.
Para calcular a área podemos definir métodos abstratos na classe abstrata e dessa forma obrigar as classes que herdam da classe abstrata a implementar esses métodos. Com isso teremos certeza de que esses métodos foram implementados.
Definindo então os métodos CalcularArea() e CalcularPerimetro() como abstratos e assim estamos forçando as classes que derivam da classe base Forma, que também é abstrata, a definir o comportamento dos métodos implementando-os.
Agora que eu apresentei o cenário vamos definir os conceitos relacionados a classes abstratas e métodos