Polimorfismo e suas aplicações em C++.

Slides:



Advertisements
Apresentações semelhantes
Programação Orientada aos Objectos Paulo Marques Departamento de Eng. Informática Universidade de Coimbra Out/2005 Core C++: Uma abordagem.
Advertisements

Matrizes clássicas e vectores em C++
APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C AULA 04: Funções Maceió, Maio de 2010.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem de Programação II
Procedural vs. OO (Figuras Geométricas: Área do triângulo)
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ PAE: Pedro Shiguihara Professor: Dilvan Moreira.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
Lógica de Programação Aula 25 Prof. Auler Gomes. Introdução - subrotina Muitos problemas grandes ou nem tão grandes, mas de solução mais complexa podem.
1 Aula 06 – Funções Prof. Filipe Mutz Colocar mais exemplos de funções simples no começo.
Linguagens de Programação Conceitos e Técnicas Amarrações Prof. Isabel Cafezeiro
Administração de Sistemas Operacionais 1 -Windows Processos Curso Técnico em Redes de Computadores Prof. Emerson Felipe.
Programação em Java Threads Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Disciplina: Estrutura de Dados Professor: Jeovane Reges Caxias – MA 2015 ACULDADE DE CIÊNCIAS E TECNOLOGIA DO MARANHÃO.
Classes Objetos Atributos Métodos Coletor de Lixo (Garbage Collector ) Confraria do Java Nivelamento. Caroline, Marcelo e Luiz 12/05/2007.
Classe Abstrata É uma classe que não pode ser instanciada; Freqüentemente aparece no topo de uma hierarquia de classes de programação orientada a objetos;
Estrutura Sequencial COUT CIN
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS
Estrutura Sequencial COUT CIN
Vetores e Matrizes em C/C++
Introdução a Programação
INF1007: Programação 2 2 – Alocação Dinâmica
Introdução OO.
OO – Engenharia Eletrônica
Apresentação do Laboratório Falar sobre as máquinas, 14 unidades
Estrutura de Dados Revisão
Novas Funcionalidades p/ LOO 2
Módulo I Capítulo 2: IDE e Variáveis
PROGRAMAÇÃO ORIENTADA A OBJETO - JAVA
Algoritmos Estrutura Sequencial
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
POO - Classes Dilvan Moreira.
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Java: Interfaces Alcides Calsavara.
INF1007: Programação Funções Recursivas
FUNDAMENTO DE PROGRAMAÇÃO
Singleton e Template Method
CONCEITO DE VARIÁVEIS ESTÁTICAS
Behaviour && attribute
Criação e manipulação de objetos
Exercício 1 Faça um programa que receba como entrada o nome e o salário de um funcionário de uma empresa e que calcule o novo valor do salário do.
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Programação Orientada a Objetos
Programação Orientada a Objetos
Técnicas de Programação
Orientação a Objetos - Programação em C++
Ponteiros Parte III.
Curso Profissional de Técnico de Gestão e Programação de Sistemas de Informação Ano Letivo 2017/2018 Programação e Sistemas de Informação 10º Ano.
Implementação Orientada a Objetos Marcia A. S
Aula 22 Modularização 22/10/08.
Técnicas de Programação
Programação Orientada a Objetos*
Rosemary Silveira Filgueiras Melo
3.2 Sobrecarga de Métodos (Overloading)
Rosemary Silveira Filgueiras Melo
Rosemary Silveira Filgueiras Melo
Programação Orientada a Objetos
3.1.7 Variáveis de Classe e Instância
Programação Orientada a Objetos
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Laboratório I Mateus Raeder.
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Curso básico de PHP. 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
Paradigma de Orientação a Objetos
Compilação de Linguagens OO
Programação Orientada a Objetos
Programação de Computadores II
Transcrição da apresentação:

Polimorfismo e suas aplicações em C++. Ítalo Mendes da Silva Ribeiro

