programación orientada a sesión 05.1: herencia y ... · herança em java herança e polimorfismo...

35
Programación Orientada a Objetos Prof. Herminio Paucar Prof. Edson Huillca Sesión 05.1: Herencia y Polimorfismo Herança e Polimorfismo

Upload: others

Post on 03-Jun-2020

25 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Programación Orientada a Objetos

Prof. Herminio PaucarProf. Edson Huillca

Sesión 05.1: Herencia y PolimorfismoHerança e Polimorfismo

Page 2: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Aula de hoje

Herança e Polimorfismo 2

• Princípios do paradigma OO

• Herança

• Polimorfismo

• Interfaces

• Classes Abstratas

Page 3: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Princípios do Paradigma OO

Abstração Encapsulamento

Modularidade Hierarquia

Herança e Polimorfismo 3

Page 4: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Abstração

• A representação computacional do objeto real deve se concentrar

nas características que são relevantes para o problema

Fonte: livro “Object-Oriented Analysis and Design with Applications”

Herança e Polimorfismo 4

Page 5: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Abstração

Herança e Polimorfismo 5

• São criados somente os atributos e métodos necessários para o

problema em mãos

• Quais seriam os atributos e métodos para o objeto Carro em cada uma das situações seguintes?– Sistema de uma locadora de carros

– Sistema de uma revendedora de carros

– Sistema de uma oficina mecânica

– Sistema do DETRAN

Page 6: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Encapsulamento

• O objeto deve esconder seus dados e os detalhes de sua

implementação

Fonte: livro “Object-Oriented Analysis and Design with Applications”

Herança e Polimorfismo 6

Page 7: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

• Atributos e Métodos– Os métodos formam uma “cerca” em torno dos atributos

– Os atributos não devem ser manipulados diretamente

– Os atributos somente devem ser alterados ou consultados através dos métodos do objeto

Encapsulamento

Herança e Polimorfismo 7

Page 8: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Encapsulamento

Chamadas de Métodos

Métodos Públicos

Métodos e Atributos privadosHerança e Polimorfismo 8

Page 9: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Encapsulamento

Herança e Polimorfismo 9

• Em uma classe Quadrado, quais métodos devem ser

públicos e quais devem ser privados?

– Transladar

– Ampliar

– Mover ponto

– Girar

– Adicionar ponto

– Calcular área

Page 10: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Modularidade

• Um sistema deve ser decomposto em um conjunto altamente

coeso e fracamente acoplado de objetos

Fonte: livro “Object-Oriented Analysis and Design with Applications”

Herança e Polimorfismo 10

Page 11: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

• Um programa OO é um conjunto de objetos que colaboram entre si para a solução de um problema

• Objetos colaboram através de chamadas de métodos uns dos outros

Motorista

FreiaCarro

Herança e Polimorfismo 11

Modularidade

Page 12: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Modularidade

Herança e Polimorfismo 12

• Em um sistema acadêmico, há conceitos aluno,

professor, disciplina, turma e inscrição. Onde colocar

cada um dos métodos a seguir:

– Exibição do histórico do aluno

– Cálculo da média do aluno em uma turma

– Obtenção do horário de uma aula

– Descrição da ementa de uma disciplina

– Cálculo do CR de um aluno

Page 13: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Hierarquia

• Os objetos devem ser organizados no sistema de forma hierárquica

Fonte: livro “Object-Oriented Analysis and Design with Applications”

Herança e Polimorfismo 13

Page 14: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Hierarquia

• Objetos herdam atributos e métodos dos seus ancestrais na

hierarquia

Fonte: livro “Object-Oriented Analysis and Design with Applications”

Herança e Polimorfismo 14

Page 15: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

• Para viabilizar a hierarquia entre objetos, as classes são organizadas em estruturas hierárquicas– A classe que forneceu os elementos herdados é chamada

de superclasse

– A classe herdeira é chamada de subclasse

– A subclasse pode herdar os métodos e atributos de suas superclasses

– A subclasse pode definir novos atributos e métodos

específicos

Herança e Polimorfismo 15

Herança

Page 16: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Polimorfismo

Herança e Polimorfismo 16

• Uma subclasse pode redefinir (sobrescrever) um

método herdado

– Este mecanismo é chamado de polimorfismo

– O polimorfismo se realiza através da recodificação de

um ou mais métodos herdados por uma subclasse

– Em tempo de execução, o Java saberá qual

implementação deve ser usada

Page 17: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Veículo

Exemplo de herança

Bicicleta Automóvel Navio Avião

Furgão Carro Caminhão Trator

Teste da Leitura: “subclasse é um superclasse” Ex.: Carro é um Automóvel; Trator é um Veículo; ...

Herança e Polimorfismo 17

Page 18: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Exemplo de herança (relembrando a classe Carro)

Herança e Polimorfismo 18

Page 19: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Exemplo de herança (criando um carro inteligente)

• Declaração:

• Uso:

De onde veio isso?

Herança e Polimorfismo 19

Page 20: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Exemplo de polimorfismo (criando um carro de corrida)

• Declaração:public class CarroCorrida extends Carro {

public CarroCorrida(int velocidadeInicial) {

super(velocidadeInicial);}public void acelera(){ velocidade+=5;}

}

• Uso:CarroCorrida f1 = new CarroCorrida(10);

f1.acelera();

Qual a velocidade agora?

Herança e Polimorfismo 20

Page 21: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Compatibilidade de tipos

• Qualquer subclasse é compativel com a sua superclasse– Contudo, a reciproca não é verdadeira

Carro

