Vous êtes sur la page 1sur 9

C

C
l
l
a
a
s
s
s
s
e
e
s
s
a
a
b
b
s
s
t
t
r
r
a
a
t
t
a
a
s
s
e
e
I
I
n
n
t
t
e
e
r
r
f
f
a
a
c
c
e
e
s
s


Objetivos
Criar classes abstratas;
Definir interfaces.

Abstrao
Em Java voc pode definir classes que representem, na definio de um projeto, um nvel
mais alto de abstrao. Ao usar estas classes o projetista ter uma viso melhor de como as
subclasses devem se parecer e mesmo quais mtodos so obrigatrios em todas as
subclasses.

Classes Abstratas
Uma classe abstrata simplesmente uma classe que no pode ser instanciada. Somente
suas subclasses podem ser instanciadas. Por exemplo, Pessoa no contm detalhes
suficientes para fornecer algo til para o negcio.
Para o negcio deve ser possvel criar um Cliente, Fornecedor ou um
Funcionario. Pessoa serve, no entanto, como uma coleo de dados e comportamentos
que so comuns a todos os outros objetos que interagem com o sistema.
Mtodos Abstratos
Mtodos abstratos vo um passo alm da herana padro. Um mtodo abstrato definido
dentro de uma classe abstrata deve ser implementado pelas subclasses destas. Esta tcnica
permite que o projetista de classes decida exatamente quais comportamentos as subclasses
devem ter.
O projetista de uma classe abstrata no consegue determinar como estes
comportamentos sero implementados, mas somente que eles sero implementados.
Interfaces
Interface a especificao de um conjunto de mtodos, similares a uma classe abstrata.
Alm do que uma classe abstrata pode oferecer, uma interface pode efetivamente permitir
herana mltipla.
Uma classe pode implementar um nmero ilimitado de interfaces, mas pode estender
somente uma nica superclasse.

Definindo classes abstratas
Java fornece a palavra reservada abstract que indica que uma classe abstrata. Por
exemplo, a classe Pessoa no exemplo abaixo foi declarada como sendo abstrata:
public abstract class Pessoa extends Object{
....
}


pessoa declarado como uma classe abstrata porque no possui informao ou
comportamento suficiente para representar um objeto autnomo.
O usurio no deveria ser capaz de criar objetos Pessoa, porque Pessoa apenas
uma classe parcial e intermediria. Pessoa existe somente para que possa ser estendida por
classes mais especializadas, tais como Cliente ou Funcionario.
O que acontece se voc tentar instanciar uma classe abstrata?
public class Aplicacao {
public static void main(String[] args) {
Pessoa pessoa = new Pessoa(); // ERRO
// Cannot instantiate the type Pessoa
}
}
Se voc tentar criar um objeto Pessoa em seu programa, o compilador acusar um
erro. O usurio pode criar somente objetos de subclasses concretas:

Cliente cliente = new Cliente();
Fornecedor fornecedor = new Fornecedor();
Funcionario funcionario = new Funcionario();
O modificador abstract pode ser aplicado somente a classes e mtodos. Classes
abstratas provm um modo de adiar a implementao de mtodos para subclasses. Uma
classe abstrata no pode ser instanciada, ou seja, no podemos chamar seus construtores.

Mtodos Abstratos
Ao projetar uma hierarquia de classes, h provavelmente algumas operaes que todas
as classes devero ter, cada qual de sua prpria maneira. Por exemplo, em um sistema de
cadastro, provavelmente para cada classe concreta o nome(do Cliente, do Funcionario, do
Fornecedor) pode ser tratado de forma diferente.
Para representar este conceito em Java, o mtodo setNome definido na Classe Pessoa
pode ser importado, e ter uma implementao sensata para este mtodo em cada Classe
Concreta que herda Pessoa, porque cada tipo de item tem suas prprias exigncias.

Definindo mtodos abstratos
Para declarar um mtodo abstrato em Java, voc deve colocar antes do nome do
mtodo a palavra reservada abstract. Veja o exemplo:
/**
* Mtodo Abstrato que deve ser implementado nas classe filhas
*/
public abstract void setNome(String parametroNome);

Ao declarar um mtodo abstrato, voc deve fornecer somente a assinatura do mtodo,
que compreende: o nome do mtodo, a lista de parmetros esperados e o tipo de retorno.
Voc no fornece um corpo para o mtodo.
Cada subclasse concreta dever sobrescrever este mtodo e fornecer o seu prprio corpo.
Agora que o mtodo declarado abstrato, todas as subclasses devem fornecer uma
implementao para ele.
Subclasses abstratas podem conter mtodos que no so declarados abstratos. Estes
mtodos podem ser sobrescritos pelas subclasses, mas isto no necessariamente
obrigatrio.

