Atenção: esse artigo tem um vídeo complementar. Clique e assista!

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” implementar. Estes são temas que atendem a necessidade de se criar módulos com baixo acoplamento.

Resumo DevMan:

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.

Conforme já estudamos em artigos anteriores, vimos que herança possibilita um alto grau de reutilização de código, na medida em que isola o que é comum entre as classes, separando-o do que é específico. Em termos de implementação, a utilização de herança torna o código mais legível, pois pode ser visualizada diretamente no código – simplesmente, através do uso da palavra-chave extends. Além disso, no entanto, algumas questões podem se apresentar quando estamos projetando uma aplicação. A primeira delas diz respeito à instanciação da superclasse da hierarquia, pois em muitas situações a classe pai é muito genérica e não justifica a criação de objetos do tipo correspondente. A segunda questão refere-se à implementação de comportamentos que são comuns a classes que não pertencem à mesma hierarquia, ou seja, como tratar isso de forma a manter o grau de reutilização de código.

Neste novo artigo estudaremos as respostas para essas perguntas, que serão dadas pela utilização de classes abstratas e interfaces. Além disso, estudaremos que o comportamento polimórfico é preservado mesmo quando implementamos os conceitos de classes abstratas e interfaces.

Antes de iniciar nosso estudo, precisamos observar que, neste artigo, sempre que nos referirmos a interfaces, estaremos falando genericamente do limite que separa dois componentes de software, e não de interface gráfica do usuário (GUI).

Classes Abstratas

Com o objetivo de iniciar a nossa discussão sobre classes abstratas, 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.

...
Quer ler esse conteúdo completo? Seja um assinante e descubra as vantagens.
  • 473 Cursos
  • 10K Artigos
  • 100 DevCasts
  • 30 Projetos
  • 80 Guias
Tenha acesso completo