CarroInteligente CarroInteligente c = new Carro(20);c.acelera();

c.freia();

c.estaciona();

Herança e Polimorfismo 21

Carro c = new CarroInteligente(20);

✓ c.acelera(); c.freia();

Page 22: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Herança em Java

Herança e Polimorfismo 22

• Uma classe só pode herdar de uma outra classe (herança simples)

• Caso não seja declarada herança, a classe hereda da classe Object– Ela define o método toString(), que retorna a

representação em String do objeto– Qualquer subclasse pode sobrescrever o método toString()

para retornar o que ela deseja.

• Veja os demais métodos da classe Object em https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html

Page 23: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Exercício de herança

Herança e Polimorfismo 23

• Em um sistema de loja, há 3 tipos de usuário: gerente, funcionário e cliente. Todo usuário tem nome e senha. O cliente possui, além do nome e senha, outros dados cadastrais. O funcionário possui métodos relacionados a venda de produtos. O gerente pode fazer tudo que o funcionário pode e também fechamento do caixa. Como é a hierarquia de herança desse sistema no que se refere a controle de usuários?

Page 24: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Interfaces

Herança e Polimorfismo 24

• Tipo especial de classe, que não tem implementação– Uma interface define um protocolo– Classes podem implementar uma ou mais interfaces

• Uma interface é um contrato assinado por uma classe– A interface define as responsabilidades da classe

– As responsabilidades são mapeadas em métodos

– A classe que implementa a interface implementa os métodos

– A interface contém somente assinatura de métodos e

constantes

Page 25: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Interfaces• A definição de uma interface é similar a de uma classe

– Utilizamos a palavra reservada interface– A palavra reservada deve ser seguida do nome da interface

– Uma interface pode herdar de outras interfaces (extends)

– A interface possui apenas métodos sem implementação (abstratos) e constantes

public interface Taxavel{

int ANO_INICIO = 1996;double calculaTaxa ();

}Fica implícito que épublic, static e final

Herança e Polimorfismo 25

Page 26: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Exemplo

public class CarroImportado extends Carro implements Taxavel

{

<atributos da CarroImportado>

<métodos da CarroImportado>

<métodos implementados da interface Taxavel>}

Herança e Polimorfismo 26

Page 27: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Programação orientada a interfaces

publicinterface Stack { publicObject pop();

public void push(Object o); public int size();

}

Implementação

Uso

Herança e Polimorfismo 27

Page 28: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Programação orientada a interfaces

publicinterface Stack { public Object pop();

public void push(Object o); public int size();

}

Implementação

adicionaPedido(Stack s) { Pedido p = new Pedido(...); s.push(p);} Desconhece a

Herança e Polimorfismo 28

implementação

Page 29: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Programação orientada a interfaces

public interface Stack { public Object pop();

public void push(Object o); public int size();

}

Uso

publicclass MyStack implements Stack { public void push(Object o) {...

Desconhece o uso

Herança e Polimorfismo 29

Page 30: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Classes Abstratas• Se uma classe possui algum método sem

implementação (abstrato), o modificador abstract deve preceder sua declaração

Herança e Polimorfismo 30

abstract class Carro{

<atributos da classe Carro><métodos comuns da classe Carro>

<métodos abstratos da classe Carro>

}

Page 31: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Classes Abstratas

Herança e Polimorfismo 31

• Não podem ser usadas para instanciar objetos

• Devem ser vistas como templates para subclasses que irão dar uma implementação aos métodos abstratos

• Exemplo:

– Classe abstrata Pagamento tem um método abstrato

paga(...)

– Classes concretas PagamentoVisa, PagamentoCheque, PagamentoDinheiro dão comportamento ao método paga(...)

Page 32: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Classes Abstratas

public abstract class Pagamento {...

public abstract void paga(...);

}

Herança e Polimorfismo 32

publicclass PagamentoVisa extends Pagamento {...

public void paga(...) {

// código de pagamento com cartão Visa

}

}

Page 33: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Exercício

Herança e Polimorfismo 33

• Refazer o exercício da Agenda, que lista os contatos ordenados por nome e por idade– Fazer uma classe abstrata Ordenador com a lógica de ordenação,

porém chamando um método abstrato compara(Pessoa, Pessoa)

– Criar duas classes extras, OrdenadorNome e OrdenadorIdade, que herdam de Ordenador e implementam o método abstrato compara(Pessoa, Pessoa)

– Instanciar o ordenador apropriado para listar os contatos

por nome e por idade

Page 34: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Exercício• Faça uma classe Animal com

um método abstrato “fala”• Faça as classes Homem, Cão e

Gato, herdando de animal, redefinindo o método “fala” para retornar “Oi”, “Au au” e “Miau”, respectivamente

• Crie um vetor de 10 Animais e instancie Homens, Cães e Gatos nesse vetor

• Faça um loop por todos os animais do vetor, pedindo para eles falarem

Animal

Homem Cão Gato

Herança e Polimorfismo 34

Page 35: Programación Orientada a Sesión 05.1: Herencia y ... · Herança em Java Herança e Polimorfismo 22 •Uma classe só pode herdar de uma outra classe (herança simples) •Caso

Bibliografia

Organização de Programas em Java 35

• Prof. Leonardo Gresta Paulino Murta, Programação Orientada a Objetos, UFF, Brasil

• Prof. Anselmo Montenegro Programação Orientada a Objetos, UFF, Brasil

• Java como Programar, Deitel & Deitel, Pearson, Edição: 9ª Ed.

• Use a Cabeça! Java, Kathy Sierra e Bert Bates, Alta Books, 2ª Ed., 2012