Java 10 Classes Abstratas Interfaces

Embed Size (px)

Citation preview

  • 1. Classes Abstratas e Interfaces
      • Regis Pires Magalhes
    • [email_address]

2. Classes Abstratas

    • Usamos a palavra chaveabstractpara impedir a instanciao de uma classe.
    • Classes abstratas normalmente possuem um ou mais mtodos abstratos.
    • Um mtodo abstrato no possui corpo, apenas define a assinatura (prottipo) do mtodo
    • Classes abstratas so teis quando uma classe define mtodos a serem implementados apenas pelas suas subclasses

3. Classes Abstratas

  • Regras sobre mtodos abstratos e as classes que os contm:
    • Toda classe que possui mtodos abstratos automaticamente abstrata e deve ser declarada como tal.
    • Uma classe pode ser declarada abstrata mesmo se ela no possuir mtodos abstratos.
    • Uma classe abstrata no pode ser instanciada.
    • Uma subclasse de uma classe abstrata pode ser instanciada se:
      • Sobrescreve cada um dos mtodos abstratos de sua superclasse
      • Fornece uma implementao para cada um deles

4. Classes Abstratas

    • Se uma subclasse de uma classe abstrata no implementa todos os mtodos abstratos que ela herda, ento a subclasse tambm abstrata
    • Para declarar um mtodo abstrato coloque a palavra-chaveabstractno incio do prottipo do mtodo
    • Para declarar uma classe abstrata coloque a palavra-chaveabstractno incio da definio da classe

5. Classes Abstratas public abstract classConta { protected double saldo ; public voidretira( doublevalor) { this . saldo-= valor; } public voiddeposita( doublevalor) { this . saldo+= valor; } public doublegetSaldo() { return this . saldo ; } public abstract voidatualiza(); } 6. Interfaces

  • Problema
    • Suponha que voc define as classes abstratasFormaeDesenhavele a classeCirculo(que estendeForma )
    • Como criar a classeCirculoDesenhavelque ao mesmo tempoCirculoeDesenhavel ?
      • public classCirculoDesenhavel
      • extendsCirculo, Desenhavel { ... }
    • Mas... o cdigo acima est ERRADO!
      • Java, diferentemente de C++, no permite que uma classe possua duas superclasses diretas, ou seja, no suporta herana mltipla!

7. Interfaces

  • Soluo
    • Para resolver esse tipo de problema Java define o conceito de interfaces
      • Uma interface semelhante a uma classe abstrata, exceto pelo fato de utilizar a palavra chaveinterfaceno lugar deabstract classna definio da classe.
    • Interface um contrato onde quem assina se responsabiliza por implementar os mtodos definidos na interface (cumprir o contrato).
    • Ela sexpe o que o objeto deve fazer ,e no como ele faz ,nem o que ele tem .Comoelefazvai ser definido em umaimplementaodessa interface.

8. Interfaces

  • Quais as diferenas entre interface e classe abstrata?
    • Declarao de mtodos
      • Em uma classe abstrata podem ser definidos mtodos abstratos e no-abstratos
      • Todos os mtodos de uma interface so implicitamente abstratos
    • Declarao de variveis
      • Em uma classe abstrata podem ser definidas variveis de instncia, de classe e constantes
      • Todos os atributos de uma interface so semprepublic static final(constantes), mesmo que essas palavras reservadas no sejam usadas.

9. Interfaces 10. Interfaces public interfaceAutenticavel { public booleanautentica( intsenha); } classGerenteextendsFuncionarioimplementsAutenticavel { private int senha ; // outros atributos e mtodos public booleanautentica( intsenha) { if( this . senha!= senha) { return false ; } // pode fazer outras possiveis verificacoes, // como saber se esse departamento do // gerente tem acesso ao Sistema return true ; } } 11. Herana entre Interfaces

    • Diferentemente das classes, uma interface pode herdar de mais de uma interface.
    • como um contrato que depende de que outros contratos sejam fechados antes deste valer.
    • Voc no herda mtodos e atributos, e sim responsabilidades.

12. Para que usar interfaces?

    • Para deixar o cdigo mais flexvel, e possibilitar a mudana de implementao sem maiores traumas.
    • Elas tambm trazem vantagens em no acoplar as classes.
      • Uma vez que herana atravs de classes traz muito acoplamento, muitos autores clssicos dizem que em muitos casos herana quebra o encapsulamento.

13. Interfaces 14. Interfaces packagejava.io; public interfaceSerializable { } 15. Interfaces packagejava.lang; importjava.util.*; public interfaceComparable { public intcompareTo(T o); } 16. Interfaces packagejava.util; public interfaceCollectionextendsIterable { intsize(); booleanisEmpty(); booleancontains(Object o); // ... booleanadd(E e); booleanremove(Object o); // ... voidclear(); // ... } 17. Interfaces packagejava.util; public interfaceListextendsCollection { // ... intindexOf(Object o); intlastIndexOf(Object o); // ... } 18. Interfaces packagejava.sql; public interfaceWrapper { T unwrap(java.lang.Class iface)throwsjava.sql.SQLException; booleanisWrapperFor(java.lang.Class iface)throwsjava.sql.SQLException; } 19. Interfaces packagejava.sql; importjava.util.Properties; public interfaceConnectionextendsWrapper { // ... voidcommit()throwsSQLException; voidrollback()throwsSQLException; voidclose()throwsSQLException; // ... int TRANSACTION_NONE = 0; int TRANSACTION_READ_UNCOMMITTED= 1; int TRANSACTION_READ_COMMITTED = 2; int TRANSACTION_REPEATABLE_READ = 4; int TRANSACTION_SERIALIZABLE = 8; // ... } 20. Regras de Ouro

  • No livro Design Patterns, logo no incio os autores citam 2 regras de ouro:
    • Evite herana, prefira composio.
    • Programe voltado a interface e no a implementao.