Herança e Polimorfismo de Inclusão



Documentos relacionados
Linguagem de Programação III

OOP - Java. Artur Duque Rossi Mestrado em Modelagem Computacional Universidade Federal de Juiz de Fora

Programação Orientada a Objetos C++

Técnicas de Programação II

Profº. Enrique Pimentel Leite de Oliveira

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

Análise e Projeto Orientados por Objetos

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Aspectos técnicos do desenvolvimento baseado em componentes

Orientação a Objetos com Java

Classes, Superclasses e Subclasses

Reuso com Herança a e Composiçã

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

Programação Orientada a Objetos em java. Polimorfismo

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Programação por Objectos. Java

UNIVERSIDADE PRESBITERIANA MACKENZIE FACULDADE DE COMPUTAÇÃO E INFORMÁTICA

Linguagens de Programação Aula 10

Introdução a Java. Hélder Nunes

Programação Orientada a Objetos em Java

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

Computação II Orientação a Objetos

Herança. Alberto Costa Neto DComp - UFS

UML Aspectos de projetos em Diagramas de classes

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Orientação a Objetos. Thiago Messias Evangelista UESC Universidade Estadual de Santa Cruz Version LibreOffice Productivity Suite

Introdução a POO. Introdução a Linguagem C++ e POO

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br)

3. PARADIGMA ORIENTADO A OBJETOS

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Módulo 06 Desenho de Classes

Programação de Computadores - I. Profª Beatriz Profº Israel

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

POO Programação Orientada a Objetos. Classes em Java

UNIVERSIDADE FEDERAL DO PARANÁ

Programação Orientada a Objetos

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Orientação à Objetos. Aécio Costa

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Padrão Básico de Projeto: Interfaces e Polimorfismo

INF1621 Linguagens de Programação I

Orientação a Objetos

Revisão OO Básico. Orientação a Objetos em Java

Programação por Objectos. Java

Polimorfismo. Prof. Leonardo Barreto Campos 1

Seminário - C# DSO II. Desenvolvimento de Sistemas Orientados a Objetos 2. Equipe: Diorges, Leonardo, Luís Fernando, Ronaldo

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Padrão Básico de Projeto: Herança versus Composição

PADI 2015/16. Aula 1 Introdução à Plataforma.NET

8 Classes Internas. Desenvolvimento OO com Java. Vítor E. Silva Souza

Linguagem de Programação III

Conceitos de Linguagens de Programação

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Bibliografia. Desenvolvimento Orientado a Objetos. Introdução. Bibliografia. O que você vê?

FBV - Linguagem de Programação II. Um pouco sobre Java

Orientação a Objetos e a Linguagem Java

Análise de Programação

Diagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes.

Programação com Objectos. Processamento de Dados I. 3. UML (Unified Modeling Language)

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Organização e Arquitetura de Computadores I. de Computadores

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

Especificação do 3º Trabalho

Análise semântica. Análise Semântica. Estrutura de um compilador. Anotação da árvore sintática. Tipos de comunicação de atributos?

PHP Orientado a Objetos Análise e Desenvolvimento de Sistemas Prof. Marcelo da Silveira Siedler siedler@gmail.com

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

Capítulo 4. Packages e interfaces

Tópicos da Aula. Classes e Objetos. Classe Pública em Java. Classes em Java. Assinatura de Métodos. Corpo de Classes e Métodos. Conceitos de classe

3 Classes e instanciação de objectos (em Java)

Tópicos em Engenharia de Computação

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

Construção de novas Classes em Java. Classes Atributos Métodos Herança...

Padrões de projeto 1

Engenharia de software para desenvolvimento com LabVIEW: Validação

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

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

Suporte a programação orientada a objetos

Linguagens de Programação. Introdução. Carlos Bazilio

Computação II Orientação a Objetos

BCC221 Programação Orientada a Objetos. Prof. Marco Antonio M. Carvalho 2014/2

Algoritmos e Programação II. Sobrecarga

Módulo 07 Características Avançadas de Classes

Subprogramas. Linguagens de Programação. Marco A L Barbosa

Aula 3 Objeto atual com referencia THIS e Classes com Herança

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

Classes Abstratas e Interfaces

Orientação a Objeto e UML Questões 2014 Prof. Felipe Leite

Alunos. Hudson Martins da Silva Laércio Pedro Hoppe

Templates e Pilhas. 1. Introdução

Tipo Abstrato de Dados

PHP INTRODUÇÃO CLASSES E OBJETOS

Sobre o Professor Dr. Sylvio Barbon Junior

Métodos de Construção de Software: Orientação a Objetos. Mestrado em Ciência da Computação 2008 Profa. Itana Gimenes

Noções sobre Objetos e Classes

