Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf ·...

18
Programação Orientada a Objetos (DPADF 0063) Aula 5 Herança Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno

Transcript of Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf ·...

Page 1: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

Programação Orientada a Objetos

(DPADF 0063)Aula 5 – Herança

Universidade Federal de Santa Maria

Colégio Agrícola de Frederico Westphalen

Curso Superior de Tecnologia em Sistemas para Internet

Prof. Bruno B. Boniati – www.cafw.ufsm.br/~bruno

Page 2: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

Reutilização de software

Page 3: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

Herança

• Mecanismo de reutilização de software onde

uma nova classe é criada absorvendo

membros de uma classe existente e

aprimorada com capacidades novas ou

modificadas;

• Permite que elementos mais específicos

incorporem a estrutura e o comportamento de

elementos mais genéricos;

Page 4: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

Herança (cont.)

• Frequentemente um objeto de uma determinada

classe também é um objeto de outra classe.

• Este tipo de relação normalmente é hierarquizada ...

Forma

Forma2D Forma3D

Circulo Quadrado Triangulo Esfera Cubo Pirâmide

Page 5: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

MembroDaComunidadeAcademica

Empregado

Docente

Administrador Professor

TécnicoAdministrativo

Aluno

AlunoDeGraduacao AlunoDePosGraduacao

Ex-Aluno

Herança (cont.)

• Humanos naturalmente pensam dessa forma ...

Page 6: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

• Quando especificamos uma classe, ao invés

de começar do zero, declarando atributos e

métodos que talvez já existam em outra classe

podemos designar a nova classe a herdar o

comportamento e as ações de uma classe já

existente;

• A classe existente é chamada de superclasse

e a nova classe de subclasse.

Superclasses x Subclasses

Page 7: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

• Superclasse tendem a ser mais gerais

enquanto que subclasses, mais

específicas;

• Toda subclasse pode vir a tornar-se uma

superclasse para futuras subclasses;

• A superclasse direta é aquela a partir do

qual a subclasse herda explicitamente,

uma superclasse indireta é qualquer

superclasse acima da classe direta na

hierarquia de classes.

Superclasses x Subclasses (cont.)

Forma

Forma3D

Esfera

Superclasse diretade Forma3D

e superclasse indiretade Esfera

Subclasse de Forma

e superclasse diretade Forma3D

Subclasse de Esfera

Page 8: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

Herança em em Java ...class Forma3D extends Forma{

}

• A palavra reservada extends indica que a classe a ser especificada

herda de uma outra classe;

• Na linguagem Java a hierarquia de classes inicia com a classe Object

(do pacote java.lang), sendo assim toda classe Java é descendente

em algum grau da classe Object.

• Uma sub-classe tem acesso aos atributos e métodos definidos com visibilidade public e protected, mas não private.

Page 9: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

Herança em Java ... (cont.)class ItemCompra extends java.lang.Object {

private float preco;

private String descricao;

public ItemCompra(float p, String descr) {...}

public void setPreco(float novoPreco) {...}

public float getPreco() {...}

public void setDescricao(String d) {...}

public String getDescricao() {...}

}

Neste caso

a herança é

opcional

(pode ficar

implícita)

class Filme extends ItemCompra {

private int midia;

public Filme(String descr, int midia) {...}

public String getDescricaoMidia() {...}

public static boolean midiaEhValida (int m) {...}

public int getMidia() {...}

}

ItemCompra

- preco- descricao

+ setPreco()+ getPreco()+ setDescricao()+ getDescricao()

Filme

- midia

+ getDescricaoMidia()+ midiaEhValida()+ getMidia()

Page 10: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

Herança x Composição“é um” x “contém um”

• A composição é uma outra forma de reaproveitarmos

classes (também é conhecido por delegação);

• Consiste em criar novas classes incluindo nelas

atributos da classe que se quer reaproveitar.

• Para que os métodos da classe base possam ser

executados, escrevemos métodos correspondentes na

classe nova que chama os da classe base, delegando

a execução dos métodos ...

Page 11: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

Herança x Composição (cont.)

• A classe DataHora contém na sua relação de atributos

uma instância de uma classe Hora e outra instância da

classe Data.

class DataHora {

private Data dta;

private Hora hra;

public DataHora() {

dta = new Data();

hra = new Hora();

}

//Demais métodos e atributos

}

Page 12: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

Sobrescrevendo Métodos

• Modificação de um método da superclasse na subclasse;

• Toda vez que um método que já existe na superclasse é

redeclarado na subclasse ele oculta o método da

superclasse;

Qual getBarulho() será executado?

Page 13: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

Referência super

• Permite às subclasses acessarem métodos das superclasses;

• A palavra reservada super é similar a this, porém atua como

referência para o objeto corrente interpretado como uma instância da

superclasse;

• Construtores da superclasse são chamados simplesmente pela palavra super (seguida de eventuais argumentos), demais métodos

da superclasse são chamados pela palavra super seguida do sinal

de ponto e o nome do método.

▫ Construtores de superclasses só podem ser chamados a partir de

construtores de subclasses, e devem obrigatoriamente ser a primeira linha;

▫ Somente métodos da superclasse imediata podem ser acessados.

Page 14: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

Referência super (cont.)

class Animal {

private String nome;

public void fazerBarulho() {

System.out.println(“Este é o barulho do animal ...”);

}

//Demais métodos e atributos

}

class Gato extends Animal{

private int numFiosDeBigode;

public void fazerBarulho() {

super.fazerBarulho();

System.out.println(“Este é o barulho do gato...”);

}

//Demais métodos e atributos

}

Page 15: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

Métodos construtores nas subclasses

• O construtor de uma subclasse sempre chama o construtor de sua

superclasse, mesmo que a chamada não seja explícita.

• Se a chamada não for explícita (através da palavra-chave super) o

construtor da subclasse tentará chamar o construtor vazio (sem

argumentos) da superclasse – e se ele não estiver definido, ocorrerá

um erro de compilação;

• Se uma classe não possui um construtor vazio (sem argumentos) e

possui um construtor com argumentos, as classes herdeiras deverão

obrigatoriamente chamar o construtor com argumentos da classe

ancestral (este é um tipo de erro que geralmente causa muita

confusão).

Page 16: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

• Situação onde uma subclasse possui mais de uma superclasse;

• A linguagem Java não oferece suporte para herança múltipla;

▫ A alternativa para utilizar os benefícios da herança múltipla em Java é a

utilização de interfaces;

Herança Múltipla

VeículoAnfíbio

Barco

interface Carro {

public void puxarFreioDeMao();

}

interface Barco {

public void jogarAncora();

}

class VeiculoAnfibio implements Carro, Barco {

public void VeiculoAnfibio(Carro carro, Barco barco )

{ ... }

public void puxarFreioDeMao() { ... }

public void jogarAncora() { ... }

}

Carro

Page 17: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

Exercícios para fixação

Page 18: Programação Orientada a Objetos (DPADF 0063)bruno/disciplinas/poo/slides/aula5_heranca.pdf · Herança em em Java ... class Forma3D extends Forma{} •A palavra reservada extendsindica

Organizando a bagunça

• Considere as pessoas presentes em um ambiente

universitário ... e desenhe uma possível hierarquia de

classes para representá-la

▫ Alunos de graduação;

▫ Alunos de pós-graduação;

▫ Bolsistas;

▫ Técnicos administrativos;

▫ Coordenadores de curso;

▫ Docentes;

▫ Pesquisadores;