Definição Polimorfismo é uma palavra grega que significa “muitas formas”. Na Programação Orientada a Objetos (POO) ocorre quando duas ou mais classes diferentes com herança entre si possuem métodos com mesmo nome. Classes polimórficas.

Aplicações de polimorfismo Invocação de funções com ponteiros de objetos das classes polimórficas. sobrescrita de funções. funções virtuais. classes abstratas.

Vantagens do polimorfismo Criar sistema mais facilmente extensível. Versatilidade de uma mesma mensagem entre os objetos possuírem diferentes resultados.

Classes exemplo #include <iostream> using namespace std; class Poligono { protected: int largura, altura; public: void setValores (int a, int b) { largura=a; altura=b; } int area() { return largura+altura; } }; class Retangulo: public Poligono { public: { return largura*altura; }

Invocação de Funções com Ponteiros Mesma variável com diferentes tipos Invocar uma função do objeto da classe pai a partir de um objeto da classe filha A função executada é da classe pai Os dados utilizados são da classe filha

Invocação de Funções com Ponteiros int main () { Poligono pol; Retangulo ret; Poligono *polPTR = &ret; pol.setValores(3,7); ret.setValores(4,5); cout << polPTR->area() << '\n'; return 0; } SAÍDA: 9

Invocação de Funções com Ponteiros Não é possível invocar uma função do objeto da classe filho a partir de um objeto da classe pai A classe pai não é a classe filha O objeto da classe pai não é um objeto da classe filha int main () { Poligono pol; //erro Retangulo *retPTR = &pol; }

Função virtual É uma função da classe pai que pode ser redefinida na classe filha A função da classe filha vai SOBRESCREVER a função da classe pai Função com o mesmo nome e parâmetros (assinatura) Cada classe filha pode ter uma implementação diferente da função virtual Resultado da execução da função virtual pode ser diferente em cada objeto

Função virtual Uma única mensagem entre os objetos retorna um resultado adequado para cada objeto A escolha da função adequada é feita em tempo de execução e é chamada de ligação tardia (dynamic binding) Deve-se usar ponteiro ou referência da classe Quando a classe possui objeto com sobrescrita de função o destrutor da classe deve ser virtual para destruição do objeto de acordo com o tipo adequado

Função virtual #include <iostream> using namespace std; class Poligono { protected: int largura, altura; public: void setValores (int a, int b) { largura=a; altura=b; } virtual int area() { return largura+altura; } }; class Retangulo: public Poligono { public: int area() { return largura*altura; }

Função virtual int main () { Poligono pol; Retangulo ret; Poligono *polPTR = &ret; pol.setValores(3,7); ret.setValores(4,5); cout << polPTR->area() << '\n'; return 0; } SAÍDA: 20

Função virtual SOBRECARGA de função ocorre quando existem vários métodos em uma mesma classe com o mesmo nome e diferente lista de parâmetros int area() { return largura+altura; } int area(int a) { return largura*a; } int area(int a, int b) { return largura*a*b; }

Classe abstrata e função virtual pura Classes abstratas não podem instanciar objetos São incompletas por não terem a implementação das funções Outra classe deve herdar da classe abstrata e implementar as funções da classe abstrata para instanciar objetos Classes que podem instanciar objetos são chamadas concretas Classes de mais alto nível tendem a serem abstratas

Classe abstrata e função virtual pura Classe abstrata possui ao menos uma função virtual pura Função virtual pura não possui implementação e obrigatoriamente deve ser implementada na classe filha Classes abstrata é utilizada quando não existe motivo para implementação da função na classe pai, mas existe motivo em todas as suas classes filhas virtual int area() = 0;

Função virtual #include <iostream> using namespace std; class Poligono { protected: int largura, altura; public: void setValores (int a, int b) { largura=a; altura=b; } virtual int area() = 0; };

Bibliografia DEITEL, Harvey. DEITEL, Paul. C++: Como programar. 5ª ed., Editora Pearson. 2006. MALIK, D. S. C++ Programming: From Problem Analysis to Program Design, 5ª ed., Cengage Learning. 2010.