Alexandre Suaide aula 3 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

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

... para pessoas que não sabem c++
... para pessoas que não sabem 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:
Classes C++ Class nome da classe { private: membros privados
Construção de Algoritmos AULA 07
Programação II Estruturas de Dados
Programação II Estruturas 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.
Vamos abordar o exemplo
Programação Orientada aos Objectos Paulo Marques Departamento de Eng. Informática Universidade de Coimbra Out/2005 Core C++: Uma abordagem.
Templates Traduzido de:
INF Computação Gráfica
Universidade Federal do Espírito Santo
Centro Integrado de Tecnologia da Informação
Matrizes clássicas e vectores em C++
Aula 8 Polimorfismo.
Classes e objetos P. O. O. Prof. Grace.
APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C AULA 04: Funções Maceió, Maio de 2010.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Introdução a Computação e Cálculo Numérico
Aula prática 13 Orientação a Objetos – C++ Parte 1
PROGRAMAÇÃO ESTRUTURADA II
METODOLOGIA PARA DESENVOLVIMENTO DE SISTEMAS Prof. Dr. rer. nat. Daniel D. Abdala 1.
Linguagem de Programação II
Programação II Estruturas de Dados Aula 02 - continuação
Programação I Aula 2 (Métodos)
Tipos Abstratos de Dados
Classes, Objetos, Atributos e Métodos JAVA
Curso de C/C++ Aula 9 Instrutor: Luiz Felipe Sotero
Programação em C++ Compiladores
Procedural vs. OO (Figuras Geométricas: Área do triângulo)
Técnicas de Desenvolvimento de Programas
Programação orientada a objectos em C++
Definição Classe Objeto Construtor de Classes Manipulando o objeto Namespace Utilização do namespace Herança Polimorfismo Encapsulamento Propriedades.
Prof. Silvestri – todos os direitos reservados SISTEMAS DISTRIBUIDOS Aula 5 Eduardo Silvestri
Aula prática 14 Orientação a Objetos – C++ Parte 2
Implementação Orientada a Objetos – Aula 03
Declarando e Chamando Funções
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Linguagens de Programação
Aula Prática 4 Monitoria IP/CC (~if669).
Aula Prática 3 Funções Monitoria Introdução à Programação.
Aula prática 3 Aprofundando em Funções Parâmetros de uma função Uso do return Execução Variáveis Global, local e estática Monitoria de Introdução à.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Estruturas Revisando: tipos de dados simples
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
Linguagens de Programação
Aula Prática 3 Funções Monitoria Introdução à Programação.
Bruno Inojosa MCP .NET Framework
Linguagem de Programação
Aula Prática 13 Orientação a Objeto Monitoria
Alexandre Suaide aula 2 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 16 Criado por Frederick H. Colclough, Colorado Technical University Templates (Gabaritos)
C++ e Root Alexandre Suaide aula 1.
Introdução a Orientação a Objetos
Introdução ao C++ para programadores OO Instrutores: Francisco Carvalho, João Paulo do Monte, Renato Viana Ferreira {fcfl, jpsml,
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
Módulo II Capítulo 1: Orientação a Objetos
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Implementação Orientada a Objetos – Aula 03 Atributos e Encapsulamento Prof. Danielle Martin/ Marcia Bissaco Universidade de Mogi das Cruzes
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Estrutura de Dados Prof. André Cypriano M. Costa
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.
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
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:

Alexandre Suaide aula 3 c++ e Root

Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de cinemática Aula 3 –Classes e objetos –ROOT como ferramenta de programação/análise Aula 4 –Classes e objetos no ROOT Aula 5 –Análise de dados no Pelletron (ScanROOT)

Estrutura de dados (struct) struct particula { float Z; float A; float ELAB; float ECM; float thetaLab; float thetaCM; }; struct reacao { particula proj; particula alvo; particula espalhada; particula recuo; float Q; }; Criando uma reação reacao OB; OB.proj.Z = 8; OB.proj.A = 16; OB.proj.ELAB = 64; OB.alvo.Z = 5; OB.alvo.A = 10; OB.espalhada.Z = 6; OB.espalhada.A = 12; OB.recuo.Z = 7; OB.recuo.A = 14; OB.Q = 0;

Estrutura de dados Note que os dados ficam muito melhores organizados nesta estrutura reacao/particula do que simplesmente em uma lista de variáveis –Emcapsulamento Todas informações relevantes estão contidas em uma mesma estrutura –Primeiro passo para programação orientada a objetos Mas alguma coisa está faltando… –O struct somente armazena dados

Objetos e programação orientada a objetos Um objeto é uma entidade completa que desempenha uma função específica –Todos os dados e métodos (funções) são internos ao objeto –Todo objeto é identificado por um nome Ex: um automóvel é um objeto. –Um ford-Ka é um objeto do tipo automóvel –Eu posso ter mais de 1 ford-Ka definido em uma rua de São Paulo porém eles são totalmente independentes –Eu posso construir tantos ford-Ka quanto necessários Os parâmetros de construção (cor, combustível, etc) são definidos unicamente –Eu posso destruir tantos ford-Ka quanto necessários

Classes e objetos em c++ Classes são os moldes para criação de um objeto em c++ Objetos são entidades concretas (espaço em memória) criados e organizados com estrutura definida pelas classes classe objetos

Classes podem ser derivadas de outras classes Em c++ há o conceito de derivação onde classes mais genéricas são criadas e funções/atributos muito específicos de um sub-conjunto são definidas em classes derivadas Classe genérica Classes derivadas Objetos

Na prática – definindo uma classe de objetos class Bla : public Blu { protected: ; private: ; public: ; Bla(); virtual ~Bla(); }; Define uma classe chamada Bla Esta classe é derivada da classe Blu (caso necessário) Os membros e funções definidas serão tratados como protegidos Os membros e funções definidas serão tratados como privados Os membros e funções definidas serão tratados como públicos Construtor da classe. Destrutor (~) da classe. As funções construtoras e destrutoras DEVEM ter o mesmo nome da classe

Membros de uma classe Os membros de uma classe podem ser variáveis, protótipos de funções, ponteiros ou até mesmo objetos de outras classes –Dependem da tarefa a ser executada Membros podem ser potected, private ou public –Public Não há restrições no acesso a estes membros, sejam em classes derivadas ou pelo usuário –Protected Só podem ser acessados pela própria classe ou classes derivadas –Private Só podem ser acessados pela própria classe Existe um tipo de classe chamada “friend” que pode acessar todos os membros de outra classe mas o seu uso não é recomendado.

Criando e usando classes Criando um objeto da classe teste –teste OBJ1(); –teste OBJ2(10); Utilizando uma classe –float x = OBJ1.c + OBJ2.c; –OBJ1.d = 10; –float y = OBJ2.func2(10); Chamadas ilegais –float s = OBJ1.a; –float k = OBJ1.b + OBJ2.func(1); class teste { protected: float a; int b; float func(float); public: float c; float d; int func2(float); teste(); teste(float); virtual ~teste(); };

Um exemplo prático: criando partículas nucleares Definiu-se uma classe chamada partícula –Incluimos o arquivo “math.h” pois a classe efetuará operações matemáticas –Há dois construtores nesta classe Posso inicializar os objetos de duas formas –Todos os membros são públicos –3 funções membros –6 variáveis membros Isto é só a definição. E o código para as funções? #include "math.h" #include using namespace std; class Particula { public: Particula(); Particula(float, float); virtual ~Particula(); float bind(); float mass(); void imprime(); float Z; float A; float N; float TL; float TC; float EL; }; Arquivo Particula.h

Como definir o código de uma função membro de uma classe? NOME_DA_CLASSE::NOME_DA_FUNCAO() O construtor recebe duas variáveis ZZ e AA que são utilizadas para inicializar o objeto O destrutor não faz nada A função bind() cálcula a energia de ligação deste núcleo A função mass() calcula a massa deste núcleo A função imprime() imprime informações sobre o objeto Particula::Particula(float ZZ, float AA) { Z = ZZ; A = AA; N = A-Z; EL = TL = TC = 0; } Particula::Particula() { Z = A = N = EL = TL = TC = 0; } Particula::~Particula() { } float Particula::bind() { // ver site para codigo fonte } float Particula::mass() { // ver site para codigo fonte } void Particula::imprime() { cout <<" A = "<<A<<" Z = "<<Z<<" mass = "<<mass()<<" EL = "<<EL <<" TL = "<<TL<<" TCM = "<<TC<<endl; } Arquivo Particula.h (continuação) Note que os membros são utilizados como se fossem variáveis normais

O arquivo Partícula.h Neste arquivo está definida a estrutura da classe bem como o código das funções membros –É comum separar em dois arquivos a definição (estrutura) do código das funções membros –É uma biblioteca separada Cada objeto criado desta classe é uma entidade de memória totalmente separada uma da outra e do resto do programa #include "math.h" #include using namespace std; class Particula { public: Particula(); Particula(float, float); virtual ~Particula(); float bind(); float mass(); void imprime(); float Z; float A; float N; float TL; float TC; float EL; }; Particula::Particula(float ZZ, float AA) { } Particula::Particula() { } Particula::~Particula() { } float Particula::bind() { } float Particula::mass() { } void Particula::imprime() { } O código foi suprimido somente para ficar legível

Como criar e usar este objeto? Note a criação do objeto P do tipo Particula Note como os membros são acessados Compilando o programa g++ -o teste teste.cxx Executando Prompt>./teste Entre Z e A: 6 12 Z = 6 A = 12 N = 6 bind = mass = #include "Particula.h" #include using namespace std; int main() { float Z,A; cout <<"Entre Z e A: "; cin >> Z >> A; Particula P(Z,A); cout <<"Z = "<<P.Z<<" A = "<<P.A <<" N = "<<P.N <<" bind "<<P.bind() <<" mass = "<<P.mass() <<endl; } Arquivo teste.cxx

Indo além… classes derivadas Vamos pensar na nossa situação da aula passada –Cálculo da cinemática de uma reação nuclear –4 partículas Feixe, alvo, partícula espalhada e recuo Ângulos das partículas espalhadas Energia do feixe Função claski() para cálculo da cinemática –Como fazer isto com objetos? Vamos definir uma classe Kin para descrever uma reação nuclear.

Definindo uma família de classes Cálculo de cinemática de colisões nucleares Kin ClasKin RelKin Classe básica de uma reação nuclear Feixe, alvo, partícula espalhada, recuo, energia, Q Classe derivada: Membros e métodos específicos para realizar os cálculos clássicos de uma colisão nuclear. Classe derivada: Membros e métodos específicos para realizar os cálculos relativísticos de uma colisão nuclear.

Criando a classe básica (Kin) A classe Kin define apenas as componentes necessárias para uma reação nuclear genérica –Feixe, alvo, etc. –Energia, Q Neste contexto, esta classe não depende se o cálculo será clássico ou relativístico #include "Particula.h" #include using namespace std; class Kin { public: Kin(); virtual ~Kin(); void imprime(); Particula feixe; Particula alvo; Particula espalhada; Particula recuo; float Q; }; Kin::Kin() { Q = 0; } Kin::~Kin() { } void Kin::imprime() { cout <<"Feixe: "; feixe.imprime(); cout <<"Alvo: "; alvo.imprime(); cout <<"Espalhada: "; espalhada.imprime(); cout <<"Recuo: "; recuo.imprime(); cout <<" Q da reacao = "<<Q<<endl<<endl; } Arquivo Kin.h

Criando a classe derivada para cálculo clássico (ClasKin) Note que a classe ClasKin é derivada da classe Kin –Todos os membros da classe Kin são também membros da classe ClasKin Note como os membros são utilizados no método calcula() Note que o construtor da classe ClasKin executa o construtor da classe Kin –ClasKin::ClasKin():Kin() #include "Kin.h" class ClasKin : public Kin { public: ClasKin(); virtual ~ClasKin(); void calcula(); }; ClasKin::ClasKin():Kin() { } ClasKin::~ClasKin() { } void ClasKin::calcula() { float pi = ; float AP=feixe.mass(); float AT=alvo.mass(); float AO=espalhada.mass(); float AR=recuo.mass(); float A0=sqrt(AO*(AO+AR-AT)/(AT*AR*(1.0+(Q/feixe.EL)*(AO+AR)/AT))); float AAR=A0*AR/AO; float X=A0*sin(espalhada.TL*pi/180); espalhada.TC = atan(X/sqrt(1.0-X*X))*180/pi+espalhada.TL; recuo.TC=-(180-espalhada.TC); recuo.TL=atan(sin(espalhada.TC*pi/180)/(cos(espalhada.TC*pi/180)- AAR))*180/pi; float RAT=AO/AR*pow((sin(espalhada.TL*pi/180)/sin(recuo.TL*pi/180)),2); espalhada.EL = (feixe.EL+Q)/(RAT+1.0); recuo.EL=feixe.EL+Q-espalhada.EL; return; } Arquivo ClasKin.h

Criando a classe derivada para cálculo relativístico (RelKin) Note que a classe RelKin é derivada da classe Kin –Todos os membros da classe Kin são também membros da classe ClasKin Note que o método calcula tem o mesmo nóme da classe ClasKin mas realiza operações relativísticas e não classicas Note que o construtor da classe RelKin executa o construtor da classe Kin –RelKin::RelKin():Kin() #include "Kin.h" class RelKin : public Kin { public: RelKin(); virtual ~RelKin(); void calcula(); }; RelKin::RelKin():Kin() { } RelKin::~RelKin() { } void RelKin::calcula() { // a geração do código fica como exercício return; } Arquivo RelKin.h

Criando a classe derivada para cálculo relativístico (RelKin) Para compilar no Linux –g++ -o teste2 teste2.cxx Note como os vários objetos Particula e ClasKin são criados e utilizados Note como nos trabalhamos os vários membros dos objetos Note que o programa fica mais intuitivo pois as variáveis que tem significado similares (Z, A, etc) têm o mesmo nome porém em objetos diferentes #include "ClasKin.h" #include using namespace std; int main() { float Z[4] = {8,5,6,7}; float A[4] = {16,10,12,14}; Particula P[4]; for(int i = 0;i<4;i++) { P[i].Z = Z[i]; P[i].A = A[i]; } ClasKin REACAO; REACAO.feixe = P[0]; REACAO.alvo = P[1]; REACAO.espalhada = P[2]; REACAO.recuo = P[3]; REACAO.Q = 0; REACAO.feixe.EL = 64; float TI = 10, TF = 30, DT = 5; for(float T = TI; T<=TF; T+=DT) { REACAO.espalhada.TL = T; REACAO.calcula(); REACAO.imprime(); } Arquivo teste2.cxx

Executando o programa

Resumo O que torna o c++ poderoso e versátil é a programação orientada a objetos Objetos são criados segundo os seus moldes, definidos pelas classes Classes podem derivar de outras classes, formando estruturas hierárquicas de objetos Baixem os arquivos do site e modifiquem os programas –Só a prática torna a gente familiar com este tipo de estrutura Próxima aula: ROOT