SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
Programação orientada a objetos: herança
© 2012 Ivan L. M. Ricarte




                                   Prof. Dr. Ivan Luiz Marques Ricarte




                                                                         1
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
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
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
© 2012 Ivan L. M. Ricarte




    CONCEITOS PRELIMINARES



5
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
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
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
Ocultação em C++


                            Especificadores de escopo:

                            • private para atributos.
© 2012 Ivan L. M. Ricarte




                            • public para métodos da
                              interface pública.




                                                         9
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
Composição em C++


                            Classes existentes utilizadas para definir novas classes:
© 2012 Ivan L. M. Ricarte




                                                                                        11
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
© 2012 Ivan L. M. Ricarte




                            O pilar que completa a programação orientada a objetos
                            HERANÇA



                                                                                     13
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
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
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
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
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
© 2012 Ivan L. M. Ricarte




                            Herança em C++
                            DECLARAÇÃO DE CLASSES DERIVADAS



                                                              19
Como declarar uma classe derivada
                            em C++

                                 class Derivada : public Base {
© 2012 Ivan L. M. Ricarte




                                 ...

                                 };

                                       Base b;              Derivada d;

                                             Base                    Base

                                                                   Derivada



                                                                              20
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
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
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
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
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
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
© 2012 Ivan L. M. Ricarte




                            Herança em C++
                            A HERANÇA DO COMPORTAMENTO



                                                         27
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
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
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
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
© 2012 Ivan L. M. Ricarte




                            Herança em C++
                            RECURSOS PARA A PROGRAMAÇÃO GENÉRICA



                                                                   32
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
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
© 2012 Ivan L. M. Ricarte



                                 Declaração das classes




35
Exemplo de execução
                            (sem polimorfismo)
© 2012 Ivan L. M. Ricarte




                                                  Saída:
                                                           Lara
                                                           Academico Pedro
                                                           Professor Ivan

                                                                             36
Tentativa de tratar objetos
                            genericamente
© 2012 Ivan L. M. Ricarte




                                                  Saída:
                                                           Lara
                                                           Pedro
                                                           Ivan

                                                                   37
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
Método virtual
© 2012 Ivan L. M. Ricarte




                                             Saída:
                                                      Lara
                                                      Academico Pedro
                                                      Professor Ivan
                                                                        39
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
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
© 2012 Ivan L. M. Ricarte




                            Programação orientada a objetos em C++
                            PRÓXIMOS PASSOS



                                                                     42
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
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
© 2012 Ivan L. M. Ricarte




                            Ivan Luiz Marques Ricarte
                               ricarte@unicamp.br




                                                        45

Weitere ähnliche Inhalte

Was ist angesagt?

Fórmulas e funções de calc
Fórmulas e funções de calcFórmulas e funções de calc
Fórmulas e funções de calcCDP_Online
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosIgor Takenami
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaDaniel Brandão
 
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 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 BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoRangel Javier
 
Gestão de carreiras
Gestão de carreirasGestão de carreiras
Gestão de carreirasTuane Paixão
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetosdanielrpgj30
 
Planejamento estratégico francisco
Planejamento estratégico   franciscoPlanejamento estratégico   francisco
Planejamento estratégico franciscoFrancisco 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)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 DadosBanco de Dados I  Aula 02 - Introdução aos Bancos de Dados
Banco de Dados I Aula 02 - Introdução aos Bancos de DadosLeinylson Fontinele
 
Gestão de Pessoas - Contexto atual e Gestão por Competências
Gestão de Pessoas - Contexto atual e Gestão por CompetênciasGestão de Pessoas - Contexto atual e Gestão por Competências
Gestão de Pessoas - Contexto atual e Gestão por CompetênciasMarcos Alves
 
Conceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDConceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDVinicius Buffolo
 
Introdução a Ciência de Dados
Introdução a Ciência de DadosIntrodução a Ciência de Dados
Introdução a Ciência de DadosNauber Gois
 

Was ist angesagt? (20)

