Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 ·...
Transcript of Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 ·...
Clique para editar o estilo do subtítulo mestre
Programação Orientada a Objetos em C++
Linguagem de Programação III
Programação Orientada a Objetos em C++
Histórico Encapsulamento Tratamento de classes e objetos Herança Polimorfismo Comparação com Java
Programação Orientada a Objetos em C++
Histórico• Desenvolvido por Bjarne Stroustrup no Bell
Labs, durante a década de 1980.• Inicialmente chamado de "C with Classes".• Objetivo inicial implementar uma versão
distribuída do núcleo Unix, que era escrito em C.
• 1983 - passou a se chamar C++.• 1985 - lançamento da 1º edição do livro "The
C++ Programming Language", contendo referências para a utilização da linguagem.
Programação Orientada a Objetos em C++
Histórico• 1990 - lançamento do livro "The Annotated C+
+ Reference Manual", base para o futuro padrão.
• 1990 - Criação da Standard Template Library (STL), por Alexander Stepanov.
• 1993 - Padronização da linguagem pelo comitê ANSI/ISO
Programação Orientada a Objetos em C++
#include <iostream>using namespace std;
void main(){ cout << "Hello World!" << endl; cout << "Welcome to C++ Programming" << endl; }
Programação Orientada a Objetos em C++
Encapsulamento• Modificadores public, private e protected.• Atributos private ainda podem ser acessados
por métodos alheios com permissão explícita para tanto (utilizando a palavra reservada friend).
• Pode ser contornado pelo uso de operações de baixo nível.
• Uso de ponteiros para manipulação de variáveis private (má prática de programação).
Programação Orientada a Objetos em C++
Herança• Conceito de herença pública, privada e
protegida.• Uso de classes abstratas.• Permite herança múltipla.• Problemas relacionados ao uso de herança
múltipla.
Programação Orientada a Objetos em C++
Tratamento de classes e objetos• esquema basico:
class class_name{ access_specifier_1:
member1; access_specifier_2: member2;
... }
Programação Orientada a Objetos em C++
Exemplo 1(métodos/funções):#include <iostream>
using namespace std; class CRectangle {
int x, y; public:
void set_values (int,int); int area () {return (x*y);} };
void CRectangle::set_values (int a, int b) {x = a; y = b; }
int main () { CRectangle rect;
rect.set_values (3,4); cout << "area: " << rect.area(); return 0; }
Contrutores e destrutoresclass CRectangle {
int *width, *height; public:
CRectangle (int,int); ~CRectangle ();
}; CRectangle::CRectangle (int a, int b) { width = new int; height = new int; *width = a; *height = b; } CRectangle::~CRectangle () { delete width; delete height; }
Programação Orientada a Objetos em C++
Complemento: Problemática herança múltipla - Quando um objeto da subclasse tentar referenciar
diretamente o membro homônimo das superclasses, o compilador não
saberá a qual classe está se referindo, causando a ambigüidade.
Programação Orientada a Objetos em C++
Complemento: Usando herança múltipla
Programação Orientada a Objetos em C++
#include <string.h> #include <iostream> using namespace std; class ClasA {
protected : char nome[31]; public : void mostrar () {cout << "\nNome na Classe\t: " << nome;}
}; class ClasB1 : public ClasA {
public : ClasB1 (char * n = "Classe B1") {strcpy(nome,n);} void mostrar() {ClasA::mostrar();}
}; class ClasB2 : public ClasA {
public : ClasB2(char * n = "Classe B2") {strcpy(nome,n);} void mostrar() {ClasA::mostrar();}
}; class ClasC : public ClasB1, public ClasB2 {
public : void saida () { ClasB1::mostrar(); ClasB2::mostrar();
} };
Programação Orientada a Objetos em C++
Resultado Impresso:Nome na Classe: Classe B1 Nome na Classe: Classe B2
Resumindo, a duplicidade significa a existência de dois espaços em memória para um mesmo atributo ou
a existência de dois caminhos para a chamada de uma função
Programação Orientada a Objetos em C++
Polimorfismo• Polimorfismo estático.Sobrecarga de métodos, construtores e operadores.
Programação Orientada a Objetos em C++
Polimorfismo• Polimorfismo dinâmico.Funções Virtuais Puras.
Funções virtuais(complemento)• Usado para facilitar a modificação de metodos a
partir de classes derivadas(exemplo polígono).
Classes abstratas(Complemento)
• Muito similar a virtual, a diferença é que se pode deixar métodos abstratos sem implementação alguma(Função virtual pura)
Programação Orientada a Objetos em C++
Diferenças com Java-Não precisa ser parte de classe alguma para Executar uma função
-Necessário uso do destrutor
Programação Orientada a Objetos em C++
Diferenças com Java(Sintaxe):-Declaração de classes: C++
class Bar {}; Java
class Bar {}
-Herança:C++
class Foo : public Bar { ... }; Java
class Foo extends Bar { ... }
Programação Orientada a Objetos em C++
Diferenças com Java(Sintaxe):Encapsulamento:
C++public: void foo(); void bar();
Java public void foo();
public void bar();
Booleans:C++bool foo;
Javaboolean foo;
Programação Orientada a Objetos em C++
Diferenças com Java(Sintaxe):-Variaveis finais(Constantes):
C++const int x = 7;
Javafinal int x = 7;
-VetoresC++
int *x = new x[10];Java
int[] x = new int[10];