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

Slides:



Advertisements
Apresentações semelhantes
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 11 Criado por Frederick H. Colclough, Colorado Technical University Compilação Separada.
Advertisements

Curso de aprofundamento na linguagem C
ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Introdução à Ciência da Computação Linguagens de Programação.
Classes C++ Class nome da classe { private: membros privados
Algoritmos de manipulação de estruturas elementares de dados
List templates Vamos considerar a lista ligada (singly linked list) O objecto da classe slink O objecto da classe slink O objecto da classe slink NULL.
Polimorfismo e Acoplamento Dinâmico
Templates Traduzido de:
2002 LCG/UFRJ. All rights reserved. 1 Tópicos em C++ Claudio Esperança Paulo Roma Cavalcanti.
Alocação Dinâmica de Memória
INF Computação Gráfica
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Ponteiros em C.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Curso de C/C++ Avançado
Centro Integrado de Tecnologia da Informação
Centro Integrado de Tecnologia da Informação
Documentando con Javadoc
Escola Secundária c/ 3º CEB da Batalha
Aula 8 Polimorfismo.
1 Aula 7 Herança. 2003/2004 Programação Orientada para Objectos 2 Conceitos fundamentais: Herança Polimorfismo Ligação dinâmica.
Programação Orientada para Objectos
Classes e objetos P. O. O. Prof. Grace.
Linguagem técnica de programação I Java – REVISÃO
Professor Reverton de Paula Faculdade Anhanguera de Indaiatuba
Concorrência em Java Threads em Java.
Programação II Prof.: Bruno Rafael de Oliveira Rodrigues.
Programação Orientada a Objetos com Java
Revisão /*======================================================*/
Aula prática 13 Orientação a Objetos – C++ Parte 1
C# Sharp Shooters.NET Universidade Federal de Pernambuco Centro de Informática Recife, 23/09/2002 Autor: Marden Menezes Costa Propriedades.
Objectos: Introdução O objecto ou classe é o conceito base de uma linguagem de programação por objectos como o C++. Tal como acontecia com as estruturas,
Uma classe para vectores
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Programação I Aula 2 (Métodos)
Paradigmas e Ferramentas de Desenvolvimento de Software – Revisão da linguagem C++ Lúbia Vinhas DPI - INPE.
+ Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
+ Curso de C/C++ Aula 7 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
Compilação de Linguagens OO Marco Simões (macs3) André Santos (alms)
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Programação orientada a objectos em C++
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Aula prática 14 Orientação a Objetos – C++ Parte 2
Prof.: Bruno Rafael de Oliveira Rodrigues. Construtor é bloco declarado que é chamado no momento em que o Objeto é criado (instanciado). Todas as classes.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Herança e Arquitetura em camadas
Programação I Aula 11 (Arrays de Objetos) Prof. Gilberto Irajá Müller Última atualização 27/5/2009.
Construtores e Destrutores
Novidades... Quartetos; – Equilibrar Conhecimento; – Aprender a Ensinar; – Trabalho em Equipe; – Facilitar a Vida do Professor. – Então, definam seus grupos.
Prof. Marcos LABORATÓRIO DE PRÁTICA DE PROGRAMAÇÃO 06.
Orientação a Objetos Paradigma. Davi Pires Revisão Dúvidas da aula passada? –Características de Java –Compilador vs. Interpretador.
Introdução ao C++ para programadores OO Instrutores: Francisco Carvalho, João Paulo do Monte, Renato Viana Ferreira {fcfl, jpsml,
Ponteiros em C Prof. Kariston Pereira
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Linguagem de Programação
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Alocação Dinâmica de Memória e Tipo Abstrato de Dados Cristiano Arbex Valle Vinicius Fernandes dos Santos
Orientação a Objetos - Programação em C++ Slides 17: Programação Visual ou Orientada a Objetos Gráficos (Formulários, Botões, Caixas de Texto etc) – Exemplificado.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ PAE: Pedro Shiguihara Professor: Dilvan Moreira.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Transcrição da apresentação:

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

Bibliografia http://www.brasil.terravista.pt/magoito/2090/C.html http://www.inf.pucrs.br/~manssour/LinguagemC++/ 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. http://www.brasil.terravista.pt/magoito/2090/C.html

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

Orientação a objetos

Orientação a objetos

Orientação a objetos

Orientação a objetos

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

// 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

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

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.

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.

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,

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)

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

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

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

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

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.

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.

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

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

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;

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.

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.

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

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

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

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