java 10 classes abstratas interfaces
TRANSCRIPT
- 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.