Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 ·...

21
Clique para editar o estilo do subtítulo mestre Programação Orientada a Objetos em C++ Linguagem de Programação III

Transcript of Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 ·...

Page 1: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

Clique para editar o estilo do subtítulo mestre

Programação Orientada a Objetos em C++

Linguagem de Programação III

Page 2: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

Programação Orientada a Objetos em C++

Histórico Encapsulamento Tratamento de classes e objetos Herança Polimorfismo Comparação com Java

Page 3: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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.

Page 4: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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

Page 5: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

Programação Orientada a Objetos em C++

#include <iostream>using namespace std;

void main(){  cout << "Hello World!" << endl;    cout << "Welcome to C++ Programming" << endl; }

Page 6: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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).

Page 7: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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.

Page 8: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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;

... }

Page 9: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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; }

Page 10: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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; }

Page 11: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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.

Page 12: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

Programação Orientada a Objetos em C++

Complemento: Usando herança múltipla

Page 13: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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();

} };

Page 14: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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

Page 15: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

Programação Orientada a Objetos em C++

Polimorfismo• Polimorfismo estático.Sobrecarga de métodos, construtores e operadores.

Page 16: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

Programação Orientada a Objetos em C++

Polimorfismo• Polimorfismo dinâmico.Funções Virtuais Puras.

Page 17: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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)

Page 18: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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

Page 19: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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 { ... }

Page 20: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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;

Page 21: Programação III - UESCnbcgib.uesc.br/nbcgib/files/LP-III/lp3_C++ POO.pdf · 2013-04-12 · Programação Orientada a Objetos em C++ Histórico • Desenvolvido por Bjarne Stroustrup

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];