Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Classes abstratas e interfaces<br />
Uma das contribuições maiores da Orientação a Objetos foi a estratificação funcional<br />
da mão de obra envolvida no desenvolvimento de um programa de computador. Hoje<br />
em dia os programadores não mais concebem e implementam seus códigos a partir de<br />
sua livre intuição - são orientados por sofisticados mecanismos de análise e modelagem<br />
de sistemas que freqüentemente geram esboços (esqueletos) de programas. Esses códigos<br />
incompletos representam a visão abstrata do sistema e dependendo do padrão de projeto<br />
utilizado podem ser fortemente baseados em interfaces.<br />
Classes abstratas e concretas<br />
Quando descrevemos uma hierarquia de classes, nem todas as classes são previstas de serem<br />
instanciadas. Por exemplo, observe a hierarquia de classes das figuras geométricas (vide a 2ª lista de<br />
exercícios):<br />
ABSTRATA<br />
CONCRETA<br />
Retangulo<br />
Quadrado<br />
Note que, apesar de Geometria ser uma classe, não faz muito sentido imaginar um "objeto geometria".<br />
No mundo real, sempre identificamos uma forma geométrica através de uma subclasse de Geometria:<br />
um quadrado, um triângulo, etc. Por isso dizemos que a classe Geometria é abstrata. De fato, o mais<br />
correto é dizer superclasse abstrata, pois a existência de objetos dessa classe sempre dependerá da<br />
implementação de alguma subclasse (concreta).<br />
Uma superclasse abstrata possui as seguintes características:<br />
Geometria<br />
Circulo<br />
12<br />
Triangulo<br />
Equilatero<br />
?? Não pode ser instanciada, mesmo que possua construtor (algumas linguagens, como <strong>Java</strong>,<br />
permitem a implementação de construtores em classes abstratas, mas não faz sentido, pois<br />
esses construtores não serão acessíveis).