herança e polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · encapsulamento • o objeto...

35
Herança e Polimorfismo Leonardo Gresta Paulino Murta [email protected]ff.br

Upload: trandung

Post on 09-Nov-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

HerançaePolimorfismo

[email protected]

Page 2: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Auladehoje•  PrincípiosdoparadigmaOO•  Herança•  Polimorfismo•  Interfaces•  ClassesAbstratas

Leonardo Murta Herança e Polimorfismo 2

Page 3: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

PrincípiosdoParadigmaOO

Abstração Encapsulamento

Modularidade Hierarquia

Leonardo Murta Herança e Polimorfismo 3

Page 4: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Abstração•  Arepresentaçãocomputacionaldoobjetorealdeveseconcentrar

nascaracterísHcasquesãorelevantesparaoproblema

Leonardo Murta Herança e Polimorfismo 4

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

Page 5: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Abstração•  Sãocriadossomenteosatributosemétodosnecessáriosparao

problemaemmãos•  QuaisseriamosatributosemétodosparaoobjetoCarroemcada

umadassituaçõesseguintes?–  Sistemadeumalocadoradecarros–  Sistemadeumarevendedoradecarros–  Sistemadeumaoficinamecânica–  SistemadoDETRAN

Leonardo Murta Herança e Polimorfismo 5

Page 6: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Encapsulamento•  Oobjetodeveesconderseusdadoseosdetalhesdesua

implementação

Leonardo Murta Herança e Polimorfismo 6

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

Page 7: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Leonardo Murta Herança e Polimorfismo 7

•  AtributoseMétodos–  Osmétodosformamuma“cerca”emtornodosatributos–  Osatributosnãodevemsermanipuladosdiretamente–  Osatributossomentedevemseralteradosouconsultadosatravésdosmétodosdoobjeto

Encapsulamento

Page 8: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Encapsulamento

Chamadas de Métodos

Métodos Públicos

Métodos e Atributos privados Leonardo Murta Herança e Polimorfismo 8

Page 9: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Encapsulamento•  EmumaclasseQuadrado,quaismétodosdevemserpúblicosequaisdevemserprivados?– Transladar– Ampliar– Moverponto– Girar– Adicionarponto– Calcularárea

Leonardo Murta Herança e Polimorfismo 9

Page 10: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Modularidade•  Umsistemadeveserdecompostoemumconjuntoaltamente

coesoefracamenteacopladodeobjetos

Leonardo Murta Herança e Polimorfismo 10

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

Page 11: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Leonardo Murta Herança e Polimorfismo 11

•  UmprogramaOOéumconjuntodeobjetosquecolaboramentresiparaasoluçãodeumproblema

•  Objetoscolaboramatravésdechamadasdemétodosunsdosoutros

Motorista

Carro Freia

Modularidade

Page 12: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Modularidade•  Emumsistemaacadêmico,háconceitosaluno,professor,disciplina,turmaeinscrição.Ondecolocarcadaumdosmétodosaseguir:– Exibiçãodohistóricodoaluno– Cálculodamédiadoalunoemumaturma– Obtençãodohoráriodeumaaula– Descriçãodaementadeumadisiplina– CálculodoCRdeumaluno

Leonardo Murta Herança e Polimorfismo 12

Page 13: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Hierarquia•  Osobjetosdevemserorganizadosnosistemadeformahierárquica

Leonardo Murta Herança e Polimorfismo 13

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

Page 14: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Hierarquia•  Objetosherdamatributosemétodosdosseusancestraisna

hierarquia

Leonardo Murta Herança e Polimorfismo 14

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

Page 15: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Leonardo Murta Herança e Polimorfismo 15

•  Paraviabilizarahierarquiaentreobjetos,asclassessãoorganizadasemestruturashierárquicas– Aclassequeforneceuoselementosherdadoséchamadadesuperclasse

– Aclasseherdeiraéchamadadesubclasse– Asubclassepodeherdarosmétodoseatributosdesuassuperclasses

– Asubclassepodedefinirnovosatributosemétodosespecíficos

Herança

Page 16: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Polimorfismo•  Umasubclassepoderedefinir(sobrescrever)ummétodoherdado– Estemecanismoéchamadodepolimorfismo– Opolimorfismoserealizaatravésdarecodificaçãodeumoumaismétodosherdadosporumasubclasse

– Emtempodeexecução,oJavasaberáqualimplementaçãodeveserusada

Leonardo Murta Herança e Polimorfismo 16

Page 17: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Leonardo Murta Herança e Polimorfismo 17

Veículo

Bicicleta Automóvel Navio Avião

Furgão Carro Caminhão Trator

Exemplodeherança

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

Page 18: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Exemplodeherança(relembrandoaclasseCarro)

public class Carro { private int velocidade; public Carro(int velocidadeInicial) { velocidade = velocidadeInicial; } public void acelera() { velocidade++; } public void freia() { velocidade--; } }

Leonardo Murta Herança e Polimorfismo 18

Page 19: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Exemplodeherança(criandoumcarrointeligente)

