Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto...

Post on 09-Nov-2018

218 views 0 download

Transcript of Herança e Polimorfismo - ic.uff.brleomurta/courses/poo/aula8.pdf · Encapsulamento • O objeto...

HerançaePolimorfismo

LeonardoGrestaPaulinoMurtaleomurta@ic.uff.br

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

Leonardo Murta Herança e Polimorfismo 2

PrincípiosdoParadigmaOO

Abstração Encapsulamento

Modularidade Hierarquia

Leonardo Murta Herança e Polimorfismo 3

Abstração•  Arepresentaçãocomputacionaldoobjetorealdeveseconcentrar

nascaracterísHcasquesãorelevantesparaoproblema

Leonardo Murta Herança e Polimorfismo 4

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

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

problemaemmãos•  QuaisseriamosatributosemétodosparaoobjetoCarroemcada

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

Leonardo Murta Herança e Polimorfismo 5

Encapsulamento•  Oobjetodeveesconderseusdadoseosdetalhesdesua

implementação

Leonardo Murta Herança e Polimorfismo 6

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

Leonardo Murta Herança e Polimorfismo 7

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

Encapsulamento

Encapsulamento

Chamadas de Métodos

Métodos Públicos

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

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

Leonardo Murta Herança e Polimorfismo 9

Modularidade•  Umsistemadeveserdecompostoemumconjuntoaltamente

coesoefracamenteacopladodeobjetos

Leonardo Murta Herança e Polimorfismo 10

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

Leonardo Murta Herança e Polimorfismo 11

•  UmprogramaOOéumconjuntodeobjetosquecolaboramentresiparaasoluçãodeumproblema

•  Objetoscolaboramatravésdechamadasdemétodosunsdosoutros

Motorista

Carro Freia

Modularidade

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

Hierarquia•  Osobjetosdevemserorganizadosnosistemadeformahierárquica

Leonardo Murta Herança e Polimorfismo 13

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

Hierarquia•  Objetosherdamatributosemétodosdosseusancestraisna

hierarquia

Leonardo Murta Herança e Polimorfismo 14

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

Leonardo Murta Herança e Polimorfismo 15

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

– Aclasseherdeiraéchamadadesubclasse– Asubclassepodeherdarosmétodoseatributosdesuassuperclasses

– Asubclassepodedefinirnovosatributosemétodosespecíficos

Herança

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

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

Leonardo Murta Herança e Polimorfismo 16

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; ...

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

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?

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?

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

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

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

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

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

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

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

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

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

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

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

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

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

Leonardo Murta Herança e Polimorfismo 31

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 } }

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

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

HerançaePolimorfismo

LeonardoGrestaPaulinoMurtaleomurta@ic.uff.br