Suche senden
Hochladen
Programação orientada a objetos: herança
•
0 gefällt mir
•
8,217 views
Ivan Ricarte
Folgen
Diashow-Anzeige
Melden
Teilen
Diashow-Anzeige
Melden
Teilen
1 von 45
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
César Augusto Pessôa
Algoritmos - Procedimentos
Algoritmos - Procedimentos
Elaine Cecília Gatto
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
Daniel Brandão
Psi m14
Psi m14
Luis Ferreira
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
Daniel Brandão
Introdução a poo
Introdução a poo
Sedu
Treinamento de SQL Básico
Treinamento de SQL Básico
Igor Alves
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Leinylson Fontinele
Empfohlen
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
César Augusto Pessôa
Algoritmos - Procedimentos
Algoritmos - Procedimentos
Elaine Cecília Gatto
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
Daniel Brandão
Psi m14
Psi m14
Luis Ferreira
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
Daniel Brandão
Introdução a poo
Introdução a poo
Sedu
Treinamento de SQL Básico
Treinamento de SQL Básico
Igor Alves
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Leinylson Fontinele
Fórmulas e funções de calc
Fórmulas e funções de calc
CDP_Online
POO - Aula 09 - Herança
POO - Aula 09 - Herança
Felipe J. R. Vieira
Programação Orientada a Objetos
Programação Orientada a Objetos
Igor Takenami
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
Daniel Brandão
Linguagem C - Vetores
Linguagem C - Vetores
Elaine Cecília Gatto
POO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em Java
Ludimila Monjardim Casagrande
POO - 10 - Herança
POO - 10 - Herança
Ludimila Monjardim Casagrande
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Leinylson Fontinele
Banco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
Rangel Javier
Gestão de carreiras
Gestão de carreiras
Tuane Paixão
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetos
danielrpgj30
Aula02 - JavaScript
Aula02 - JavaScript
Jorge Ávila Miranda
Planejamento estratégico francisco
Planejamento estratégico francisco
Francisco Alves
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Leinylson Fontinele
Banco de Dados I Aula 02 - Introdução aos Bancos de Dados
Banco de Dados I Aula 02 - Introdução aos Bancos de Dados
Leinylson Fontinele
Gestão de Pessoas - Contexto atual e Gestão por Competências
Gestão de Pessoas - Contexto atual e Gestão por Competências
Marcos Alves
Conceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBD
Vinicius Buffolo
Aula 07 - Visualg e Pseudocódigo
Aula 07 - Visualg e Pseudocódigo
Gabriel Vinicios Silva Maganha
Mini Curso de PHP
Mini Curso de PHP
Rodrigo Bueno Santa Maria, BS, MBA
Introdução a Ciência de Dados
Introdução a Ciência de Dados
Nauber Gois
Java orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
Armando Daniel
POO Herança
POO Herança
Paulo Henrique Martins da Silva
Weitere ähnliche Inhalte
Was ist angesagt?
Fórmulas e funções de calc
Fórmulas e funções de calc
CDP_Online
POO - Aula 09 - Herança
POO - Aula 09 - Herança
Felipe J. R. Vieira
Programação Orientada a Objetos
Programação Orientada a Objetos
Igor Takenami
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
Daniel Brandão
Linguagem C - Vetores
Linguagem C - Vetores
Elaine Cecília Gatto
POO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em Java
Ludimila Monjardim Casagrande
POO - 10 - Herança
POO - 10 - Herança
Ludimila Monjardim Casagrande
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Leinylson Fontinele
Banco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
Rangel Javier
Gestão de carreiras
Gestão de carreiras
Tuane Paixão
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetos
danielrpgj30
Aula02 - JavaScript
Aula02 - JavaScript
Jorge Ávila Miranda
Planejamento estratégico francisco
Planejamento estratégico francisco
Francisco Alves
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Leinylson Fontinele
Banco de Dados I Aula 02 - Introdução aos Bancos de Dados
Banco de Dados I Aula 02 - Introdução aos Bancos de Dados
Leinylson Fontinele
Gestão de Pessoas - Contexto atual e Gestão por Competências
Gestão de Pessoas - Contexto atual e Gestão por Competências
Marcos Alves
Conceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBD
Vinicius Buffolo
Aula 07 - Visualg e Pseudocódigo
Aula 07 - Visualg e Pseudocódigo
Gabriel Vinicios Silva Maganha
Mini Curso de PHP
Mini Curso de PHP
Rodrigo Bueno Santa Maria, BS, MBA
Introdução a Ciência de Dados
Introdução a Ciência de Dados
Nauber Gois
Was ist angesagt?
(20)
Fórmulas e funções de calc
Fórmulas e funções de calc
POO - Aula 09 - Herança
POO - Aula 09 - Herança
Programação Orientada a Objetos
Programação Orientada a Objetos
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
Linguagem C - Vetores
Linguagem C - Vetores
POO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em Java
POO - 10 - Herança
POO - 10 - Herança
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
Gestão de carreiras
Gestão de carreiras
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetos
Aula02 - JavaScript
Aula02 - JavaScript
Planejamento estratégico francisco
Planejamento estratégico francisco
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I Aula 02 - Introdução aos Bancos de Dados
Banco de Dados I Aula 02 - Introdução aos Bancos de Dados
Gestão de Pessoas - Contexto atual e Gestão por Competências
Gestão de Pessoas - Contexto atual e Gestão por Competências
Conceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBD
Aula 07 - Visualg e Pseudocódigo
Aula 07 - Visualg e Pseudocódigo
Mini Curso de PHP
Mini Curso de PHP
Introdução a Ciência de Dados
Introdução a Ciência de Dados
Andere mochten auch
Java orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
Armando Daniel
POO Herança
POO Herança
Paulo Henrique Martins da Silva
Programação orientada a objectos
Programação orientada a objectos
Valdinho Pereira
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVA
Aparicio Junior
Curso Java #05 - Heranca, Polimorfismo e Classe abstratas
Curso Java #05 - Heranca, Polimorfismo e Classe abstratas
Renato Sousa
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Moises Omena
Java 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita Polimorfismo
Regis Magalhães
JAVA - Herança
JAVA - Herança
Elaine Cecília Gatto
Java programação orientada a objetos
Java programação orientada a objetos
Paulo Carvalho
Java code conventions
Java code conventions
Armando Daniel
Java recursos avançados - streams
Java recursos avançados - streams
Armando Daniel
[CEFET][ESw] Aula 5 - Diagrama de Classe
[CEFET][ESw] Aula 5 - Diagrama de Classe
Universidade Federal de Minas Gerais
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
Ludimila Monjardim Casagrande
Java recursos avançados - multithreading
Java recursos avançados - multithreading
Armando Daniel
Java introdução ao eclipse
Java introdução ao eclipse
Armando Daniel
Curso de Java #11 - Estruturas de Repetição (Parte 1)
Curso de Java #11 - Estruturas de Repetição (Parte 1)
Curso em Vídeo - Cursos Grátis com Certificado
Java recursos avançados - socket connection
Java recursos avançados - socket connection
Armando Daniel
[CRASHCOURSE] Orientação a Objeto e UML
[CRASHCOURSE] Orientação a Objeto e UML
Christopher Cerqueira
Visibilidade e Diagrama de Classe de Projeto na UML
Visibilidade e Diagrama de Classe de Projeto na UML
ufpb
Associações entre classes
Associações entre classes
Ivan Fonseca
Andere mochten auch
(20)
Java orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
POO Herança
POO Herança
Programação orientada a objectos
Programação orientada a objectos
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVA
Curso Java #05 - Heranca, Polimorfismo e Classe abstratas
Curso Java #05 - Heranca, Polimorfismo e Classe abstratas
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Java 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita Polimorfismo
JAVA - Herança
JAVA - Herança
Java programação orientada a objetos
Java programação orientada a objetos
Java code conventions
Java code conventions
Java recursos avançados - streams
Java recursos avançados - streams
[CEFET][ESw] Aula 5 - Diagrama de Classe
[CEFET][ESw] Aula 5 - Diagrama de Classe
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
Java recursos avançados - multithreading
Java recursos avançados - multithreading
Java introdução ao eclipse
Java introdução ao eclipse
Curso de Java #11 - Estruturas de Repetição (Parte 1)
Curso de Java #11 - Estruturas de Repetição (Parte 1)
Java recursos avançados - socket connection
Java recursos avançados - socket connection
[CRASHCOURSE] Orientação a Objeto e UML
[CRASHCOURSE] Orientação a Objeto e UML
Visibilidade e Diagrama de Classe de Projeto na UML
Visibilidade e Diagrama de Classe de Projeto na UML
Associações entre classes
Associações entre classes
Mehr von Ivan Ricarte
Aula catalogo de refatoracoes
Aula catalogo de refatoracoes
Ivan Ricarte
Testes de unidade em Java: JUnit
Testes de unidade em Java: JUnit
Ivan Ricarte
Refatoração: Code smells
Refatoração: Code smells
Ivan Ricarte
Aplicacoes web semantica saude
Aplicacoes web semantica saude
Ivan Ricarte
R - Software Estatistico
R - Software Estatistico
Ivan Ricarte
Aula UML e Java
Aula UML e Java
Ivan Ricarte
Aula revisão de java e junit
Aula revisão de java e junit
Ivan Ricarte
Introducao a refatoracao
Introducao a refatoracao
Ivan Ricarte
C++: biblioteca padrão de templates - Parte 1
C++: biblioteca padrão de templates - Parte 1
Ivan Ricarte
c++ construtores
c++ construtores
Ivan Ricarte
Padroes
Padroes
Ivan Ricarte
C++ Sobrecarga
C++ Sobrecarga
Ivan Ricarte
Membros de classes C++
Membros de classes C++
Ivan Ricarte
UML e POO
UML e POO
Ivan Ricarte
Antipadroes
Antipadroes
Ivan Ricarte
Princípios da organização de código fonte C++
Princípios da organização de código fonte C++
Ivan Ricarte
Problemas no desenvolvimento do software
Problemas no desenvolvimento do software
Ivan Ricarte
Aula 01 - As linguagens do software (2015)
Aula 01 - As linguagens do software (2015)
Ivan Ricarte
SI300 - Apoio a atividades práticas em C++ (01)
SI300 - Apoio a atividades práticas em C++ (01)
Ivan Ricarte
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúde
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúde
Ivan Ricarte
Mehr von Ivan Ricarte
(20)
Aula catalogo de refatoracoes
Aula catalogo de refatoracoes
Testes de unidade em Java: JUnit
Testes de unidade em Java: JUnit
Refatoração: Code smells
Refatoração: Code smells
Aplicacoes web semantica saude
Aplicacoes web semantica saude
R - Software Estatistico
R - Software Estatistico
Aula UML e Java
Aula UML e Java
Aula revisão de java e junit
Aula revisão de java e junit
Introducao a refatoracao
Introducao a refatoracao
C++: biblioteca padrão de templates - Parte 1
C++: biblioteca padrão de templates - Parte 1
c++ construtores
c++ construtores
Padroes
Padroes
C++ Sobrecarga
C++ Sobrecarga
Membros de classes C++
Membros de classes C++
UML e POO
UML e POO
Antipadroes
Antipadroes
Princípios da organização de código fonte C++
Princípios da organização de código fonte C++
Problemas no desenvolvimento do software
Problemas no desenvolvimento do software
Aula 01 - As linguagens do software (2015)
Aula 01 - As linguagens do software (2015)
SI300 - Apoio a atividades práticas em C++ (01)
SI300 - Apoio a atividades práticas em C++ (01)
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúde
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúde
Programação orientada a objetos: herança
1.
Programação orientada a
objetos: herança © 2012 Ivan L. M. Ricarte Prof. Dr. Ivan Luiz Marques Ricarte 1
2.
Considerações iniciais sobre
o ensino da programação orientada a objetos Enfatizar, desde o início, o ensino da © 2012 Ivan L. M. Ricarte programação voltada para as boas http://ingenieriainformatica.info/ práticas, fundamentadas em ocultar e encapsular os dados que representam um item de informação. 2
3.
Considerações iniciais sobre
o ensino da programação orientada a objetos Fazer com que o aluno realize, por meio da programação orientada a objetos, o Princípio de Eric S. Raymond: © 2012 Ivan L. M. Ricarte Smart data structures and dumb code works a lot http://lwn.net/2000/features/ESR/ better than the other way around. 3
4.
Objetivos
Entender o que é herança. Relacionar herança com os conceitos da programação orientada © 2012 Ivan L. M. Ricarte a objetos previamente estudados. Conhecer os mecanismos da linguagem de programação C++ para a realização da herança. Estabelecer as bases para a apresentação do conteúdo da programação genérica (polimorfismo) em C++. 4
5.
© 2012 Ivan
L. M. Ricarte CONCEITOS PRELIMINARES 5
6.
Encapsulação
“Ato de encapsular, rodear de uma cápsula.” © 2012 Ivan L. M. Ricarte Cápsula: estojo. http://magistralfarma.blogspot.com.br/2011/04/farmacia-de-manipulacao-por-onde.html 6
7.
Encapsulação em C++
Definição de uma classe: • Congrega atributos e métodos (funções membro). © 2012 Ivan L. M. Ricarte • Tratados como uma unidade (objeto). Data hoje(5,10,2012); dia: 5 mes: 10 ano: 2012 7
8.
Ocultação
“Ato ou efeito de ocultar.” © 2012 Ivan L. M. Ricarte http://corcodilos.com/ Ocultar: não deixar ver ou não contar; encobrir; esconder. 8
9.
Ocultação em C++
Especificadores de escopo: • private para atributos. © 2012 Ivan L. M. Ricarte • public para métodos da interface pública. 9
10.
Composição
“O que resulta da reunião das partes componentes; todo.” © 2012 Ivan L. M. Ricarte http://www.odec.ca/projects/2006/stag6m2 http://www.circuitstoday.com/ http://www.westfloridacomponents.com/ http://www.shopdatacenter.com/computer-hardware/ http://news.thomasnet.com/ 10
11.
Composição em C++
Classes existentes utilizadas para definir novas classes: © 2012 Ivan L. M. Ricarte 11
12.
Os pilares da
programação orientada a objetos © 2012 Ivan L. M. Ricarte http://gestaoeevolucao.blogspot.com.br Ocultação Composição Encapsulação 12
13.
© 2012 Ivan
L. M. Ricarte O pilar que completa a programação orientada a objetos HERANÇA 13
14.
O que é
herança? “Em programação orientada a objetos, ação de passar as características de uma classe ou tipo de dado para outro, © 2012 Ivan L. M. Ricarte chamada de descendente.” Michaelis Moderno Dicionário da Língua Portuguesa “Herança: Uma classe pode ser derivada de outra classe, que é chamada de classe básica da classe derivada. A classe derivada herda as propriedades de suas classes básicas, inclusive seus membros de dados e suas funções membros.” Margaret Ellis e Bjarne Stroustrup. 14
15.
O que é
herança? “Um recurso das linguagens de programação orientadas a objetos com o qual classes podem ser especializadas, a partir de superclasses mais © 2012 Ivan L. M. Ricarte gerais. Os atributos e as definições de métodos das superclasses são automaticamente adquiridos por uma subclasse.” Craig Larman “Herança é um princípio de orientação a objetos, que permite que classes compartilhem atributos e métodos, através de "heranças". Ela é usada na intenção de reaproveitar código ou comportamento generalizado ou especializar operações ou atributos.” Wikipedia 15
16.
Em resumo, herança
é... Uma característica única da programação orientada a objetos. © 2012 Ivan L. M. Ricarte Principal diferencial deste paradigma de programação em relação a outros. Permite definir uma nova classe a partir de outra já existente: • Classe existente: Base • Nova classe: Derivada 16
17.
Como usar herança?
Herança não é simplesmente um mecanismo de reuso de código. • Composição atende bem a essa necessidade. © 2012 Ivan L. M. Ricarte Herança é um mecanismo de abstração. • Possibilita a programação genérica (polimórfica). 17
18.
Como usar herança?
“Certamente, é com a herança que você irá repensar radicalmente sua abordagem de construir sistemas de software. © 2012 Ivan L. M. Ricarte [Mas] não saber distinguir os distintos significados associados aos mecanismos de herança já causou dores incalculáveis a muitos programadores C++.” Scott Meyers É preciso conhecer bem os recursos associados da linguagem de programação para evitar problemas na implementação de sistemas. 18
19.
© 2012 Ivan
L. M. Ricarte Herança em C++ DECLARAÇÃO DE CLASSES DERIVADAS 19
20.
Como declarar uma
classe derivada em C++ class Derivada : public Base { © 2012 Ivan L. M. Ricarte ... }; Base b; Derivada d; Base Base Derivada 20
21.
Estrutura da classe
derivada Todos os atributos que são membros da classe base também fazem parte da classe derivada. © 2012 Ivan L. M. Ricarte Pessoa p: nome_ Aluno a: nome_ ra_ 21
22.
Restrições de acesso
na classe derivada No entanto, restrições de visibilidade são preservadas: © 2012 Ivan L. M. Ricarte nome_ é private de Pessoa! Como definir e manipular essa parte da informação no objeto da classe derivada? 22
23.
Construção de objetos
da classe derivada Construtor da classe base é invocado primeiro, depois o da classe derivada é executado. © 2012 Ivan L. M. Ricarte Se construtor da classe base demanda argumentos, estes podem ser indicados na especificação do construtor da classe derivada: 23
24.
O especificador protected
Os especificadores de acesso a membros da classe: • private: acesso exclusivo a funções membros da própria classe. © 2012 Ivan L. M. Ricarte • public: acesso permitido a qualquer função. • protected: acesso permitido apenas a classes derivadas. 24
25.
Como usar protected
Se objeto da classe derivada precisa manipular atributos definidos na © 2012 Ivan L. M. Ricarte classe base, esses atributos podem ser declarados na base como protected. Mas isso viola o princípio da ocultação da informação. protected não deve ser utilizado dessa maneira! 25
26.
Uso recomendado de
protected Classe base define um conjunto de funções membro com visibilidade protected para uso apenas nas classes derivadas: © 2012 Ivan L. M. Ricarte 26
27.
© 2012 Ivan
L. M. Ricarte Herança em C++ A HERANÇA DO COMPORTAMENTO 27
28.
Qual comportamento é
herdado na classe derivada? Na herança pública, métodos públicos da classe base são também métodos públicos na classe derivada: © 2012 Ivan L. M. Ricarte Saída: Ivan Método definido na classe base Padrão: assinatura, especificação e implementação são herdadas. 28
29.
Extensão
Classe derivada pode incluir novos métodos, não presentes na interface operacional da classe base: © 2012 Ivan L. M. Ricarte Interface pública de Aluno inclui string nome() [de Pessoa] e int obtemRA() [de Aluno] 29
30.
Redefinição
Classe derivada pode alterar (especializar) a implementação de um método especificado na classe base, com a mesma assinatura: © 2012 Ivan L. M. Ricarte Saída: Academico Ivan 30
31.
Princípios de herança:
sumário Estrutura: • Ocultação da informação deve ser preservada. © 2012 Ivan L. M. Ricarte Comportamento (público): • Método da classe base pode ser integralmente aproveitado (interface, especificação e implementação). • Novos métodos podem ser agregados (extensão). • Implementação de método da classe base pode ser alterada (redefinição). – Base para a programação genérica. 31
32.
© 2012 Ivan
L. M. Ricarte Herança em C++ RECURSOS PARA A PROGRAMAÇÃO GENÉRICA 32
33.
Motivação
Interesse em tratar objetos de modo genérico, sem conhecer © 2012 Ivan L. M. Ricarte seu tipo específico. Exemplo: Conjunto de Pessoas. 33
34.
Princípio da Substituição
de Liskov Um objeto da classe derivada pode substituir um objeto da classe base sem © 2012 Ivan L. M. Ricarte alterar as propriedades desejáveis de um programa (tarefa executada, correção). http://ru.wikipedia.org/wiki/ 34
35.
© 2012 Ivan
L. M. Ricarte Declaração das classes 35
36.
Exemplo de execução
(sem polimorfismo) © 2012 Ivan L. M. Ricarte Saída: Lara Academico Pedro Professor Ivan 36
37.
Tentativa de tratar
objetos genericamente © 2012 Ivan L. M. Ricarte Saída: Lara Pedro Ivan 37
38.
Por que falhou?
Um método que é definido em uma classe sem o especificador © 2012 Ivan L. M. Ricarte virtual não pode ser redefinido em classes derivadas Se redefinição é permitida, método deve ser declarado como virtual 38
39.
Método virtual © 2012
Ivan L. M. Ricarte Saída: Lara Academico Pedro Professor Ivan 39
40.
Porque destrutores devem
ser declarados como virtuais Pessoa p: Aluno a: nome_ nome_ ra_ © 2012 Ivan L. M. Ricarte Pessoa *p = new Aluno(...); ... delete p; Se os destrutor em Pessoa não for declarado como virtual, apenas a implementação da classe base (Pessoa) será executada. Vazamento de memória 40
41.
Herança e os
diferentes tipos de métodos públicos Método simples (sem o especificador virtual): • Classe derivada não pode redefinir o método – deve preservar a assinatura, especificação e implementação. © 2012 Ivan L. M. Ricarte • Comportamento invariante. Método virtual: • Classe derivada pode redefinir o método ou utilizar a implementação padrão. Método virtual puro: virtual string nome() = 0; • Classe derivada deve redefinir o método, não há implementação padrão. 41
42.
© 2012 Ivan
L. M. Ricarte Programação orientada a objetos em C++ PRÓXIMOS PASSOS 42
43.
Próximos passos
Explorando o polimorfismo com funções virtuais: • Não mais repetir “if-else’s” nos métodos de uma classe. © 2012 Ivan L. M. Ricarte • Não mais repetir trechos de código em métodos de diferentes classes. Especificação sem implementação: • Funções virtuais puras, classes abstratas e classes abstratas puras. • Objetivo: programar pelo contrato, não pela implementação. Gabaritos (Templates): • Outro mecanismo para programação genérica, diferente de herança. • Tipo do objeto não modifica o comportamento. 43
44.
Leituras adicionais © 2012
Ivan L. M. Ricarte Capítulo 12 Item 35 (herança pública modela “é-um”) Capítulo 12 Programação orientada a Item 37 (redefinir função não virtual) Classes derivadas objetos: herança Item 44 (entender os significados em herança) 44
45.
© 2012 Ivan
L. M. Ricarte Ivan Luiz Marques Ricarte ricarte@unicamp.br 45
Jetzt herunterladen