#define TIPOS_H typedef struct { double x, y, z; /* coords x, y, z */ } XYZ; typedef struct {
double energia; /* energia em keV */
XYZ posicao; /* posicao do foton */
XYZ direcao; /* dir. de propagacao */
} foton;
typedef struct {
double energia, /* energia em keV*/
prob; /* probabilidade */
} espectro;
#include "tipos.h"
double Sortear_Valor(void);
double Sortear_Energia(espectro *lista,
int tam);
XYZ Sortear_Posicao(double foco);
Programação em C/C++
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <time.h> #include "tipos.h" #include "funcoes.h"double Sortear_Valor(void) {
return rand()/(double)RAND_MAX; }
double Sortear_Energia(espectro *lista,
int tam) {
double ene, /* energia sorteada */
eps; /* variavel auxiliar */
int i; /* contador */
for ( i=0; i<tam; i++ ) {
if (lista[i].prob>=eps) { ene = lista[i].energia; break; } } return ene; }
XYZ Sortear_Posicao(double foco) {
double raio, teta;
XYZ pos;
raio = 0.5*foco*Sortear_Valor(); teta = 2*M_PI*Sortear_Valor(); pos.x = raio*cos(teta);
Programação em C/C++
XYZ Sortear_Direcao(double abertura) {
double teta, xsi;
XYZ dir;
teta = abertura*Sortear_Valor(); xsi = 2*M_PI*Sortear_Valor(); dir.x = sin(teta)*cos(xsi); dir.y = sin(teta)*sin(xsi); dir.z = cos(teta);
return dir; }
Programação em C/C++
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <time.h> #include "funcoes.h"void main(int argc, char *argv[]) { int eventos = 10, tam;
int i;
double soma = 0, prob; foton hv; espectro *rx; FILE *fp,*fp1; if (argc > 1) { fp = fopen("espectro.txt","rt"); fscanf(fp,"%d",&tam); rx = (espectro *) malloc(tam*sizeof(espectro)); for ( i=0; i<tam; i++ ) {
fscanf(fp,"%lf",
&rx[i].energia); fscanf(fp,"%lf",&prob);
rx[i].prob = soma + prob; soma = rx[i].prob; #ifdef TESTE printf("Energia: %lf\t Prob. Acum: %lf\n", rx[i].energia,rx[i].prob); #endif } fclose(fp);
Programação em C/C++
#ifdef TESTE
fp = fopen("posicao.txt","wt"); fp1 = fopen("direcao.txt","wt"); #endif
for ( i=0; i<eventos; i++ ) {
hv.energia = Sortear_Energia(rx,tam); hv.posicao = Sortear_Posicao(1); hv.direcao = Sortear_Direcao(0.25*M_PI); #ifdef TESTE printf("Foton: energia= %7.3lf\n",hv.energia); printf(" posicao= (%7.3lf,%7.3lf,%7.3lf)\n", hv.posicao.x,hv.posicao.y, hv.posicao.z); printf(" direcao= (%7.3lf,%7.3lf,%7.3lf)\n", hv.direcao.x,hv.direcao.y, fprintf(fp,"%lf\t%lf\n", hv.posicao.x,hv.posicao.y); fprintf(fp1,"%lf\t%lf\t%lf\n", hv.direcao.x,hv.direcao.y, hv.direcao.z); #endif } #ifdef TESTE fclose(fp); fclose(fp1); #endif }
Programação em C/C++
◼
Programação Orientada a Objeto
❑ O que é esse paradigma?
❑ Qual a grande diferença dos demais modelos?
❑ O que muda na lógica de programação?
Programação em C/C++
◼
Programação Orientada a Objeto
❑ O paradigma (modelo) da programação orientada
a objeto está baseada na observação de que
algumas categorias de problemas podem ser
solucionadas através da adoção de elementos lógicos que englobam informações (dados) e
Programação em C/C++
◼
Programação Orientada a Objeto
❑ A solução propriamente dita é obtida através da
interação entre estes elementos lógicos.
❑ O processo de interação entre os elementos
lógicos ocorre através de trocas de estímulos.
❑ Computacionalmente, os elementos lógicos são
unidades de processamento de informação ou
unidades de execução e a troca de estímulos se
Programação em C/C++
◼
Programação Orientada a Objeto
❑ No jargão da programação orientada a objeto, a
unidade de execução é chamada de OBJETO.
❑ Um programa orientado a objeto é uma coleção
de OBJETOS (unidades de execução) que colaboram entre si através de trocas de
MENSAGENS para que a solução computacional se concretize.
Programação em C/C++
◼
Programação Orientada a Objeto
❑ Todo OBJETO é uma materialização de um
modelo.
❑ No jargão da programação orientada a objeto, um
modelo de objeto é chamado de CLASSE.
❑ Um OBJETO é um INSTANCIAMENTO de uma
Programação em C/C++
◼
Programação Orientada a Objeto
❑ A capacidade de implementação de soluções
lógicas em programação orientada a objeto depende diretamente das propriedades das CLASSES e OBJETOS.
❑ As CLASSES possuem três propriedades
básicas:
◼ Encapsulamento ◼ Hereditariedade
Programação em C/C++
◼
Programação Orientada a Objeto
❑ A propriedade de encapsulamento é a mais
básica das três propriedades.
❑ A programação orientada a objeto se baseia
naturalmente nesta propriedade.
❑ Ela diz respeito a capacidade da unidade lógica
de programação de incluir na sua concepção o agrupamento de dados e ações numa única entidade.
Programação em C/C++
◼
Programação Orientada a Objeto
❑ Ou seja, uma classe encapsula atributos (dados)
e métodos (ações).
❑ Sendo o objeto um instanciamento de uma
classe, ele transporta consigo os atributos e métodos encapsulados na classe.
❑ Este encapsulamento pode organizar os atributos
e os métodos como públicos, protegidos e privados, chamados de visibilidade do
Programação em C/C++
◼
Programação Orientada a Objeto
❑ Os atributos e métodos públicos podem ser
acessados diretamente por outros objetos.
❑ Os atributos e métodos protegidos e privados só
são acessados internamente.
❑ Normalmente, os métodos de uma classe são
declarados como públicos e os atributos, como protegidos ou privados.
Programação em C/C++
◼
Programação Orientada a Objeto
❑ A propriedade de hereditariedade responde à
capacidade de uma classe de transmitir para classes descendentes o seu conteúdo
encapsulado, isto é, seus atributos e métodos públicos e protegidos.
❑ Atributos e métodos privados só existem na
classe de objeto que as contêm.
Programação em C/C++
◼
Programação Orientada a Objeto
❑ A propriedade de herança também é um
mecanismo natural da programação orientada a objeto.
❑ Esta propriedade permite que as classes se
organizem em diferentes níveis (categorias) de complexidade (especialização).
❑ Uma classe pode tanto originar múltiplos
Programação em C/C++
◼
Programação Orientada a Objeto
❑ Os descendentes de uma classe podem
encapsular atributos e métodos próprios bem
como sobrescrever atributos e métodos herdados de seus ancestrais.
❑ Exemplo:
◼ Classe Radiação
❑ Atributo Protegido Energia ❑ Método Público LerEnergia()
Programação em C/C++
◼
Programação Orientada a Objeto
❑ Exemplo:
◼ Classe Radiação
❑ Método Público LerEnergia(valor)
▪ Energia ← valor
❑ Fim
❑ Método Público EscreverEnergia()
▪ Retornar Energia
Programação em C/C++
◼
Programação Orientada a Objeto
❑ Exemplo:
◼ Classe Partícula, descendente de Classe Radiação
❑ Atributo Protegido Massa ❑ Método Público LerMassa()
❑ Método Público EscreverMassa()
◼ Classe Onda, descendente de Classe Radiação
❑ Atributo Protegido Frequência ❑ Método Público LerFrequência()
Programação em C/C++
◼
Programação Orientada a Objeto
❑ Exemplo:
◼ Objeto Elétron, instância de Classe Partícula ◼ Elétron.LerEnergia(E)
◼ Elétron.LerMassa(m)
◼ E ← Elétron.EscreverEnergia() ◼ m ← Elétron.EscreverMassa()
Programação em C/C++
◼
Programação Orientada a Objeto
❑ Exemplo:
◼ Objeto Fóton, instância de Classe Onda ◼ Fóton.LerEnergia(E)
◼ Fóton.LerFrequência(f)
◼ E ← Fóton.EscreverEnergia() ◼ f ← Fóton.EscreverFrequência()
Programação em C/C++
◼
Modelagem de um tubo de raios X
E I
K K