Fundamentos de Programação 2

Documentos relacionados
Fundamentos de Programação

Laboratório de programação II

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

C com introdução a OO

Introdução à orientação a objetos. João Tito Almeida Vianna 18/05/2013

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

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

Linguagens de Programação Aula 12

Linguagem de Programação C++

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

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Classes, Métodos e Propriedades

Programação por Objectos. Java

Linguagem de Programação I

Classe Abstrata e Interface

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

POO e C++: Herança e Polimorfismo

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

Classes e Objetos. Sintaxe de classe em Java

Programação Orientada a Objetos em C++: introdução à herança

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

Conceitos de Programação Orientada a Objetos

Técnicas de Programação:

Programação Orientada a Objetos C++

Linguagem de Programação I Apresentação da Disciplina

Aprendendo. Java 2. Rodrigo Mello Ramon Chiara Renato Villela. Novatec Editora Ltda.

Programação Avançada C++ Slide 12 Nielsen Castelo Damasceno

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

Programação Orientada a Objetos II

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

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

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

Linguagem de Programação. Diagrama de classes

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

Programação Orientada a Objetos para Redes de Computadores

Classes e Encapsulamento

Linguagem de Programação III

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

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Curso de C para Engenharias

Modelo do Mundo Real. Abstração. Interpretação

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

Linguagem de Programação III

Herança. Prof. Leonardo Barreto Campos 1

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

Programação Orientada a Objetos

Herança e Propriedades

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

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

E N C A P S U L A M E N T O P R O F. M E. H É L I O E S P E R I D I Ã O

Notas de Aula 04: Herança e polimorfismo.

//conteúdo do arquivo Matriz.h class Matriz { private: int *elementos; int numerodelinhas; int numerodecolunas; void setnumerodelinhas(int); void

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

LINGUAGEM C. Comandos de Controle do Vídeo, Teclado e especiais. Lógica de Programação

Programação Orientada por Objetos

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

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

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

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

Transcrição:

Fundamentos de Programação 2 ET43G. Polimorfismo. Classes abstratas e interfaces. Aula 12 Prof. Daniel Cavalcanti Jeronymo Universidade Tecnológica Federal do Paraná (UTFPR) Engenharia Eletrônica 3º Período 2015.2 1/20

Plano de Aula Polimorfismo Classes abstratas e Interfaces 2/20

Permite que novas classes extendam classes já existentes A classe filha herda membros (atributos e métodos) da classe pai Descreve relacionamentos do tipo é-um 3/20