Curso de PHP. FATEC - Jundiaí. A programação orientada a objetos (object-oriented oriented programming

Linguagem de Programação I. Orientação a Objetos em Java

Transcrição:

Herança e Polimorfismo de Inclusão Sérgio Queiroz de Medeiros sergio@ufs.br 29 de maio de 2012 1

Polimorfismo Ad-hoc Coerção Sobrecarga (Overloading) Universal Paramétrico Inclusão 2

Herança Herança é uma maneira de reusar código de outros objetos, ou de estabelecer um subtipo a partir de um objeto existente Exemplo de herança em C++: class derived : protected base {... O que acontece? 3

Visibilidade em C++ Qualquer classe pode limitar a visibilidade de seus membros public protected private Uma classe derivada pode restringir a visibilidade de membros de uma classe base, mas não aumentá-la Restrições de visibilidade em uma classe derivada podem ser definidas individualmente para cada membro da classe 4

Visibilidade Eiffel: classes derivadas podem tanto restringir quando aumentar a visibilidade de mebros da classe base Java: um membro protected também é visível dentro do pacote da classe. Possui visibilidade de pacote C#: modificador internal permite um membro da classe ser visível no assembly (equivalente ao.jar) na qual a classe aparece 5

Polimorfismo Uma consequência da herança é que um objeto de uma classe derivada possui todos os membros de sua classe base C Podemos usar objetos da classe D onde objetos da classe C são esperados (desde que D não restrinja a visibilidade dos membros públicos de C) A habilidade de usar uma classe derivada onde a classe base é esperada é chamada de polimorfismo de inclusão ou polimorfismo de subtipo 6

Polimorfismo class person {... class student : public person {... class professor : public person {... student s; professor p;... person *x = &s; person *y = &p; s.f(); p.f(); x->f(); y->f(); 7

Ligação de Método Dinâmica Como saber em x->f() de qual classe virá o método f? A escolha é com base no tipo da variável x? A escolha é com base na classe do objeto s referenciado por x? Ligação de Método Estática x Ligação de Método Dinâmica 8

Ligação de Método Dinâmica A ligação de método dinâmica é mais custosa do que a estática Embora o custo seja pequeno, ele possui impacto em métodos curtos Smalltalk, Objective-C, Python, Ruby e Lua usam ligação dinâmica para todos os métodos Java usa ligação dinâmica por padrão, mas permite que classes e métodos sejam marcados como final 9

Ligação de Método Dinâmica C++ e C# usam ligação de método estática por padrão, mas permitem especificar ligação de método dinâmica Overriding x Redefining class person { public: virtual void f();... 10

Classes Abstratas Na maioria das linguagens OO é possíver omitir o corpo de métodos virtuais em uma classe base Java: abstract class person { public abstract void f(); C++: class person { public: virtual void f() = 0; Em C++ métodos abstratos são chamados de métodos virtuais puros 11

Que método usar? Na ligação de método estática o compilador pode determinar que método usar com base no tipo da variável Na ligação de método dinâmica o método é escolhido em tempo de execução Tabela de métodos virtuais (vtable) Cada classe possui uma vtable 12

Tabela de Métodos Virtuais class foo { class bar : public foo { int a; int w; double b; public: char c; void m(); public: virtual double s(... virtual void k(... virtual char *t(... virtual int l(...... virtual void m(); virtual double n(... } F; }; B; 13

Tabela de Métodos Virtuais foo F; bar B; foo *q; bar *s;... q = &B; //ok //erro sem^antico estático s = &F; s = dynamic_cast<bar *>(q); s = (bar *) q; 14

Polimorfismo de Inclusão x Polimorfismo Paramétrico Polimorfismo paramétrico é útil para construir abstrações sobre tipos não relacioados Pilhas Árvores Conjuntos Polimorfismo de inclusão é útil para construir abstrações sobre tipos relacionados Uso de herança 15

Herança Múltipla Algumas linguagens, como C++ e Python, permitem herança múltipla Outras linguagens, como Java, C# e Ruby, permitem uma forma limitada de herança múltipla (interfaces) Herança múltipla (como implementado em C++ e Python) adiciona um grau de complexidade à linguagem que parece ultrapassar os seus benefícios 16

Herança Múltipla As classes X e Y possuem o método f. A classe Z herda de X e Y. De quem Z herda f? As classes X e Y possuem A como pai. A classe Z herda de X e Y. Quantas cópias de A a classe Z possui? A implementação de herança simples assumia que a representação de um objeto da classe pai era um prefixo da representação de um objeto de uma classe derivada. Com herança múltipla, como pode cada pai ser um prefixo do filho? 17

Referências Programming Language Pragmatics (Michael Schott) Seções 9.2, 9.4 e 9.5 Concetps of Programming Languages (Robert Sebesta) Seções 9.8, 11.5 a 11.7 e Capítulo 12 18