- 1. Classes Abstratas e Interfaces
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
-
- 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
-
- 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?
-
-
- Em uma classe abstrata podem ser definidos mtodos abstratos e
no-abstratos
-
-
- Todos os mtodos de uma interface so implicitamente
abstratos
-
-
- 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.