Voltar

De que se trata o artigo: Trata de conceitos e a implementação de classes abstratas e interfaces. Apresenta recursos avançados que permitem criar programas mais flexíveis e extensíveis, os quais possibilitam a aplicação do lema “programar pensando na interface e não na implementação”.


Em que situação o tema é útil:
É útil quando o desenvolvedor busca aumento de produtividade e escrever classes que separam interface de implementação, ou em outras palavras, desacoplam “o que” deve ser implementado do “como” imple-mentar. Estes são temas que atendem a necessidade de se criar módulos com baixo acoplamento.

Neste artigo serão apresentadas as classes abstratas e as interfaces. Estes temas serão expostos através de problemas que justificam a aplicação dos conceitos e por meio de exemplos – incluídos os modelos de classes – que serão implementados integralmente. As regras e características dessas duas importantes ideias da orientação a objetos serão cuidadosamente detalhadas para prover o desenvolvedor da base de conhecimento necessária para implementá-las.

Veremos que, principalmente as interfaces, permitem explorar com mais eficiência o polimorfismo, pois, como afirma Kathy Sierra, somente com as interfaces é possível atingir maior flexibilidade e extensibilidade no desenvolvimento de aplicações. Observe que mais uma vez nesta série de artigos, voltamos a falar deste conceito essencial, pois o polimorfismo é uma das três características mais importantes da orientação a objetos, juntamente com a abstração e a herança.

Classes Abstratas

Com o objetivo de iniciar a nossa discussão sobre classes abstra-tas, vamos analisar a hierarquia representada através de um diagrama de classes UML (Unified Modeling Language) da Figura 1.

Baseado em nosso conhecimento de geometria é possível afirmar que, em uma aplicação, podemos instanciar Circulo, Paralelogramo, Quadrado, Retangulo e Trapezio. Pois, dessas classes, conhecemos claramente suas características, que são definidas pelos atributos, e o seu comportamento, que é dado pelos métodos. Por outro lado, qual é a forma de uma Figura? E de um Quadrilatero? Sabemos como calcular sua área ou seu perímetro? Ou seja, uma Figura ou um Quadrilatero possuem definições muito vagas, levando-nos a concluir que não faz sentido instanciar objetos desses tipos. Mas sabemos que – pelo que vimos nos artigos anteriores – da maneira que estudamos as implementações de classes, é possível criar objetos do tipo Figura ou Quadrilatero.

Assim, nosso desafio agora é impedir que uma classe assim, com definições bastante genéricas, seja instanciada. E a resposta para este problema está no uso das classes abstratas.

Classes abstratas são aquelas que não podem ser instanciadas, mas podem ser estendidas. Na verdade, a única finalidade de uma classe abstrata, é ser superclasse de uma hierarquia. Apenas através da especialização elas podem ser utilizadas.

Segundo a definição no site da Oracle, uma classe abstrata é uma classe declarada com o modificador abstract – podendo ou não incluir métodos abstratos. Isso nos leva à necessidade de definir método abstrato. Um método abstrato é aquele declarado com o modificador abstract e sem corpo – ou seja, sem as chaves e seguido de ponto-e-vírgula, conforme o exemplo que mostramos abaixo. Note que um método abstrato deve obrigatoriamente declarar o modificador abstract e não possuir implementação.

Antes de prosseguir, mostrando a implementação da hierarquia de classes que estamos apresentando, é importante observar que na UML as classes abstratas são representadas com seus nomes em itálico.

...
Quer ler esse conteúdo completo? Tenha acesso completo