Fórmulas e funções de calc
Fórmulas e funções de calcFórmulas e funções de calc
Fórmulas e funções de calc
 
POO - Aula 09 - Herança
POO - Aula 09 - HerançaPOO - Aula 09 - Herança
POO - Aula 09 - Herança
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
POO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em JavaPOO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em Java
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 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 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 BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Gestão de carreiras
Gestão de carreirasGestão de carreiras
Gestão de carreiras
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetos
 
Aula02 - JavaScript
Aula02 - JavaScriptAula02 - JavaScript
Aula02 - JavaScript
 
Planejamento estratégico francisco
Planejamento estratégico   franciscoPlanejamento 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 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 DadosBanco 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ênciasGestã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 SGBDConceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBD
 
Aula 07 - Visualg e Pseudocódigo
Aula 07 - Visualg e PseudocódigoAula 07 - Visualg e Pseudocódigo
Aula 07 - Visualg e Pseudocódigo
 
Mini Curso de PHP
Mini Curso de PHPMini Curso de PHP
Mini Curso de PHP
 
Introdução a Ciência de Dados
Introdução a Ciência de DadosIntroduçã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)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Programação orientada a objectos
Programação orientada a objectosProgramação orientada a objectos
Programação orientada a objectosValdinho Pereira
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAAparicio Junior
 
Curso Java #05 - Heranca, Polimorfismo e Classe abstratas
Curso Java #05 - Heranca, Polimorfismo e Classe abstratasCurso Java #05 - Heranca, Polimorfismo e Classe abstratas
Curso Java #05 - Heranca, Polimorfismo e Classe abstratasRenato Sousa
 
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaJava - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaMoises Omena
 
Java 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita PolimorfismoJava 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita PolimorfismoRegis Magalhães
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetosPaulo Carvalho
 
Java recursos avançados - streams
Java   recursos avançados - streamsJava   recursos avançados - streams
Java recursos avançados - streamsArmando Daniel
 
Java recursos avançados - multithreading
Java   recursos avançados - multithreadingJava   recursos avançados - multithreading
Java recursos avançados - multithreadingArmando Daniel
 
Java introdução ao eclipse
Java   introdução ao eclipseJava   introdução ao eclipse
Java introdução ao eclipseArmando Daniel
 
Java recursos avançados - socket connection
Java   recursos avançados - socket connectionJava   recursos avançados - socket connection
Java recursos avançados - socket connectionArmando Daniel
 
[CRASHCOURSE] Orientação a Objeto e UML
[CRASHCOURSE] Orientação a Objeto e UML[CRASHCOURSE] Orientação a Objeto e UML
[CRASHCOURSE] Orientação a Objeto e UMLChristopher Cerqueira
 
Visibilidade e Diagrama de Classe de Projeto na UML
Visibilidade e Diagrama de Classe de Projeto na UMLVisibilidade e Diagrama de Classe de Projeto na UML
Visibilidade e Diagrama de Classe de Projeto na UMLufpb
 
Associações entre classes
Associações entre classesAssociações entre classes
Associações entre classesIvan Fonseca
 

Andere mochten auch (20)

Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
POO Herança
POO HerançaPOO Herança
POO Herança
 
Programação orientada a objectos
Programação orientada a objectosProgramação orientada a objectos
Programação orientada a objectos
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇ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 abstratasCurso 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çaJava - 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 PolimorfismoJava 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita Polimorfismo
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetos
 
Java code conventions
Java code conventionsJava code conventions
Java code conventions
 
Java recursos avançados - streams
Java   recursos avançados - streamsJava   recursos avançados - streams
Java recursos avançados - streams
 
