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++ Remis Balaniuk.

Apresentações semelhantes


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

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

2 Bibliografia ECKEL, Bruce, C++ Guia do Usuário. Makron Books, WIENER, Richard S.; PINSON, Lewis. C++ Programação Orientada para Objeto – Manual Prático e Profissional. Makron Books, C.html

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

4 Orientação a objetos

5

6

7

8

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

10 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 // indica inicio de comentário

11 #include Reta.H #include 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? #include controller.h // define gui //... gui.H #include gui.h class Controller { //... private: Gui* myGui; //... }; controller.H

15 Forward Declarations Num header file, incluir só o necessário. 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

16 Compilation Preprocessor Inlines #includes etc. Compiler Translates to machine code Associates calls with functions Linker Associates functions with definitions Object files 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 #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 #include Ponto.H Ponto::Ponto(double x,double y) { posicao[0]=x; posicao[1]=y; } Ponto ::~ Ponto () { } Ponto ::move(double x,double y) { posicao[0]=x; posicao[1]=y; } Ponto.CPP

19 Polimorfismo #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.

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.

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

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

26 Stack vs. Heap On the Heap / Dynamic allocation On the Stack / Automatic allocation drawStuff() { Ponto *p = new Ponto(); p->move(10,10); //... } drawStuff() { Ponto p(); p.move(5,5); //... }

27 Resumo do Header File Início do header guard header file forward declaration declaração da classe constructor destructor final header guard atributos da classe (não podem ser acessados diretamente) não esqueça o ; #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 demais métodos

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

29 Como funciona a herança? Precisa incluir o header da classe pai aqui RetaPontilhada herda propriedades de Reta (cor, espessura e pontos) #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++ Remis Balaniuk."

Apresentações semelhantes


Anúncios Google