Uso da sintaxe: class classederivada : [modificador de acesso] classebase { //corpo da classe derivada } Classe Base (superclasse) Exemplo Ponto Classe Derivada (subclasse) Um PontoColorido é um Ponto (especializado) 4/20

Exemplo Ponto A inicialização da classe base deve ser realizada na lista inicializadora da classe derivada class Ponto { public: int x,y; }; Ponto(int x, int y) { this->x = x; this->y = y; } class PontoColorido : public Ponto { public: enum Cor { Black, Blue, Green, Aqua, Red, Purple, Yellow, White, Gray, LightBlue, LightGreen, LightAqua, LightRed, LightPurple, LightYellow, BrightWhite}; Cor cor; Lista inicializadora do construtor }; PontoColorido(int x, int y, Cor cor) : Ponto(x,y) { this->cor = cor; } 5/20

: O que não é herdado Construtores, destrutores e construtores de cópia da classe base. Operadores sobrecarregados da classe base. Funções friend da classe base. 6/20

: Construtores Primeiro são executados os construtores da classe base e seus membros Ponto::Ponto() -> PontoColorido::PontoColorido() 7/20

: Destrutores Primeiro são executados os destrutores da classe derivada e seus membros PontoColorido::PontoColorido() -> Ponto::Ponto() 8/20

As premissas anteriores quanto a ordem dos construtores e destrutores são válidas? Adicione tracers aos construtores e destrutores de Ponto e PontoColorido Como consertar? Próxima aula! Explique: PontoColorido *p = new PontoColorido(10,1,PontoColorido::Green); cout << "P: " << p->x << " cor: " << PontoColorido::Green << endl; delete p; PontoColorido *p = new PontoColorido(10,1,PontoColorido::Green); cout << "P: " << p->x << " cor: " << PontoColorido::Green << endl; delete static_cast<ponto*>(p); 9/20

Funções da classe base são ocultadas na classe derivada quando redefinidas As funções da classe base podem ser acessadas pelo operador de escopo ou por cast Classe Ponto void imprime() { cout << "." << endl; } Classe PontoColorido #include <windows.h> void imprime() { HANDLE hconsole = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hConsole, cor); cout << "." << endl; SetConsoleTextAttribute(hConsole, (FOREGROUND_RED FOREGROUND_GREEN FOREGROUND_BLUE)); } 10/20

Upcasting: quando o objeto é tratado de acordo com seu tipo base Downcasting: quando o objeto é tratado de acordo com seu tipo derivado Ponto p1(10,1); PontoColorido p2(10,1,pontocolorido::green); Ponto &rp2 = p2; p1.imprime(); p2.imprime(); rp2.imprime(); 11/20

Downcasting: cuidado, pode incorrer em comportamento indefinido class PontoAlien : public Ponto { public: int prog; }; PontoAlien(int x, int y) : Ponto(x,y) { prog = 0xDEADC0D3; } void imprime() { cout << (char)178 << endl; } Ponto p1(10,1); PontoAlien p3(-1,-1); PontoAlien *pp3 = static_cast<pontoalien*>(&p1); p1.imprime(); pp3->imprime(); dynamic_cast avisa o erro 12/20

Downcasting: cuidado, pode incorrer em comportamento indefinido class PontoAlien : public Ponto { public: int prog; }; PontoAlien(int x, int y) : Ponto(x,y) { prog = 0xDEADC0D3; } void imprime() { cout << (char)178 << endl; } Ponto p1(10,1); PontoAlien p3(-1,-1); PontoAlien *pp3 = static_cast<pontoalien*>(&p1); p1.imprime(); pp3->imprime(); 13/20

Controle de acesso: redefine os acessos da classe base em função da classe derivada class classederivada : [modificador de acesso] classebase { //corpo da classe derivada } Pode ser definido como public, private (padrão) ou protected 14/20

Controle de acesso: public membros públicos da classe base permanecem membros públicos na classe derivada membros protegidos da classe base permanecem membros protegidos na classe derivada membros privados da classe base não são acessíveis na classe derivada 15/20

Controle de acesso: protected membros públicos da classe base tornam-se membros protegidos na classe derivada membros protegidos da classe base permanecem membros protegidos na classe derivada membros privados da classe base não são acessíveis na classe derivada 16/20

Controle de acesso: private membros públicos da classe base tornam-se membros privados na classe derivada membros protegidos da classe base tornam-se membros privados na classe derivada membros privados da classe base não são acessíveis na classe derivada 17/20

Controle de acesso: resumo Acesso na Classe Base Especificador na Acesso Herdado public public public protected public protected private public inacessível public protected protected protected protected protected private protected inacessível public private private protected private private private private inacessível 18/20

Controle de acesso: upcasting é afetado pelo controle de acesso class PontoColorido : private Ponto {... } PontoColorido p2(10,1,pontocolorido::green); Ponto &rp2 = p2; // erro! 19/20

Leitura para casa: s modelam relacionamentos do tipo é-um (is a) Composições modelam relacionamentos do tipo tem-um (has a) Quando usar um? Quando usar outro? Vantagens e Desvantagens? https://www.thoughtworks.com/insights/blog/composition-vs-inheritance-how-choose http://www.javaworld.com/article/2076814/core-java/inheritance-versus-composition--which-oneshould-you-choose-.html 20/20