Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Herança - Polimorfismo BCC702-Programação de Computadores II Emiliana Mara Lopes Simões simoes.eml@gmail.com Universidade Federal de Ouro Preto abril 2010 Herança Na aula passada vimos herança em C++ A herança é uma forma de reutilização de software em que o programador cria uma classe que “absorve” os dados e comportamentos de uma classe existente e os aprimora com novas capacidades Nomenclatura: Classe básica (superclasse) classe já existente; Classe derivada (subclasse) classe criada a partir da classe básica. Exemplo 1: Implementação da classe Retangulo Exemplo 1: Implementar uma classe para representar um retângulo Exemplo 1: Implementação da classe Retangulo Devem ser fornecidas funções para: Inicializar todos os dados do retângulo (construtor com parâmetros); Obter o valor de (gets) para os dados do retângulo; Calcular a área do retângulo; Imprimir os dados do retângulo. Exemplo 1: Implementação da classe Retangulo Devem ser fornecidas funções para: Inicializar todos os dados do retângulo (construtor com parâmetros); Obter o valor de (gets) para os dados do retângulo; Calcular a área do retângulo; Imprimir os dados do retângulo. Exemplo 1: Implementação da classe Retangulo Devem ser fornecidas funções para: Inicializar todos os dados do retângulo (construtor com parâmetros); Obter o valor de (gets) para os dados do retângulo; Calcular a área do retângulo; Imprimir os dados do retângulo. Exemplo 1: Implementação da classe Retangulo Devem ser fornecidas funções para: Inicializar todos os dados do retângulo (construtor com parâmetros); Obter o valor de (gets) para os dados do retângulo; Calcular a área do retângulo; Imprimir os dados do retângulo. Exemplo 1: Implementação da classe Retangulo Devem ser fornecidas funções para: Inicializar todos os dados do retângulo (construtor com parâmetros); Obter o valor de (gets) para os dados do retângulo; Calcular a área do retângulo; Imprimir os dados do retângulo. Exemplo 1: Implementação da classe Retangulo Diagrama de classe Exemplo 1: Implementação da classe Retangulo class Retangulo{ private: double ladoa; double ladob; public: Retangulo(double a, double b); double getLadoa(); double getLadob(); double area(); void imprimir(); }; Arquivo: Retangulo.h Exemplo 1: Implementação da classe Retangulo #include “Retangulo.h” #include <iostream> using namespace std; Retangulo::Retangulo(double a, double b){ ladoa = a; ladob = b; } double Retangulo::getLadoa(){ return ladoa; } ... Arquivo: Retangulo.cpp Exemplo 1: Implementação da classe Retangulo ... double Retangulo::getLadob(){ return ladob; } double Retangulo::area(){ return ladoa * ladob; } void Retangulo::imprimir(){ cout << “Retangulo com lados: ” << ladoa << “ e ” << ladob << endl << “Area: ” << area() << endl << endl; } Arquivo: Retangulo.cpp Exemplo 2: Implementação da classe Paralelepipedo Exemplo 2: A partir da classe Retangulo (figura plana) criar a classe Paralelepipedo (Figura Espacial). Exemplo 2: Implementação da classe Paralelepipedo Além de herdar os dados e as funções da classe Retangulo, na classe Paralelepipedo temos: O dado que corresponde à altura do paralelepípedo (ladoc); As funções para: Inicializar todos os dados do paralelepípedo (construtor com parâmetros); Obter o valor de (get) para o ladoc; Calcular a área do paralelepípedo; Calcular o volume do paralelepípedo; Imprimir os dados do paralelepípedo. Exemplo 2: Implementação da classe Paralelepipedo Além de herdar os dados e as funções da classe Retangulo, na classe Paralelepipedo temos: O dado que corresponde à altura do paralelepípedo (ladoc); As funções para: Inicializar todos os dados do paralelepípedo (construtor com parâmetros); Obter o valor de (get) para o ladoc; Calcular a área do paralelepípedo; Calcular o volume do paralelepípedo; Imprimir os dados do paralelepípedo. Exemplo 2: Implementação da classe Paralelepipedo Além de herdar os dados e as funções da classe Retangulo, na classe Paralelepipedo temos: O dado que corresponde à altura do paralelepípedo (ladoc); As funções para: Inicializar todos os dados do paralelepípedo (construtor com parâmetros); Obter o valor de (get) para o ladoc; Calcular a área do paralelepípedo; Calcular o volume do paralelepípedo; Imprimir os dados do paralelepípedo. Exemplo 2: Implementação da classe Paralelepipedo Além de herdar os dados e as funções da classe Retangulo, na classe Paralelepipedo temos: O dado que corresponde à altura do paralelepípedo (ladoc); As funções para: Inicializar todos os dados do paralelepípedo (construtor com parâmetros); Obter o valor de (get) para o ladoc; Calcular a área do paralelepípedo; Calcular o volume do paralelepípedo; Imprimir os dados do paralelepípedo. Exemplo 2: Implementação da classe Paralelepipedo Além de herdar os dados e as funções da classe Retangulo, na classe Paralelepipedo temos: O dado que corresponde à altura do paralelepípedo (ladoc); As funções para: Inicializar todos os dados do paralelepípedo (construtor com parâmetros); Obter o valor de (get) para o ladoc; Calcular a área do paralelepípedo; Calcular o volume do paralelepípedo; Imprimir os dados do paralelepípedo. Exemplo 2: Implementação da classe Paralelepipedo Além de herdar os dados e as funções da classe Retangulo, na classe Paralelepipedo temos: O dado que corresponde à altura do paralelepípedo (ladoc); As funções para: Inicializar todos os dados do paralelepípedo (construtor com parâmetros); Obter o valor de (get) para o ladoc; Calcular a área do paralelepípedo; Calcular o volume do paralelepípedo; Imprimir os dados do paralelepípedo. Exemplo 2: Implementação da classe Paralelepipedo Além de herdar os dados e as funções da classe Retangulo, na classe Paralelepipedo temos: O dado que corresponde à altura do paralelepípedo (ladoc); As funções para: Inicializar todos os dados do paralelepípedo (construtor com parâmetros); Obter o valor de (get) para o ladoc; Calcular a área do paralelepípedo; Calcular o volume do paralelepípedo; Imprimir os dados do paralelepípedo. Exemplo 2: Implementação da classe Paralelepipedo Além de herdar os dados e as funções da classe Retangulo, na classe Paralelepipedo temos: O dado que corresponde à altura do paralelepípedo (ladoc); As funções para: Inicializar todos os dados do paralelepípedo (construtor com parâmetros); Obter o valor de (get) para o ladoc; Calcular a área do paralelepípedo; Calcular o volume do paralelepípedo; Imprimir os dados do paralelepípedo. Exemplo 2: Implementação da classe Paralelepipedo Diagrama de classe Exemplo 2: Implementação da classe Paralelepipedo Uma classe derivada herda os dados e as funções de sua classe básica, mas pode também: Estender a estrutura de dados; Adicionar novas funções; Redefinir a implementação de funções já existentes. Exemplo 2: Implementação da classe Paralelepipedo Uma classe derivada herda os dados e as funções de sua classe básica, mas pode também: Estender a estrutura de dados; Adicionar novas funções; Redefinir a implementação de funções já existentes. Exemplo 2: Implementação da classe Paralelepipedo Uma classe derivada herda os dados e as funções de sua classe básica, mas pode também: Estender a estrutura de dados; Adicionar novas funções; Redefinir a implementação de funções já existentes. Exemplo 2: Implementação da classe Paralelepipedo Uma classe derivada herda os dados e as funções de sua classe básica, mas pode também: Estender a estrutura de dados; Adicionar novas funções; Redefinir a implementação de funções já existentes. Exemplo 2: Implementação da classe Paralelepipedo #include “Retangulo.h” class Paralelepipedo : public Retangulo{ private: double ladoc; public: Paralelepipedo(double a, double b, double c); double getLadoc(); double volume(); double area(); void imprimir(); }; Arquivo: Paralelepipedo.h Exemplo 2: Implementação da classe Paralelepipedo #include “Paralelepipedo.h” #include <iostream> using namespace std; Paralelepipedo::Paralelepipedo(double a,double b,double c) : Retangulo(a, b){ ladoc = c; } double Paralelepipedo::getLadoc(){ return ladoc; } ... Arquivo: Paralelepipedo.cpp Exemplo 2: Implementação da classe Paralelepipedo ... double Paralelepipedo::volume(){ return Retangulo::area() * ladoc; } double Paralelepipedo::area(){ return 2 * ( Retangulo::area() + getLadoa()*ladoc + ladoc*getLadob() ); } ... Arquivo: Paralelepipedo.cpp Exemplo 2: Implementação da classe Paralelepipedo ... void Paralelepipedo::imprimir(){ cout << “Paralelepipedo com Comprimento: ” << getLadoa() << endl << “Largura: ” << getLadob() << endl << “Altura: ” << ladoc << endl << “Area: ” << area() << endl << “Volume: ” << volume() << endl << endl; } ... Arquivo: Paralelepipedo.cpp Herança - Polimorfismo QUADRO Dúvidas? Próxima Aula Polimorfismo