A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Revisão de Orientação a Objetos e C++

Apresentações semelhantes


Apresentação em tema: "Revisão de Orientação a Objetos e C++"— Transcrição da apresentação:

1 Revisão de Orientação a Objetos e C++
Remis Balaniuk

2 Bibliografia http://www.brasil.terravista.pt/magoito/2090/C.html
ECKEL, Bruce, C++ Guia do Usuário. Makron Books, 1991. WIENER, Richard S.; PINSON, Lewis. C++ Programação Orientada para Objeto – Manual Prático e Profissional. Makron Books, 1991.

3 Procedural vs. O-O Procedural Object Oriented Subprogram #1 Subprogram
Main Program Data Subprogram #2 Subprogram #3 Subprogram #4 Subprogram #5 Object #1 Object Oriented Data Object #2 Main Program Data Object #3 Data

4 Orientação a objetos

5 Orientação a objetos

6 Orientação a objetos

7 Orientação a objetos

8

9 Exemplo em C++ n 2 Reta Ponto cor : int espessura : int
posicao : double[2] cor : int n 2 desenha move RetaPontilhada RetaTracejada espaço : int espaço : int tipoTraço : int desenha desenha

10 // indica inicio de comentário
Exemplo em C++ #ifndef __RETA_HEADER__ #define __RETA_HEADER__ class Ponto; class Reta { public: Reta(); virtual ~Reta(); virtual void desenha(); private: Ponto *m_p0, *m_p1; int cor, espessura; }; #endif // __RETA_HEADER__ Reta.H #include “Reta.H” #include “Ponto.H” Reta::Reta() { m_p0 = new Ponto(0, 0); m_p1 = new Ponto(1, 1); } Reta::~Reta() delete m_p0; delete m_p1; Reta.CPP Declarations go in .H file Definitions go in .C file Good because: can see interface without implementations lets others use your functions etc. // indica inicio de comentário

11 #include #include “Reta.H” Insere o arquivo de header.
#include <iostream> Insere o arquivo de header. Inclui um library header.

12 Header Guards #ifndef __RETA_HEADER__ #define __RETA_HEADER__
// conteúdo of Reta.H //... #endif Garante que o conteúdo do header vai ser incluído uma única vez mesmo que o include seja chamado mais de uma vez.

13 Header Guards #ifndef __RETA_HEADER__ #define __RETA_HEADER__
// conteúdo of reta.H //... #endif To ensure it is safe to include a file more than once. Se esta variável não definida … define. fim da área protegida.

14 Includes circulares O que está errado ? Como consertar? gui.H
#include “controller.h” // define gui // ... gui.H #include “gui.h” class Controller { //... private: Gui* myGui; }; controller.H Answer: To avoid circular includes,

15 Forward Declarations Num header file, incluir só o necessário. gui.H
Se somente apontadores para outras classes forem usados usar forward declarations. //Forward Declaration class Controller; // define gui // ... gui.H //Forward declaration class Gui; class Controller { //... private: Gui* myGui; }; controller.H Minimize compile dependency. Speeds up compilation. (don’t need to recompile every time gui.H changes)

16 Compilation Compiler Preprocessor Linker Object files Executable
Inlines #includes etc. Compiler Translates to machine code Associates calls with functions Object files Linker Associates functions with definitions Executable External Libraries, libc.so, libcs123.so

17 Exemplo Escreva os arquivos Ponto.h e Ponto.cpp que descreva a classe Ponto. Ponto posicao : double[2] cor : int move

18 Solução Ponto.CPP Ponto.H #include “Ponto.H”
Ponto::Ponto(double x,double y) { posicao[0]=x; posicao[1]=y; } Ponto ::~ Ponto () Ponto ::move(double x,double y) Ponto.CPP #ifndef __PONTO_HEADER__ #define __PONTO_HEADER__ class Ponto { public: Ponto(double x,double y); virtual ~Ponto(); void move(double x,double y); private: double posicao[2]; int cor; }; #endif // __PONTO_HEADER__ Ponto.H

19 Polimorfismo Ponto.H #ifndef __PONTO_HEADER__ #define __PONTO_HEADER__
class Ponto { public: Ponto(); Ponto(double x,double y); virtual ~Ponto(); void move(double x,double y); void move(double novapos[2]); private: double posicao[2]; int cor; }; #endif // __PONTO_HEADER__ Ponto.H

20 Alocando memória usando new
Ponto *p = new Ponto(5, 5); new pode ser visto como uma função new aloca o espaço para o objeto. new chama o construtor do objeto. new retorna um ponteiro para o objeto. Just like java. But you have to think about pointers.

21 Desalocando memória usando delete
// allocate memory Ponto *p = new Ponto(5, 5); ... // free the memory delete p; Para toda chamada do new, deve existir uma chamada do delete. No garbage collection.

22 Destructors delete chama o destructor do objeto.
delete libera o espaço ocupado pelo objeto. Libera recursos (memória).

23 Destructors – um exemplo
class Reta { public: Reta(); virtual ~Reta(); private: Ponto *m_p0, *m_p1; }; Ask about virtual. (what’s wrong here…)

24 Destructors – um exemplo
Reta:: Reta() { m_p0 = new Ponto(0, 0); m_p1 = new Ponto(1, 1); } Reta ::~Reta() delete m_p0; delete m_p1;

25 Usando o “->” Ponto *p = new Ponto(5, 5); // acessando uma função:
(*p).move(10, 10); // ou simplesmente: p->move(10, 10); Using p to “point” at the method.

26 Stack vs. Heap On the Heap / drawStuff() { Ponto *p = new Ponto();
Dynamic allocation On the Stack / Automatic allocation drawStuff() { Ponto *p = new Ponto(); p->move(10,10); //... } Ponto p(); p.move(5,5); On the left we have a pointer that we must dereference. Still must delete p on the left – problem. on the right, everything is ok.

27 Resumo do Header File Reta.H header file Início do header guard
#ifndef __RETA_HEADER__ #define __RETA_HEADER__ class Ponto; class Reta { public: Reta(); virtual ~Reta(); virtual void desenhar(); private: Ponto *m_p0, *m_p1; int cor, espessura; }; #endif // __RETA_HEADER__ Reta.H header file Início do header guard forward declaration declaração da classe constructor destructor demais métodos atributos da classe (não podem ser acessados diretamente) não esqueça o ; final header guard

28 Como funciona a herança?
Reta cor : int espessura : int desenha RetaPontilhada RetaTracejada espaço : int espaço : int tipoTraço : int desenha desenha

29 Como funciona a herança?
RetaPontilhada herda propriedades de Reta (cor, espessura e pontos) Precisa incluir o header da classe pai aqui #include “Reta.H” class RetaPontilhada : public Reta { public: RetaPontilhada(); virtual ~RetaPontilhada(); void desenhar(); private: int espaço; }; Método de mesmo nome de método existente no pai: sobrepõe

30

31 Usando o Borland C++ Builder
Criando uma nova aplicação: File – New – other... – console wizard – OK File – Save as – (escolha diretorio e nome) - OK Criando uma nova classe: File – New – Unit File – Save as – (escolha nome da classe) – OK Edite o .h com as definições da classe Edite o .cpp com os métodos Dentro do main coloque só as criações de objetos e chamadas principais Para gerar executável: Project – Build project Para executar: Seta verde


Carregar ppt "Revisão de Orientação a Objetos e C++"

Apresentações semelhantes


Anúncios Google