[CEFET][ESw] Aula 5 - Diagrama de Classe
[CEFET][ESw] Aula 5 - Diagrama de Classe[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étodosPOO - 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 - multithreadingJava   recursos avançados - multithreading
Java recursos avançados - multithreading
 
Java introdução ao eclipse
Java   introdução ao eclipseJava   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)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 connectionJava   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[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 UMLVisibilidade e Diagrama de Classe de Projeto na UML
Visibilidade e Diagrama de Classe de Projeto na UML
 
Associações entre classes
Associações entre classesAssociações entre classes
Associações entre classes
 

Mehr von Ivan Ricarte

Aula catalogo de refatoracoes
Aula   catalogo de refatoracoesAula   catalogo de refatoracoes
Aula catalogo de refatoracoesIvan Ricarte
 
Testes de unidade em Java: JUnit
Testes de unidade em Java: JUnitTestes de unidade em Java: JUnit
Testes de unidade em Java: JUnitIvan Ricarte
 
Refatoração: Code smells
Refatoração: Code smellsRefatoração: Code smells
Refatoração: Code smellsIvan Ricarte
 
Aplicacoes web semantica saude
Aplicacoes web semantica saudeAplicacoes web semantica saude
Aplicacoes web semantica saudeIvan Ricarte
 
R - Software Estatistico
R - Software EstatisticoR - Software Estatistico
R - Software EstatisticoIvan Ricarte
 
Aula revisão de java e junit
Aula   revisão de java e junitAula   revisão de java e junit
Aula revisão de java e junitIvan Ricarte
 
Introducao a refatoracao
Introducao a refatoracaoIntroducao a refatoracao
Introducao a refatoracaoIvan Ricarte
 
C++: biblioteca padrão de templates - Parte 1
C++: biblioteca padrão de templates - Parte 1C++: biblioteca padrão de templates - Parte 1
C++: biblioteca padrão de templates - Parte 1Ivan Ricarte
 
Membros de classes C++
Membros de classes C++Membros de classes C++
Membros de classes C++Ivan Ricarte
 
Princípios da organização de código fonte C++
Princípios da organização de código fonte C++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 softwareProblemas no desenvolvimento do software
Problemas no desenvolvimento do softwareIvan Ricarte
 
Aula 01 - As linguagens do software (2015)
Aula 01 - As linguagens do software (2015)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)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údeO 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údeIvan Ricarte
 

Mehr von Ivan Ricarte (20)

Aula catalogo de refatoracoes
Aula   catalogo de refatoracoesAula   catalogo de refatoracoes
Aula catalogo de refatoracoes
 
Testes de unidade em Java: JUnit
Testes de unidade em Java: JUnitTestes de unidade em Java: JUnit
Testes de unidade em Java: JUnit
 
Refatoração: Code smells
Refatoração: Code smellsRefatoração: Code smells
Refatoração: Code smells
 
Aplicacoes web semantica saude
Aplicacoes web semantica saudeAplicacoes web semantica saude
Aplicacoes web semantica saude
 
R - Software Estatistico
R - Software EstatisticoR - Software Estatistico
R - Software Estatistico
 
Aula UML e Java
Aula UML e JavaAula UML e Java
Aula UML e Java
 
Aula revisão de java e junit
Aula   revisão de java e junitAula   revisão de java e junit
Aula revisão de java e junit
 
Introducao a refatoracao
Introducao a refatoracaoIntroducao a refatoracao
Introducao a refatoracao
 
C++: biblioteca padrão de templates - Parte 1
C++: biblioteca padrão de templates - Parte 1C++: biblioteca padrão de templates - Parte 1
C++: biblioteca padrão de templates - Parte 1
 
c++ construtores
c++ construtoresc++ construtores
c++ construtores
 
Padroes
PadroesPadroes
Padroes
 
C++ Sobrecarga
C++ SobrecargaC++ Sobrecarga
C++ Sobrecarga
 
Membros de classes C++
Membros de classes C++Membros de classes C++
Membros de classes C++
 
UML e POO
UML e POOUML e POO
UML e POO
 
Antipadroes
AntipadroesAntipadroes
Antipadroes
 
Princípios da organização de código fonte C++
Princípios da organização de código fonte C++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 softwareProblemas no desenvolvimento do software
Problemas no desenvolvimento do software
 
Aula 01 - As linguagens do software (2015)
Aula 01 - As linguagens do software (2015)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)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údeO 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