Sunteți pe pagina 1din 38

Paradigmas de Programao

Herana
capacidade de uma classe (subclasse) herdar,
adquirir atributos e funcionalidades de outra classe
(superclasse),
podendo
juntar
algumas
especificidades e/ou alterar outras. Existe uma
relao tipo -um... entre objectos da subclasse e
da superclasse
Ex: carro_desportivo poder ser uma subclasse de automvel
(carro_desportivo _um automvel)
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

Paradigmas de Programao

Vantagens da Utilizao de Herana


Estruturao
Reutilizao de software
Economia de cdigo
Economia de tempo em debug

Nota : uma subclasse pode ser superclasse de outra


2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

Paradigmas de Programao

Tipos de Herana
Herana simples a subclasse s tem uma
superclasse, isto s herda de uma classe
Herana mltipla a subclsse tem mais do
que uma superclasse, herda de mais do que
uma classe

Nota : Java s admite herana simples


2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

Paradigmas de Programao

Herana em Java
extends palavra chave que indica que uma
classe subclasse de outra
protected modificador de acesso que
permite que componentes com este
modificador sejam acessveis na classe
derivada e nas classes definidas no mesmo
package

2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

Paradigmas de Programao
Exemplo de herana em Java
public classe Pai { ... ... }
public class Filho extends Pai {... ... }
public class Filha extends Pai {... ... }
public class Neto extends Filho {... ...}

Existe herana directa entre Filho e Pai


Existe herana indirecta entre Neto e
Pai
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

Paradigmas de Programao
Construtores na hierarquia de derivao em Java
Quando se cria um objecto de uma subclasse o construtor chama
imediatamente o construtor da superclasse (explicitamente atravs
de super(...) ou implicitamente, por omisso).
A execuo do construtor implica a inicializao das v. de instncia
da superclasse que so parte do objecto da subclasse e s depois
que o construtor da subclasse inicializa as variveis de instncia da
subclasse.
Mesmo que o construtor no as inicialize explicitamente so
inicializadas do seguinte modo:
Tipo numrico primitivo a 0
Tipo boolean a false
Tipo referncia a null

2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

Paradigmas de Programao
Notas sobre herana em Java
Ao reescrever um mtodo na subclasse o seu acesso no pode ser
restringido, isto , se public na super classe no pode ser protected
ou private na subclasse.
Um objecto da subclasse um objecto da superclasse, isto posso
atribuir classe Pai um objecto da classe Filho (o contrrio falso).
A classe Object superclasse de todas as classes construdas em
Java.
Para se aceder na subclasse a um mtodo da superclasse, que est
reescrito na subclasse, usa-se a palavra super.nome_do_mtodo(...).

2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

Paradigmas de Programao
Principais mtodos da classe Object
boolean equals ( Object obj) deve ser reescrito em cada classe
para comparar estado dos objectos e no verificar se referenciam o
mesmo objecto.
Object clone( ) throws CloneNotSupportedException para classes
que implementam Cloneable.
String toString( ) deve ser reescrito para todas as classes, devolve
uma representao textual do objecto.
Class getClass( ) devolve um objecto que representa a classe de
runtime do objecto this.
void finalize( ) throws Throwable executado antes do garbage
collector, quando o objecto no possui referncias associadas.
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