Interfaces



Uma interface similar a uma classe abstrata, exceto que ela no possui nenhum
mtodo concreto ou variveis de instncia. apenas uma coleo de declaraes de
mtodos abstratos e constantes isto , variveis declaradas como static public
final.
Uma interface como um contrato que a subclasse deve obedecer.
Qualquer classe que implemente uma interface deve implementar todos os mtodos
especificados na interface. Uma classe pode implementar muitas interfaces, mas pode
estender apenas uma nica classe. Java no suporta herana mltipla, mas permite a
implementao de mltiplas interfaces.
Como j foi dito anteriormente, Cliente herda todos os atributos e comportamentos de
Pessoa. Alm disto, deve fornecer implementao para cada um dos mtodos definidos em
cada interface que implementar.
Estes mtodos podem ser usados por outras classes para implementar comportamentos
especficos como, por exemplo, uma rotina de ordenamento.

Exemplos de interfaces
Interfaces descrevem um aspecto de comportamento que muitas classes possuem. O
nome de uma interface geralmente um comportamento como: Compra, Venda, etc.
Difere, portanto, do nome de uma classe, que usualmente um substantivo, como cliente ou
produto.
A interface java.sql.Connection possui os mtodos a seguir:
- void commit()
- void rollback()
- void close()
- void clearWarnings()
- Statement createStatement()
- void setAutoCommit(boolean)
- boolean isClosed()

Qualquer classe que precise trabalhar com conexo de banco de dados pode
implementar a interface Connection.
As classes que implementam uma interface podem ser completamente distintas e no ter
uma nada a ver com as demais.
A nica coisa que devem ter necessariamente em comum a necessidade de todas
serem mveis.

Definindo Interfaces
Voc pode definir uma interface usando a palavra reservada interface. Todos os
mtodos especificados em uma interface so implicitamente pblicos e abstratos (public e
abstract). Quaisquer variveis definidas em uma interface so implicitamente pblicas,
estticas e constantes (public, static e final).
public interface GenericDAO<T> {

void persist(T entity);

void merge(T entity);

void remove(T entity);

Collection<T> findAll();

Query createQuery(String query, Object... parameters);
}
Porque os mtodos de interface so implicitamente pblicos e abstratos, prtica
geralmente aceita no especificar estes modificadores de acesso. O mesmo verdade para
variveis.
Como so implicitamente pblicas, estticas e finais, geralmente estes modificadores
no so especificados. Cada interface pode ser representada em um arquivo Java separado
com o nome da interface.
A interface acima define um padro Generico para a implementao de um CRUD de
forma Generica para n classes.


Implementando Interfaces
O exemplo abaixo mostra o exemplo da classe GenericDAOImplementa que implementa a
interface GenericDAO.
A classe GenericDAOImplementa deve implementar todos os mtodos de todas as
interfaces que ela declare implementar (interfaces presentes na clusula implements).
Neste caso, GenericDAOImplementa deve implementar os mtodos contidos na interface
GenericDAO.
public class GenericDAOImplementa implements GenericDAO<Cliente>{
@Override
public void persist(Cliente parametroEntity) {
// TODO Auto-generated method stub
}
@Override
public void merge(Cliente parametroEntity) {
// TODO Auto-generated method stub
}
@Override
public void remove(Cliente parametroEntity) {
// TODO Auto-generated method stub
}
@Override
public Collection<Cliente> findAll() {
// TODO Auto-generated method stub
return null;
}
@Override
public Query createQuery(String parametroQuery,
Object... parametroParameters) {
// TODO Auto-generated method stub
return null;
}
}

Uma classe pode implementar mais de uma interface se ela desejar, bastando para tal
especificar uma lista de interfaces separadas por vrgula.
Considere o seguinte exemplo:

Cdigo 2-9: A classe Aplicao pode implementar mais de uma interface.

Aqui, GenericDAOImplementa implementa duas interfaces: GenericDAO<Cliente> e
Conection. Isto significa que a classe GenericDAOImplementa deve implementar todos os
mtodos declarados em GenericDAO<Cliente> e Conection.
A classe GenericDAOImplementa ter o comportamento definido nas duas interfaces.

public class GenericDAOImplementa implements GenericDAO<Cliente>, Conection

}