•  Declaração: public class CarroInteligente extends Carro { public CarroInteligente(int velocidadeInicial) { super(velocidadeInicial); } public void estaciona() { // código mágico para estacionar sozinho } }

•  Uso: CarroInteligente tiguan = new CarroInteligente(10); for (int i = 10; i > 0; i--) { tiguan.freia(); } tiguan.estaciona();

Leonardo Murta Herança e Polimorfismo 19

De onde veio isso?

Page 20: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Exemplodepolimorfismo(criandoumcarrodecorrida)

•  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();

Leonardo Murta Herança e Polimorfismo 20

Qual a velocidade agora?

Page 21: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

CompaHbilidadedeHpos•  Qualquersubclasseécompaavelcomasuasuperclasse

–  Contudo,areciprocanãoéverdadeira

Leonardo Murta Herança e Polimorfismo 21

Carro

CarroInteligente

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

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

Page 22: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

HerançaemJava•  Umaclassesópodeherdardeumaoutraclasse(herançasimples)

•  Casonãosejadeclaradaherança,aclasseherdadaclasseObject–  EladefineométodotoString(),queretornaarepresentaçãoemStringdoobjeto

– QualquersubclassepodesobrescreverométodotoString()pararetornaroqueeladeseja.

•  VejaosdemaismétodosdaclasseObjectemhcps://docs.oracle.com/javase/8/docs/api/java/lang/Object.html

Leonardo Murta Herança e Polimorfismo 22

Page 23: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Exercíciodeherança•  Emumsistemadeloja,há3Hposdeusuário:gerente,funcionárioecliente.Todousuáriotemnomeesenha.Oclientepossui,alémdonomeesenha,outrosdadoscadastrais.Ofuncionáriopossuimétodosrelacionadosavendadeprodutos.Ogerentepodefazertudoqueofuncionáriopodeetambémfechamentodocaixa.Comoéahierarquiadeherançadessesistemanoqueserefereacontroledeusuários?

Leonardo Murta Herança e Polimorfismo 23

Page 24: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Interfaces•  Tipoespecialdeclasse,quenãotemimplementação

–  Umainterfacedefineumprotocolo–  Classespodemimplementarumaoumaisinterfaces

•  Umainterfaceéumcontratoassinadoporumaclasse–  Ainterfacedefineasresponsabilidadesdaclasse–  Asresponsabilidadessãomapeadasemmétodos–  Aclassequeimplementaainterfaceimplementaosmétodos–  Ainterfacecontémsomenteassinaturademétodoseconstantes

Leonardo Murta Herança e Polimorfismo 24

Page 25: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Interfaces•  Adefiniçãodeumainterfaceésimilaradeumaclasse

–  UHlizamosapalavrareservadainterface–  Apalavrareservadadeveserseguidadonomedainterface–  Umainterfacepodeherdardeoutrasinterfaces(extends)–  Ainterfacepossuiapenasmétodossemimplementação(abstratos)econstantes

public interface Taxavel {

int ANO_INICIO = 1996; double calculaTaxa ();

}

Leonardo Murta Herança e Polimorfismo 25

Fica implícito que é public, static e final

Page 26: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Exemplopublic class CarroImportado extends Carro implements Taxavel

{

<atributos da CarroImportado>

<métodos da CarroImportado>

<métodos implementados da interface Taxavel> }

Leonardo Murta Herança e Polimorfismo 26

Page 27: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Programaçãoorientadaainterfaces

Leonardo Murta Herança e Polimorfismo 27

public interface Stack { public Object pop(); public void push(Object o); public int size(); }

Implementação

Uso

Page 28: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Programaçãoorientadaainterfaces

Leonardo Murta Herança e Polimorfismo 28

public interface 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

implementação

Page 29: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Programaçãoorientadaainterfaces

Leonardo Murta Herança e Polimorfismo 29

public interface Stack { public Object pop(); public void push(Object o); public int size(); }

Uso

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

Desconhece o uso

Page 30: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

ClassesAbstratas•  Seumaclassepossuialgummétodosemimplementação(abstrato),omodificadorabstractdeveprecedersuadeclaração

abstract class Carro {

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

<métodos abstratos da classe Carro>

}

Leonardo Murta Herança e Polimorfismo 30

Page 31: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

ClassesAbstratas•  Nãopodemserusadasparainstanciarobjetos•  Devemservistascomotemplatesparasubclassesqueirãodarumaimplementaçãoaosmétodosabstratos

•  Exemplo:– ClasseabstrataPagamentotemummétodoabstratopaga(...)

– ClassesconcretasPagamentoVisa,PagamentoCheque,PagamentoDinheirodãocomportamentoaométodopaga(...)

Leonardo Murta Herança e Polimorfismo 31

Page 32: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

ClassesAbstratas

Leonardo Murta Herança e Polimorfismo 32

public abstract class Pagamento { ... public abstract void paga(...); }

public class PagamentoVisa extends Pagamento { ... public void paga(...) { // código de pagamento com cartão Visa } }

Page 33: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Exercício•  RefazeroexercíciodaAgenda,quelistaoscontatosordenadospornomeeporidade– FazerumaclasseabstrataOrdenadorcomalógicadeordenação,porémchamandoummétodoabstratocompara(Pessoa,Pessoa)

– Criarduasclassesextras,OrdenadorNomeeOrdenadorIdade,queherdamdeOrdenadoreimplementamométodoabstratocompara(Pessoa,Pessoa)

–  Instanciaroordenadorapropriadoparalistaroscontatospornomeeporidade

Leonardo Murta Herança e Polimorfismo 33

Page 34: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

Exercício•  FaçaumaclasseAnimalcom

ummétodoabstrato“fala”•  FaçaasclassesHomem,Cãoe

Gato,herdandodeanimal,redefinindoométodo“fala”pararetornar“Oi”,“Auau”e“Miau”,respecHvamente

•  Crieumvetorde10AnimaiseinstancieHomens,CãeseGatosnessevetor

•  Façaumloopportodososanimaisdovetor,pedindoparaelesfalarem

Leonardo Murta Herança e Polimorfismo 34

Animal

Homem Cão Gato

Page 35: Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto deve esconder seus dados e os detalhes de sua implementação ... Leonardo Murta

HerançaePolimorfismo

[email protected]