12.07.2015 Views

k19-k11-orientacao-a.. - Departamento de Sistemas e Computação

k19-k11-orientacao-a.. - Departamento de Sistemas e Computação

k19-k11-orientacao-a.. - Departamento de Sistemas e Computação

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CLASSES ABSTRATAS 100Não faz sentido criar um objeto da classe Conta pois estaríamos instanciado um objeto que nãoé suficiente para representar uma conta que pertença ao domínio do banco. Mas, a princípio, não hánada proibindo a criação <strong>de</strong> objetos <strong>de</strong>ssa classe. Para adicionar essa restrição no sistema, <strong>de</strong>vemostornar a classe Conta abstrata.Uma classe concreta po<strong>de</strong> ser diretamente utilizada para instanciar objetos. Por outro lado, umaclasse abstrata não po<strong>de</strong>. Para <strong>de</strong>finir uma classe abstrata, basta adicionar o modificador abstract.1 abstract class Conta {2 // Atributos3 // Construtores4 // Métodos5 }Código Java 10.5: Conta.javaTodo código que tenta criar um objeto <strong>de</strong> uma classe abstrata não compila.1 // Erro <strong>de</strong> compilação2 Conta c = new Conta ();Código Java 10.6: Erro <strong>de</strong> compilaçãoMétodos AbstratosSuponha que o banco ofereça extrato <strong>de</strong>talhado das contas e para cada tipo <strong>de</strong> conta as informaçõese o formato <strong>de</strong>sse extrato <strong>de</strong>talhado são diferentes. Além disso, a qualquer momento o bancopo<strong>de</strong> mudar os dados e o formato do extrato <strong>de</strong>talhado <strong>de</strong> um dos tipos <strong>de</strong> conta.Neste caso, parece não fazer sentido ter um método na classe Conta para gerar extratos <strong>de</strong>talhadospois ele seria reescrito nas classes específicas sem nem ser reaproveitado.Po<strong>de</strong>ríamos, simplesmente, não <strong>de</strong>finir nenhum método para gerar extratos <strong>de</strong>talhados na classeConta. Porém, não haveria nenhuma garantia que as classes que <strong>de</strong>rivam direta ou indiretamente daclasse Conta implementem métodos para gerar extratos <strong>de</strong>talhados.Mas, mesmo supondo que toda classe <strong>de</strong>rivada implemente um método para gerar os extratosque <strong>de</strong>sejamos, ainda não haveria nenhuma garantia em relação as assinaturas <strong>de</strong>sses métodos. Asclasses <strong>de</strong>rivadas po<strong>de</strong>riam <strong>de</strong>finir métodos com nomes ou parâmetros diferentes. Isso prejudicariaa utilização dos objetos que representam as contas <strong>de</strong>vido a falta <strong>de</strong> padronização das operações.Para garantir que toda classe concreta que <strong>de</strong>riva direta ou indiretamente da classe Conta tenhauma implementação <strong>de</strong> método para gerar extratos <strong>de</strong>talhados e além disso que uma mesma assinatura<strong>de</strong> método seja utilizada, <strong>de</strong>vemos utilizar o conceito <strong>de</strong> métodos abstratos.Na classe Conta, <strong>de</strong>finimos um método abstrato para gerar extratos <strong>de</strong>talhados. Um métodoabstrato não possui corpo (implementação).1 abstract class Conta {2 // Atributos3 // Construtores4 // Métodos56 public abstract void imprimeExtratoDetalhado ();100 www.<strong>k19</strong>.com.br

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!