Este é um post disponível para assinantes MVPClasses abstratas e interfaces - Revista easy Java Magazine 13
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 i
[Artigo já está disponível no Leitor Digital DevMedia®. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da Easy Java Magazine 13
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.
Assim, nosso desafio agora é impedir que uma classe assim, com definições bastante genéricas, seja instanciada. E a resposta para esse problema está no uso de 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 "
ATENÇÃO! A exibição deste artigo foi interrompida.
Este é um post disponível para assinantes MVP
Space do autor


0
0
