Classes Abstractas

Propaganda
Programação com Objectos
Processamento de Dados I
4. Classes Abstractas
1
4. Classes Abstractas
|
Conceito de classe abstracta
|
Declaração de uma classe abstracta
|
Implicações e características das classes abstractas
|
Utilização de classes abstractas 100% abstractas
|
Conclusão
|
Exemplo
Programação com Objectos / Processamento de Dados I
2
4. Classes Abstractas
|
Conceito de classe abstracta
z
Uma definição comum para classes é a de que uma classe
representa uma entidade do mundo real. Contudo existem situações
em que o que se quer representar não é concreto. Recorre-se então
à chamada classe abstracta.
z
Classe abstracta:
• Todas as classes nas quais pelo menos um método de instância
não se encontra implementado, mas apenas declarado (método
abstracto).
• Uma classe abstracta não pode criar instâncias.
• O mecanismo de herança mantém-se aplicável a classes
abstractas.
Programação com Objectos / Processamento de Dados I
3
4. Classes Abstractas
|
Declaração de uma classe abstracta
modificador abstract class nome_da_classe {
//metodos de instancia abstractos
modificador abstract tipo nome_método();
}
Em UML as classes e métodos abstractos são representados com o
identificador/assinatura em itálico.
Nome_da_classe
modificador nome_método(argumentos): tipo_saída
Programação com Objectos / Processamento de Dados I
4
4. Classes Abstractas
|
Declaração de uma classe abstracta
Consideremos o seguinte exemplo:
Figura
Circulo
Rectângulo
Triângulo
A classe figura é uma classe abstracta que contém dois métodos
abstractos que permitem calcular a área e o perímetro de uma figura
geométrica.
A sua declaração seria:
public abstract class Figura {
//metodos de instancia abstractos
public abstract double area();
public abstract double perimetro();
}
Programação com Objectos / Processamento de Dados I
5
4. Classes Abstractas
|
Declaração de uma classe abstracta
A sua declaração seria:
Em java:
public abstract class Figura {
//metodos de instancia abstractos
public abstract double area();
public abstract double perimetro();
}
Em UML:
Figura
+ area () : double
+ perimetro () : double
Programação com Objectos / Processamento de Dados I
6
4. Classes Abstractas
|
Implicação / características das classes abstractas
z
Qualquer subclasse de uma classe abstracta herda automaticamente
todos os métodos da classe abstracta, quer estejam implementados ou
sejam abstractos.
z
Qualquer subclasse de uma classe abstracta terá de implementar todos
os métodos abstractos herdados da sua superclasse (sem excepção)
para que possa ser uma classe de implementação concreta, isto é, para
que possa ter instâncias. Caso contrário será também uma classe
abstracta.
z
Uma classe abstracta delega nas suas subclasses a responsabilidade
pela implementação dos seus métodos abstractos, facilitando o
aparecimento de diferentes implementações dos mesmos métodos nas
suas subclasses.
Programação com Objectos / Processamento de Dados I
7
4. Classes Abstractas
|
Utilização de classes 100% abstractas
ƒ o mecanismo de herança garante que todas as suas subclasses vão
herdar o mesmo protocolo ou API, podendo no entanto definir as
suas extensões.
ƒ todas as subclasses da classe abstracta responderão ao mesmo
protocolo, ou seja, “falam a mesma linguagem”
ƒ normalização de vocabulário para as subclasses existentes e
para as futuras subclasses
ƒ o polimorfismo da linguagem JAVA garantirá a correcta execução
desta “linguagem comum”.
ƒ classe 100% abstracta pode ser vista como uma assinatura
(especificação meramente sintáctica).
Programação com Objectos / Processamento de Dados I
8
4. Classes Abstractas
|
Conclusão
ƒ
Permitem escrever especificações sintácticas para as quais múltiplas
implementações são possíveis de momento ou de futuro.
ƒ
Permitem normalizar a “linguagem” (API) a partir de certos pontos da
hierarquia.
ƒ
Permitem introduzir flexibilidade e generalidade nas classes criadas.
ƒ
Permitem tirar todo o partido do polimorfismo (via substitutividade).
Programação com Objectos / Processamento de Dados I
9
4. Classes Abstractas
| Conclusão
ƒ
Ocupam normalmente os níveis mais elevados das hierarquias.
ƒ
Devem declarar o maior número possível de métodos abstractos, pois
passarão a constituir a linguagem comum (API) das suas subclasses.
O número de métodos abstractos dependerá da análise de requisitos
do problema.
ƒ
Colocar variáveis ou código concreto numa classe abstracta em geral
não é aconselhável em JAVA pois todas as suas subclasses presentes
e futuras irão herdar tais variáveis e métodos. Poderá no entanto haver
situações em que colocar o máximo de funcionalidade numa classe
abstracta seja vantajoso.
ƒ
Em geral, as classes abstractas em JAVA devem ser 100% abstractas.
Programação com Objectos / Processamento de Dados I
10
4. Classes Abstractas
|
Exemplo
ƒ
Vamos implementar o exemplo da figura geométrica:
Figura
Circulo
Triangulo
Rectangulo
Quadrado
Programação com Objectos / Processamento de Dados I
11
4. Classes Abstractas
|
Exemplo
|
Um objecto de uma classe abstracta nunca pode ser criado.
É possível fornecer um construtor que pode ser chamado pela classe
derivada, para iniciar os membros privados.
A classe abstracta Figura poderia ser:
|
|
public abstract class Figura {
private String nome;
public Figura (String nomeFigura) { nome = nomeFigura; }
public String getNome() { return nome; }
public abstract double area();
public abstract double perimetro();
}
Programação com Objectos / Processamento de Dados I
12
4. Classes Abstractas
|
Exemplo
|
A classe Circulo tem como atributos o PI e o raio.
A classe Circulo poderia ser:
|
public class Circulo extends Figura {
private static final double PI = 3.14159265358979323;
private double raio;
public Circulo (double raio) {
super(“Circulo”); this.raio = raio;
}
public double area() {
return PI * Math.pow (raio, 2);
}
public double perimetro() {
return 2 * PI * raio;
}
}
Programação com Objectos / Processamento de Dados I
13
4. Classes Abstractas
|
Exemplo
|
A classe Triangulo tem como atributos a base e a altura (apenas para triângulo
rectângulos).
A classe Triangulo poderia ser:
|
public class Triangulo extends Figura {
private double base, altura;
public Triangulo (double base, double altura) {
this.base = base;
this.altura = altura;
}
public double area() {
return base * altura / 2;
}
public double perimetro() {
return base + altura + Math.sqrt(base*base + altura*altura);
}
}
Programação com Objectos / Processamento de Dados I
14
4. Classes Abstractas
|
Exemplo
|
A classe Rectangulo tem como atributos o comprimento e a largura.
A classe Rectangulo poderia ser:
|
public class Rectangulo extends Figura {
private double comp, larg;
public Rectangulo (double comp, double larg) {
this.comp = comp;
this.larg = larg;
}
public double area() {
return comp * larg;
}
public double perimetro() {
return 2*(comp + larg);
}
}
Programação com Objectos / Processamento de Dados I
15
4. Classes Abstractas
|
Exemplo
|
A classe Quadrado não necessita de atributos porque sendo um caso
especial de um rectângulo pode herdar as suas carcaterísticas.
A classe Quadrado poderia ser:
|
public class Quadrado extends Rectangulo {
public Quadrado (double lado) {
super (lado,lado)
}
}
Programação com Objectos / Processamento de Dados I
16
Download