Paradigmas de Programao
Construtores na hierarquia de derivao (a superclasse)
public class SuperClasse {
protected int x;
protected int z=20;
{
System.out.println("Bloco inicial da super");
}
public SuperClasse() {
System.out.println("Construtor da super");
setX(10);
}
public String toString() {
return "x= "+x+"

"+ "z= "+z+"

";

}... ...
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

Paradigmas de Programao
Construtores na hierarquia de derivao (a subclasse)
public class SubClasse extends SuperClasse{
private int y;
{
System.out.println("Bloco inicial da sub");
}
public SubClasse() {
super();
System.out.println("Construtor da sub");
y=11;
}
public String toString() {

//reescrita do mtodo toString()

return super.toString() + "y= + y;


}
}
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

10

Paradigmas de Programao
Construtores na hierarquia de derivao ( teste)

Sada:
public class Teste {
public static void main(String [] args){
SubClasse ep1=new SubClasse();

Construtor da super

System.out.println(ep1);

Bloco inicial da sub


Construtor da sub

x= 10

2009/2010

Bloco inicial da super

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

z= 20

y= 11

11

Paradigmas de Programao

CLASSE ABSTRACTA
uma classe que no pode ser instanciada, geralmente usada para
derivar subclasses.
Se tiver pelo menos um mtodo abstracto (sem cdigo) ter que ser
forosamente abstracta.
possvel ser abstracta e ter todos os mtodos com implementao
Os mtodos abstractos sero implementados nas subclasses, se o no
forem, as subclasses sero tambm abstractas.
Nenhum mtodo abstracto de uma classe abstracta pode ser final, static
ou private.
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

12

Paradigmas de Programao

CLASSE ABSTRACTA definio em Java

Prefixa-se a definio da classe com a palavra abstract


Exemplo:
public abstract class Experiencia{
... ... ...
public abstract void metodoX( ) ;
... ... ...
}

2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

13

Paradigmas de Programao

Polimorfismo
Significa existir em muitas formas.
Traduz a capacidade de uma referncia poder referenciar
objectos de diversos tipos ( da mesma linha hierrquica)
Exemplo:
SuperClasse x=new SubClasse1( );
x=new SubClasse2( );
Nota: um tipo primitivo no pode armazenar informao de
outro tipo, diz-se tipo monomrfico.
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

14

Paradigmas de Programao
Polimorfismo e Ligao Dinmica
Exemplo:
class Forma
{
void desenhar( ...){ }
}
class Quadrado extends Forma{
void desenhar( ...){ ---- }
}
class Triangulo extends Forma{
void desenhar( ...){ ---- ---}
}
class Outra {
void mostraDesenhos( Forma f) {
f.desenhar(...); }
}
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

15

Paradigmas da Programao
Polimorfismo e Ligao Dinmica
No exemplo anterior o mtodo mostraDesenhos tem um
parmetro f do tipo Forma.
Esta referncia pode referenciar quer o tipo Quadrado
quer o tipo Tringulo e na compilao no se sabe qual o
mtodo desenhar que vai ser executado, s na execuo
que o sistema reconhece qual o tipo de objecto que f
referencia e portanto s durante a execuo que sabe
qual o mtodo desenhar que vai ser executado. Esta
capacidade chama-se Ligao Dinmica (dynamic
binding).
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

16

Paradigmas de Programao

Ligao Esttica
Na Ligao Esttica no momento da compilao est
definido qual o mtodo a ser executado.
Em linguagens como C, Pascal no existe ligao
dinmica, s existe ligao esttica.

2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

17

Paradigmas de Programao
Upcasting
Caracterstica da herana em que um objecto da subclasse
pode ser usado como um objecto da superclasse.
Esta converso sempre segura.

Exemplo:
Forma f1;
Quadrado q1=new Quadrado();
f1=q1; // upcasting
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

18

Paradigmas de Programao
Downcasting
Caracterstica da herana em que uma referncia
(esttica) da superclasse atribuda a uma referncia da
subclasse . Esta converso s possvel se a referncia
da superclasse tiver um tipo dinmico do tipo da
subclasse.
Exemplo:
Forma f1= new Quadrado();
//tipo esttico de f1-- Forma
//tipo dinmico de f1-- Quadrado

Quadrado q2;
q2= (Quadrado) f1; // downcasting
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

19

Paradigmas de Programao
Tipo esttico e dinmico de uma referncia
Forma f1= new Quadrado();

tipo esttico de f1-- Forma


tipo dinmico de f1-- Quadrado

Na execuo de mtodos de instncia so executados os


mtodos definidos na classe do tipo dinmico (se
existirem, seno procura na superclasse).
Na execuo de atributos de instncia, de classe ou
mtodos de classe, so executados os referentes ao tipo
esttico do objecto.
A compilao atende ao tipo esttico das referncias.
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

20

Paradigmas de Programao

Tipo esttico e dinmico de uma referncia


Forma f1= new Quadrado();
Na classe Forma:
public void metodoX(){

Na classe Quadrado:
public void metodoX(){

System.out.println(Forma);
}
f1.mtodoX();

2009/2010

System.out.println(Quadrado);
}

a sada desta instruo ser Quadrado

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

21

Paradigmas de Programao

Tipo esttico e dinmico de uma referncia


Forma f1= new Quadrado();
Na classe Forma:
public static void metodoX(){

Na classe Quadrado:
public static void metodoX(){

System.out.println(Forma);
}
f1.mtodoX();

2009/2010

System.out.println(Quadrado);
}

a sada desta instruo ser

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

Forma

22

Paradigmas de Programao

Tipo esttico e dinmico de uma referncia


Forma f1= new Quadrado();
Na classe Forma:
public class Forma{

Na classe Quadrado:
public class Quadrado extends Forma{

public int lado=10;

public int lado=55;

... ... ...

... ... ...

System.out.println(f1.lado);

a sada desta instruo ser 10

2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

23

Paradigmas de Programao

O operador instanceof
Este operador permite verificar se o tipo dinmico de um
objecto de uma dada classe ou no. Devolve falso caso
o objecto no pertena classe ou seja nulo.
Exemplo:
Forma f1= new Quadrado();
Quadrado q2=new Quadrado();
Quadrado q3=null;
System.out.println( q2 instanceof Quadrado);
System.out.println( q2 instanceof Forma);
System.out.println( f1 instanceof Quadrado);
System.out.println( q3 instanceof Quadrado);
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

Resultado:
true
true
true
false
24

Paradigmas de Programao
Responda s seguintes questes:
1. Qual o tipo de relao semntica entre objectos em que
existe composio. Exemplifique.
2. Considere as seguintes classes:
public class Ponto {
private int x,y;
.... .... ....

public class Circulo {


private Ponto centro;
private double raio;
.... .... ....

Descreva a instruo que permite criar um crculo de raio


10.5 e cujo centro se encontra nas coordenadas (2,3).Crie
todas as funcionalidades para poder ser executada essa
instruo.
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

25

Paradigmas de Programao

3. Numa classe TesteCirculo como faria para que duas


referncias Circulo referissem o mesmo crculo.
4. Faa a verificao da alnea anterior.
5. Crie, na classe Crculo:
a) um mtodo booleano que permite verificar a igualdade
entre crculos. Atenda a que dois crculos so iguais se
tiverem o mesmo valor de raio e as coordenadas do centro
forem as mesmas.
b) um mtodo que duplica um crculo.

2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

26

Paradigmas de Programao
Responda s seguintes questes:
1. Qual o tipo de relao semntica entre objectos em que
existe herana. Exemplifique.
2. Qual a palavra reservada em Java para indicar que uma
classe subclasse de outra.
3. Em Java qual a super classe de todas as classes.
4. Como classificaria o tipo de herana em Java (simples ou
mltipla), justifique.
5. Distinga entre sobrecarga e reescrita de mtodos numa linha
hierrquica de classes
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

27

Paradigmas de Programao
6. Qual a palavra chave para que um construtor da subclasse
possa invocar um construtor da superclasse?
7. Indique os nveis de acesso dos membros da superclasse a
que a subclasse acede.
8. Se uma subclasse herda todos os atributos e mtodos da
superclasse indique em que situao se obriga a utilizar
super.membro_superclasse
9. Diga o que entende por polimorfismo.
10. O que uma classe abstracta?
11. Para que uma subclasse, de uma superclasse abstracta, no
seja tambm abstracta tem que ...............
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

28

Paradigmas de Programao
Considere a classe Animal e as subclasses Cao e Pato
conforme se indica abaixo
public class Animal {
private String nome;
private int n_patas;
//Construtores
public Animal(){... ...
public Animal(String nome, int patas) {...
//Selectores
public String getNome() {...
public int getN_patas() {...
//Modificadores
public void setNome(String nome) {...
public void setN_patas(int n_patas) {...
public String toString() {...
}
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

29

Paradigmas de Programao
public class Cao extends Animal{

public class Pato extends Animal{

private String raca;

private String cor;

public Cao() {... ...


public Cao(String nome,int patas,String raa) {...

public Pato() {... ...

public String getRaca() {... ...

public String getCor() {... ...

public void setRaca(String raca) {... ...

public void setCor(String cor) {... ...

public String toString() {... ...

public String toString() {... ...

public String falar() {... ....

public String falar() {.... ...

public Pato(String nome,int patas,String cor) {...

Se no mtodo main colocasse as seguintes instrues:


teria erro de compilao. Justifique e indique como
podia resolver este problema.
2009/2010

Animal c = new Cao();


System.out.println(c.falar() );

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

30

Paradigmas de Programao
Exerccio
1. Construir a superclasse Animal com os atributos nome, n de patas
Os mtodos a considerar so construtores, selectores, modificadores
e toString().
2. Desenvolver tambm as subclasses Co e Pato. Co, alm dos
atributos de Animal caracteriza-se pela raa e Pato pela cor. Estas
subclasses devem implementar o mtodo falar() que devolve um
string representativo dos sons emitidos por cada animal (cao faz
Au..Au e pato faz Qu..Qu)
3. A implementao das classes anteriores sugere que a classe
Animal podia ser abstracta. Faa as alteraes necessrias para
considerar Animal como abstracta.
4. Crie a classe Zoo que uma coleco de animais. Desenvolva
mtodos que liste como fala cada um dos animais do zoo, que conta
o nmeros de patos do zoo e liste as raas(sem repetio) dos ces
do zoo.
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

31

Paradigmas de Programao
Exerccio
1.

Analise o diagrama de classes apresentado no prximo quadro.

2.

Crie o cdigo das classes envolvidas de modo que possa executar o


seguinte mtodo main():

package supermercado;
import java.util.ArrayList;
public class Teste {
public static void main (String [] args) {
Cliente c1 = new Cliente("Joao");
c1.compra(new ItemPrecoPeso("Bananas",1.5, 1));
c1.compra(new ItemPrecoPeso("Queijo",1.1, 10));
c1.compra( new ItemPrecoUnidades("Ananas",2, 2.5));
c1.compra( new ItemPrecoUnico("Livro", 10) );
ArrayList compras = c1.getCompras();
for (int i=0; i<compras.size(); ++i)
System.out.println(compras.get(i)); }
}
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

32

Paradigmas de Programao
Exemplo consolidao da matria

2009/2010

(exerccio de exame)

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

33

Paradigmas de Programao
package supermercado;
import java.util.ArrayList;
public class Cliente {
private String nome;
private ArrayList compras;
public Cliente(String n) {
nome = n;
compras = new ArrayList();
}
public void compra(ItemDeCompra c) {
compras.add(c);
}
public ArrayList getCompras() {
return compras;
}
}

2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

34

Paradigmas de Programao
package supermercado;
public abstract class ItemDeCompra {
private static int proxNumId = 0;
private int numId;
private String nome;
public ItemDeCompra() {
numId = proxNumId++;
}
public ItemDeCompra( String n ) {
this();
nome = n;
}
public String toString() {
return "\t" + nome;
}
public abstract double custo();
}
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

35

Paradigmas de Programao
package supermercado;
public class ItemPrecoUnidades extends ItemDeCompra {
private int quantidade;
private double precoUnitario;
public ItemPrecoUnidades(String nome, int q, double pU){
super(nome);
quantidade = q;
precoUnitario = pU;
}
public double custo() {
return quantidade * precoUnitario;
}
public String toString() {
return super.toString() + "\t\t" + quantidade + "
Unidades @ " + "\t" + precoUnitario + " Euros\t\t" +
custo() + " Euros.";
}
}
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

36

Paradigmas de Programao
package supermercado;
public class ItemPrecoPeso extends ItemDeCompra {
private double peso;
private double precoUnidadePeso;
public ItemPrecoPeso(String nome, double p, double pUP) {
super(nome);
peso = p;
precoUnidadePeso = pUP;
}
public double custo() {
return peso * precoUnidadePeso;
}
public String toString() {
return super.toString()+"\t\t"+peso+" Kg @ "+"\t" +
precoUnidadePeso + " Euros\t\t" + custo() + " Euros.";
}
}
2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

37

Paradigmas de Programao
package supermercado;
public class ItemPrecoUnico extends ItemDeCompra {
private double precoUnico;
public ItemPrecoUnico(String nome, double pU) {
super(nome);
precoUnico = pU;
}
public double custo() {
return precoUnico;
}
public String toString() {
return super.toString() + "\t\t\t\t\t\t\t" +
custo() + " Euros.";
}
}

2009/2010

Tpicos das aulas Terico Prticas


Helena Leito & Dulce Mota

38

S-ar putea să vă placă și