Fundamentos de Programação

Documentos relacionados
Laboratório de programação II

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

ESTRUTURA COM DECISÃO COMPOSTA

Fundamentos de Programação 2

Aula 14: Funções Passagem de Parâmetros por Referência

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA

Polimorfismo. O que é polimorfismo?

Linguagem de Programação I

Curso teórico: Orientação a Objetos. Matemática computacional Marcos Aurelio Wozhiak Jr webzhiak.com.br

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

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

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

Fundamentos de Programação

Programação científica C++

Carlos Eduardo Batista. Centro de Informática - UFPB

Técnicas de Programação:

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

Aula 10: Manipulação do fluxo de laços

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

Programação Orientada a Objetos Aula I Declaração de classes, métodos construtores. Prof.: Bruno E. G. Gomes IFRN

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA EXERCÍCIOS E CONSTRUÇÃO DE PROGRAMAS SEQUENCIAIS. Prof. Dr. Daniel Caetano

C com introdução a OO

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

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

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

Herança. BCC702-Programação de Computadores II Emiliana Mara Lopes Simões Universidade Federal de Ouro Preto abril 2010

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

Aula 05: Condicionais (Parte 2)

Linguagem de Programação C++

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

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

Linguagens de Programação Aula 12

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

PCS Laboratório de Programação Orientada a Objetos 1a. Prova. 02 de Setembro de 2015

Programação Orientada a Objetos

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

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

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

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

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

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

Aula 11: Laços e exercícios

Programação Orientada a Objetos HERANÇA E COMPOSIÇÃO

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

Carlos Eduardo Batista. Centro de Informática - UFPB

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

Introdução à Programação. Conceitos Básicos de Orientação a Objetos

# Estrutura de Dados # Aula - Revisão de C/C++ na Prática. Prof. Leinylson Fontinele Pereira

ITENS FUNDAMENTAIS Programando em C++

Aula 4: Introdução à Linguagem C++

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

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

POO29004 Programação Orientada a Objetos

Programação Orientada a Objetos (DPADF 0063)

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição

Orientação a Objetos. Programação em C++

Puca Huachi Vaz Penna / José Américo T. Messias

Transcrição:

Fundamentos de Programação ET43G Aula 7 Prof. Daniel Cavalcanti Jeronymo Orientada a Objetos Polimorfismo. Polimorfismo estático e dinâmico. Métodos virtuais, interfaces. Universidade Tecnológica Federal do Paraná (UTFPR) Engenharia Eletrônica 3º Período 2016.1 1/14

Polimorfismo Plano de Aula Polimorfismos em C++ Estático e Dinâmico Métodos virtuais Classes abstratas e interfaces 2/14

Polimorfismo Polimorfismo Objetos ou operações com diferentes comportamentos dependendo do contexto Objetos iguais exibem diferentes comportamentos Pode ser utilizado para estabelecer uma interface 3/14

Polimorfismo Definiu o polimorfismo ad-hoc e o polimorfismo paramétrico Ad-hoc: para isto em latim, funções que funcionam ou parecem funcionar para diferentes tipos (que podem não exibir uma estrutura comum) (Strachey, 1967) Paramétrico: funções que funcionam uniformemente para uma série de tipos, que normalmente exibem um tipo de estrutura (Strachey, 1967) 4/14

Polimorfismo Estenderam a definição de Strachey para incluir: figura adaptada de Cardelli e Wegner (1985) 5/14

Quatro tipos principais de polimorfismo: Os quatro tipos Coerção (implícitao ou explícita): conversão (cast) Sobrecarga: funções com assinaturas distintas e identificadores iguais Paramétrico: utilização do mesmo código para diferentes tipos Inclusão / Subtipo: em tempo de execução 6/14

Conversão: Os quatro tipos double inteiro = 10; // inteiro (10) promovido para ponto flutuante int decimal = 9.99; // double (9.99) é demovido para inteiro Sobrecarga: void imprime(int param); void imprime(char *param); Todos estes são em tempo de compilação! Paramétrico: templates próxima aula! 7/14

Inclusão / Subtipo Os quatro tipos O comportamento diferente é determinado pelo subtipo do objeto Ocorre em tempo de execução! O objeto pode ser apresentado em termos de uma superclasse e ainda assim tem seu comportamento definido pela subclasse 8/14

Inclusão / Subtipo Subtipo #include <iostream> using namespace std; void faz_acao(animal &animal) { animal.fala(); } int main() { Cachorro cachorro; Gato gato; faz_acao(cachorro); faz_acao(gato); } return 0; 9/14

Inclusão / Subtipo Subtipo class Animal { public: virtual void fala() { cout << " - vazio - " << endl; } }; class Cachorro : public Animal { public: void fala() { cout << "au au!" << endl; } }; class Gato : public Animal { public: void fala() { cout << "miau!" << endl; } }; 10/14

Inclusão / Subtipo Subtipo Problema: a classe Animal pode instanciar um objeto, mesmo que isto não faça sentido Solução: uso de uma classe base abstrata class Animal { public: virtual void fala() = 0; }; 11/14

Inclusão / Subtipo Subtipo Como ocorre: na linguagem C++ a solução típica é o uso de uma tabela que inclui os endereços das funções virtuais, conhecida como tabela virtual (v-table) Virtuais nulas: a tabela apresenta um endereço nulo para objetos da classe base, o que impede (deveria impedir) a criação do objeto. 12/14

Inclusão / Subtipo Subtipo Virtuais nulas: úteis para criar o que são conhecidas como interfaces, classes que modelam relações de pode-fazer 13/14

Modifique o exercício dos animais para que o mesmo apresente as quatro situações: Exercício Método base não-virtual, método derivado não-virtual Método base virtual, método derivado não-virtual Método base não-virtual, método derivado virtual Método base virtual, método derivado virtual Observe e anote o comportamento Anote também o tamanho do objeto resultante 14/14