Polimorfismo e Ligação Dinâmica. Alcides Pamplona Polimorfismo e Ligação Dinâmica

Documentos relacionados
Programação Java. - Herança e Polimorfismo - Marco Fagundes Marco Fagundes -

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Herança (parte 2) Redefinição de métodos AULA 11

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Classe Abstrata e Interface

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Programação Java (nível intermediário) 4. Polimorfismo

Introdução à Programação. Encapsulamento e Herança

Programação por Objectos. Java

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Programação Orientada a Objetos Classes Abstratas. Sérgio Soares

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Polimorfismo. O que é polimorfismo?

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Programação Java. - Classes, Objetos, Atributos e Métodos - Marco Fagundes Marco Fagundes -

Laboratório de programação II

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

4 Conceito de Herança

Java para Desktop. Programação Orientada à Objetos 2 JSE

Classes e Objetos. Sintaxe de classe em Java

Programação OO em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

Interfaces POO. Prof. Marcio Delamaro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

UNIDADE 5 Aplicação dos Conceitos de Orientação a Objetos

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Computação II Orientação a Objetos

Linguagem de Programação II Implementação

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos

Avançando em Java com Polimorfismo. Prof.: Hugo Barros

Python Orientação a Objetos. Introdução à Programação SI2

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

POO29004 Programação Orientada a Objetos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Fundamentos Básicos da linguagem Java (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

Desenvolvimento Web II

Linguagem de Programação II Implementação

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Linguagens de Programação Aula 12

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Herança e Polimorfismo

Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

Introdução ao Java. Prof. Herbert Rausch Fernandes

Programação Orientada a Objetos SANTOS, Rafael

1. Por que não utilizar a notação de composição da UML para mostrar que um cachorro é composto de altura, peso, cor e data de nascimento?

LÓGICA DE PROGRAMAÇÃO INTRODUÇÃO AO JAVA. Professor Carlos Muniz

Linguagem de Programação III

Interfaces e Classes Abstratas

Orientação a objetos Disciplina: Linguagens de Programação. Prof. Alexandre Cassimiro Andreani

9 Classes Abstractas e Interfaces

Ficha Prática 10. António Nestor Ribeiro, Paulo Azevedo, Mário Martins PPIV (LESI) 2005/06

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Linguagem de Programação III

Desenvolvimento Web TCC Turma A-1

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

Tratamento de Exceções. Java Avançado. Tratamento de Exceções. Conceito de Exceções. Exemplo

Sobrecarga, Sobreposição e Polimorfismo

PCS3111. Laboratório de Programação Orientada a Objetos para Engenharia Elétrica. Aula 6: Polimorfismo

POO29004 Programação Orientada a Objetos

Atributos e Métodos Estáticos

Como exemplo, vamos criar uma subclasse da classe Funcionario, vista nos capítulos anteriores.

Linguagem de Programação III

Interfaces e Classes Internas

Classes Abstratas e Interfaces AULA 12

Programação Orientada a Objetos. Aula 1.9 this e static. Prof. Bruno Moreno

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Aula 9 POO 1 Polimorfismo. Profa. Elaine Faria UFU

Programação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III

POO29004 Programação Orientada a Objetos

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

Programação Orientada a Objetos. SANTOS, Rafael (PLT) e Guia de Estudo SCJP. SIERRA, Kathy e BATES, Bert

Palavras Reservadas da Linguagem Java

extendsé usado para indicar herança em JAVA

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Classes, instâncias e métodos de acesso. prática

Instituto Federal de Educação, Ciência e Tecnologia da Bahia Campus Irecê Disciplina: Linguagem Técnica II Prof o Jonatas Bastos

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

Análise de Programação

Programação por Objectos. Java

Computação II - Java - Teste 1.2 Prof. Adriano Joaquim de Oliveira Cruz 2015/04/27

Fundamentos de programação

Linguagem de Programação. Diagrama de classes

Herança; Sobrescrita, Sobrecarga e Polimorfismo; Classes abstratas e concretas (finais).

Programação Orientada a Objetos

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

LISTA DE EXERCÍCIO 7 Interfaces

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

Transcrição:

Alcides Pamplona Linguagem de Programação CESBD 2010 Alcides Pamplona alcides.pamplona@gmail.com

Tópicos Ligação Dinamica Polimorfismo Verificação Dinâmica de Tipos 2

Introdução A vinculação ou ligação dinâmica permite determinar dinamicamente que método de certo objeto será executado. 3

Ligação Dinâmica Implementação da classe Venda 4

Ligação Dinâmica Implementação da classe VendaPrazo 5

Ligação Dinâmica Uma mensagem só é ligada a um método em tempo de execução ligação dinâmica Na ligação estática, a ligação entre a chamada de um subprograma e sua implementação é estabelecida em tempo de compilação Com a herança, não se sabe exatamente qual o método a ser invocado até que se conheça o tipo real do objeto (tipo dinâmico). Durante a compilação só temos o tipo das referências (tipo estático) 6 Alcides Pamplona Linguagem de Programação CESBD 2010

Ligação Dinâmica Considere o Código 7

Ligação Dinâmica Na execução do código são criados objetos como abaixo: 8

Ligação Dinâmica Observando novamente o código: 9

Ligação Dinâmica 10

Ligação Dinâmica Para isso, deve-se declarar uma referência do tipo da superclasse e criar um objeto da subclasse A ligação dinâmica permite o polimorfismo A chamada do mesmo método pode assumir várias formas, dependendo do objeto criado em tempo de execução 11

Polimorfismo 12

Polimorfismo 13

Polimorfismo 14

Polimorfismo Declarar uma referência da superclasse e instanciar objetos da subclasse Métodos com a mesma assinatura implementações diferentes Por exemplo: A classe conta e poupança possuem o método saque, o qual possui implementações diferentes devido à cobrança da CPMF OBS: A consideração importante é que todo objeto da subclasse (subtipo) é um objeto da superclasse (supertipo) 15

Polimorfismo public class TestaConta{ public static void main (String [ ] args ){ Conta c = new Conta (); c.setnumero("001"); c.setsaldo(100.0); System.out.println(c.sacar(100.0)); } 16 } c = new ContaPoupanca(); c.setnumero("002"); c.setsaldo(200.0); System.out.println(c.sacar(100.0)); Ligação Dinâmica / Polimorfismo

Polimorfismo public class TestaConta { public static void main (String [ ] args ){ Conta [ ] repcontas = new Conta [3]; repcontas [0] = new Conta ( cc1,10.0); repcontas [1] = new Conta ( cc2,20.0); repcontas [2] = new ContaPoupanca( cp1,10.0); repcontas [3] = new ContaPoupanca( cp2,40.0 ); for (int i = 0; i <= 3; i++) System.out.println (repcontas[i].sacar(10.0)); } } 17

Lab01 - Override de Métodos 1. Crie uma classe aplicativo (TestaConta) e defina uma referência do tipo Conta e crie um objeto desse tipo. 2. Chame o método sacar do objeto criado. 3. Faça a referência declarada na questão anterior apontar para um novo objeto do tipo ContaPoupanca. 4. Chame o método sacar do objeto conta poupança e observe o resultado. 18

Verificação Dinâmica de Tipos - instanceof public class TestaConta { public static void main (String [ ] args ){ } ContaCorrente [ ] repcontas = new ContaCorrente [3]; repcontas [0] = repcontas [1] = repcontas [2] = new Conta ( cc1,10.0); new Conta ( cc2,20.0); new ContaPoupanca( cp1,10.0); repcontas [3] = new ContaPoupanca( cp2,40.0 ); for (int i = 0; i <= 3; i++) System.out.println (repcontas[i].render()); } Erro1: Compilação. O método render pertence somente ao subtipo(contapoupanca). Erro2: Execução. Solução: Type Cast Solução: instanceof ((ContaPoupanca)repContas[i]).render() if (repcontas[i] instanceof ContaPoupanca) System.out.println (((ContaPoupanca)repContas[i]).render()); 19

Verificação Dinâmica de Tipos - código corrigido public class TestaConta { } public static void main (String [ ] args ){ } Conta [ ] repcontas = new Conta [3]; repcontas [0] = repcontas [1] = repcontas [2] = new Conta ( cc1,10.0); new Conta ( cc2,20.0); new ContaPoupanca( cp1,10.0); repcontas [3] = new ContaPoupanca( cp2,40.0 ); for (int i = 0; i <= 3; i++) if (repcontas[i] instanceof ContaPoupanca) System.out.println (((ContaPoupanca)repContas[i]).render()); 20

Exercício 06 - Verificação Dinâmica de Tipos 1. Implemente, na classe conta poupança, um método render que deve acrescentar 1% sobre o saldo. 2. Na classe aplicativo, crie um array do tipo conta corrente com 3 posições. Armazene dois objetos do tipo conta corrente e um do tipo conta poupança. 3. Chame o método saldo dos objetos armazenados no array, execute e observe o resultado. 4. Ative o método render, compile e observe o resultado. 5. Corrija o erro de compilação verificando dinamicamente o tipo e execute o programa. 6. Corrija o erro usando cast e execute o programa. 21

Pontos Principais - Herança Herança permite o reuso de dados (atributos) e operações (métodos) Para acessar membros da superclasse a partir da subclasse deve-se usar a palavra super Construtores não são herdados e a única forma de acesso a partir de uma subclasse é através da palavra super A subclasse pode adicionar novos atributos e/ou métodos ou sobrepor (redefinir) métodos definidos em sua superclasse Na redefinição de métodos a subclasse deve preservar a assinatura: tipo de retorno, nome do método, quantidade e tipos dos argumentos 22

Pontos Principais - Polimorfismo A ligação dinâmica permite o polimorfismo A chamada do mesmo método pode assumir várias formas, dependendo do objeto criado em tempo de execução Métodos com a mesma assinatura implementações diferentes Declarar uma referência da superclasse e instanciar objetos das subclasses Todo objeto da subclasse (subtipo) é um objeto da superclasse (supertipo) 23

Projeto Implementar no projeto para a aula da próxima semana: Divisão em Camadas (Classes de visão, services, básicas e acesso a dados) Analisar o código e implementar Herança onde for viável Analizar o código e implementar polimorfismo onde for aplicável 24