Herança e Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento...
Transcript of Herança e Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento...
![Page 2: Herança e Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/2.jpg)
Auladehoje• PrincípiosdoparadigmaOO• Herança• Polimorfismo• Interfaces• ClassesAbstratas
Leonardo Murta Herança e Polimorfismo 2
![Page 3: Herança e Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/3.jpg)
PrincípiosdoParadigmaOO
Abstração Encapsulamento
Modularidade Hierarquia
Leonardo Murta Herança e Polimorfismo 3
![Page 4: Herança e Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/4.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/5.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/6.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/7.jpg)
Leonardo Murta Herança e Polimorfismo 7
• AtributoseMétodos– Osmétodosformamuma“cerca”emtornodosatributos– Osatributosnãodevemsermanipuladosdiretamente– Osatributossomentedevemseralteradosouconsultadosatravésdosmétodosdoobjeto
Encapsulamento
![Page 8: Herança e Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/8.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/9.jpg)
Encapsulamento• EmumaclasseQuadrado,quaismétodosdevemserpúblicosequaisdevemserprivados?– Transladar– Ampliar– Moverponto– Girar– Adicionarponto– Calcularárea
Leonardo Murta Herança e Polimorfismo 9
![Page 10: Herança e Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/10.jpg)
Modularidade• Umsistemadeveserdecompostoemumconjuntoaltamente
coesoefracamenteacopladodeobjetos
Leonardo Murta Herança e Polimorfismo 10
Fonte: livro “Object-Oriented Analysis and Design with Applications”
![Page 11: Herança e Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/11.jpg)
Leonardo Murta Herança e Polimorfismo 11
• UmprogramaOOéumconjuntodeobjetosquecolaboramentresiparaasoluçãodeumproblema
• Objetoscolaboramatravésdechamadasdemétodosunsdosoutros
Motorista
Carro Freia
Modularidade
![Page 12: Herança e Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/12.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/13.jpg)
Hierarquia• Osobjetosdevemserorganizadosnosistemadeformahierárquica
Leonardo Murta Herança e Polimorfismo 13
Fonte: livro “Object-Oriented Analysis and Design with Applications”
![Page 14: Herança e Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/14.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/15.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/16.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/17.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/18.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/19.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/20.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/21.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/22.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/23.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/24.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/25.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/26.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/27.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/28.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/29.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/30.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/31.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/32.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/33.jpg)
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 Polimorfismoleomurta/courses/2016.1/poo/aula8.pdf · Encapsulamento Encapsulamento Chamadas de Métodos Métodos Públicos Métodos e Atributos privados Leonardo Murta](https://reader035.fdocument.pub/reader035/viewer/2022071020/5fd4984623d1431542781453/html5/thumbnails/34.jpg)
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