INF Computação Gráfica

Slides:



Advertisements
Apresentações semelhantes
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 10 Criado por Frederick H. Colclough, Colorado Technical University Ponteiros e Vetores.
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:
Paulo Marques Hernâni Pedroso
Introdução à Programação Orientada à Objetos Prof. Daniel Merli Lamosa Maio de 2002.
Classes C++ Class nome da classe { private: membros privados
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Perspectivas baseadas em procedimentos e orientadas por objectos Conceitos principais: Encapsulamento, Herança, Polimorfismo (Encapsulation, Hierarchy,
TADS – Tipos Abstratos de Dados
Programação Básica em Java
Alocação Dinâmica de Memória
Traçado de Raios e Modelos de Iluminação por Marcelo Gattass Departamento de Informática PUC-Rio.
Sobrecarga de Operadores
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Orientação a Objetos Classes
Curso de C/C++ Avançado
Centro Integrado de Tecnologia da Informação
Centro Integrado de Tecnologia da Informação
Slides: Prof. João Fabro UTFPR - Curitiba
1 Aula 7 Herança. 2003/2004 Programação Orientada para Objectos 2 Conceitos fundamentais: Herança Polimorfismo Ligação dinâmica.
2002/2003 Programação Orientada para Objectos 1 Aula 5 Memória livre e instâncias dinâmicas Criação de instâncias dinâmicas Destruição de instâncias dinâmicas.
Classes & Objectos em JAVA5
Classes e objetos P. O. O. Prof. Grace.
Aula prática 13 Orientação a Objetos – C++ Parte 1
Funções (versão C/C++)
INTELIGÊNCIA ARTIFICIAL
Árvores Binárias de Pesquisa
TAD Pilha com Alocação Dinâmica de Memória
Implementação de FILAS com Alocação Dinâmica
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem de Programação II
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Revisão de Orientação a Objetos e C++
Aula 3 CoL, atividade Polimorfismo (late binding) Modificador final Modificador abstract Interfaces Herança múltipla Atribuição, Construtores, Destrutores,
Programação I Aula 2 (Métodos)
Prof. Ricardo Santos PONTEIROS
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
Tipos Abstratos de Dados
Compilação de Linguagens OO Marco Simões (macs3) André Santos (alms)
Traçado de Raios e Modelos de Iluminação por Marcelo Gattass Departamento de Informática PUC-Rio.
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++
2002/2003 Programação Orientada para Objectos 1 Aula 6 Classes que reservam recursos externos Problemas comuns Construtores e destrutores Construção por.
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Java Kickstart, day 2 Semelhanças com linguagem C.
Classes Abstratas P. O. O. Prof. Ângela e Grace.
Aula Prática 4 Monitoria IP/CC (~if669).
Prof.: Bruno Rafael de Oliveira Rodrigues. Construtor é bloco declarado que é chamado no momento em que o Objeto é criado (instanciado). Todas as classes.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Construtores e Destrutores
Bruno Inojosa MCP .NET Framework
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
Classes abstratas São classes das quais não se pode instanciar objetos. São classes das quais não se pode instanciar objetos. Seu objetivo é ser herdada.
Ponteiros em C Prof. Kariston Pereira
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
1 Orientação a Objetos - Programação em C++ 1 o Slides – B : Introdução à OO/C++ Passando à Pratica – Estruturas, Classes e Objetos Engenharia Eletrônica.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ PAE: Pedro Shiguihara Professor: Dilvan Moreira.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

INF1761 - Computação Gráfica

Orientação por Objetos Dados são modelados não apenas pela sua representação, mas principalmente pelo seu comportamento Objetos são um TAD: representação interna + conjunto de operações Variáveis da aplicação são objetos Classes são os tipos dos objetos Funções dos objetos são chamadas métodos

Classes em C++ X typedef struct { double xc, yc; double raio; } Circulo; double area( Circulo e ) { return 3.14159 * e.raio * e.raio; } int interior( Circulo e, double x, double y) { … } C X struct Circulo{ double xc, yc; double raio; double area() { return 3.14159 * raio * raio; } int interior(double x, double y) { … } }; C++

Objetos em C++ Circulo c; c.x = 3.2; c.y = 4.5; c.raio = 6.5; printf(“%d”, area( c )); if (interior( c, 9.5, 2 )) … C Circulo c; c.x = 3.2; c.y = 4.5; c.raio = 6.5; printf(“%d”, c.area()); if (c.interior( 9.5, 2 )) … C++

Encapsulamento Declarações equivalentes class Classe { int c, b; class: default é private struct: default é public class Classe { int c, b; public: int a, d; void set_c( int val ) { c = val; } }; struct Classe { private: int c, b; public: int a, d; void set_c( int val ) { c = val; } }; Classe obj; obj.a = 1; // ok obj.c = 0; // erro - campo c é privado obj.set_c( 0 ); // agora sim

Construtores e Destrutores Métodos chamados implicitamente quando o objeto é criado e quando é destruído. class Classe{ public: Classe() { printf(“construtor\n”); } ~Classe() { printf(“destrutor\n”); } }; void f() { Classe p1, p2; // p1 e p2 criados printf( “funcao f\n” ); // p1 e p2 destruídos } construtor funcao f destrutor Execução de f

Construtores com parâmetros Construtores podem ter parâmetros (destrutores não!). Além disso, uma classe pode ter mais de um construtor, desde que eles recebam parâmetros diferentes. class Circulo{ double xc, yc; double raio; public: Circulo( double x, double y, double r) { xc=x; yc=y; raio=r;} … }; Circulo c1( 3.2, 4.5, 9.0 ); // obriga a inicialização Circulo c2; // erro, não tem construtor sem parâmetros c1.xc = 4; // erro, campo xc é privado

Alocação dinâmica Circulo *c1, *c2; class Circulo{ … public: Circulo(); Circulo( double x, double y, double r); ~Circulo(); }; Circulo *c1, *c2; c1 = new Circulo; // cria um objeto da classe Circulo, // alocando memória e chamando o // construtor Circulo() c2 = new Circulo( 3.2, 4.5, 9.0 ); // cria outro, // agora com o outro construtor … delete c2; // destroi o objeto apontado por c2: // chama o destrutor e desaloca memória delete c1; // idem

Herança Herda da classe Circulo (classe base) class CirculoColorido : public Circulo { int cor; public: CirculoColorido( double x, double y, double r, int c) : Circulo( x, y, r ) { cor = c; } void troca_cor( int c ) { cor = c; } }; Inicializa a classe base antes de entrar no construtor CirculoColorido c( 1.0, 3.4, 3.2, VERDE ); c.troca_cor( AZUL ); double a = c.area(); // ok, CirculoColorido tem tudo de Circulo

Representação dos objetos Circulo Circulo* double xc double yc double raio Representação da classe Circulo CirculoColorido CirculoColorido* double xc double yc double raio Representação da classe Circulo int cor Declarado em CirculoColorido

Conversão de objetos int intersecta( Circulo *c1, Circulo *c2 ); c1 = new Circulo(3, 4, 2); c2 = new Circulo(3.5, 3.3, 1 ); if (intersecta(c1, c2)) … CirculoColorido *c3; c3 = new CirculoColorido( 2.5, 1, 3 ); if (intersecta(c1, c3)) …

Polimorfismo class A { virtual void nome() { printf(“classe A\n”); } }; class B : public A { virtual void nome() { printf(“classe B\n”); } A *pa; // ponteiros para objetos da classe A A* obj_a = new A; // cria objeto da classe A B* obj_b = new B; // cria objeto da classe B pa = obj_a; // pa aponta para um objeto da classe A pa->nome(); // chama o metodo <nome> de A pa = obj_b; // pa aponta para um objeto da classe B pa->nome(); // chama o metodo <nome> de B!!!

Abstraindo as implementações dos objetos rtColor trace ( rtRay ray, int depth) { determine a interseção mais próxima com um objeto if (intercepta objeto) calcule a normal no ponto de interseção return ( shade ( object, ray, intersection, normal, depth); } return BACKGROUND; Que métodos um objeto da cena precisa ter para permitir a implementação desta função? class Objeto3D { public: virtual double intersecta( Raio r ) = 0; virtual Vetor3D normal( Vetor3D ponto ) = 0; };

Implementando a função trace Objeto3D* objetos[MAX_OBJETOS]; int n_objetos; Cor trace( Raio ray, int depth ) { int mais_proximo; double dist = -1; for (int i=0; i<n_objetos; i++) double d = objetos[i]->intersecta(ray); if (d > 0 && (dist==-1 || d < dist)) dist = d; mais_proximo = i; } ... rtColor trace ( rtRay ray, int depth) { determine a interseção mais próxima com um objeto ...

Implementando a função trace ... if (dist > 0) { Vetor3D ponto_de_inter = ray.ponto( dist ); Vetor3D normal = objetos[mais_proximo]->normal( ponto_de_inter); return shade(objetos[mais_proximo], ray, ponto, normal, depth ); } else return BACKGROUND; ... if (intercepta objeto) { calcule a normal no ponto de interseção return ( shade ( object, ray, intersection, normal, depth); } return BACKGROUND;

Referência de C++ The C++ Programming Language 3a Edição B. Stroustrup Addison-Wesley, 1997