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.
...PROGRAMADOR DE VERDADE
ÚLTIMAS VAGAS
de: R$ 658,80
por: 12x R$ 39,90
economize R$ 180,00
Essa oferta acaba em:
- Acesso completo
- Projetos reais
- Professores online
- Exercícios gamificados
- Certificado de autoridade
