La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Programmazione orientata agli oggetti nel calcolo scientifico

Presentazioni simili


Presentazione sul tema: "Programmazione orientata agli oggetti nel calcolo scientifico"— Transcript della presentazione:

1 Programmazione orientata agli oggetti nel calcolo scientifico
Web site: htttp;//home.cern.ch/~innocent/corsobreveOO/ Luca Lista INFN Sezione di Napoli

2 Meccanismo client - server
messaggio Azione Potenza, 16/5/2001 Luca Lista

3 Oggetti che già conosciamo
Menu Bottoni Hyperlink Messaggi: Click Doppio click Seleziona Azioni: apri documento ... Potenza, 16/5/2001 Luca Lista

4 Esempio con JavaScript
Codice che gestisce i messaggi agli oggetti <A HREF=“ “ onMouseOver = “ foto.src = 'foto2.jpg' “ onMouseOut = “ foto.src = 'foto1.jpg' “ ><IMG NAME = "foto" SRC = "foto1.jpg" BORDER=0 ></A> oggetto javascript.html Potenza, 16/5/2001 Luca Lista

5 Cos’è un Oggetto? Definizione da vocabolario:
Il confinamento di informazioni e funzionalità in oggetti permette livelli maggiori di astrazione e semplifica la gestione di sistemi complessi. “Un oggetto è un’entità che si possa immaginare dotata di determinate caratteristiche e funzionalità”. Potenza, 16/5/2001 Luca Lista

6 Incapsulamento Interfaccia Implementazione
Definizione dei messaggi (metodi) possibili Unico punto di accesso per l’utente all’oggetto Implementazione Realizzazione dell’azione corrispondente a un messaggio Nascosta all’utente Dichiarazione di variabili private (attributi) che definiscono lo stato dell’oggetto Potenza, 16/5/2001 Luca Lista

7 Rappresentazione di un oggetto
Messaggio Metodo Attributo Attributo Attributo Potenza, 16/5/2001 Luca Lista

8 Gli oggetti come modello naturale
Gli oggetti nel software possono rappresentare entità del mondo reale Il primo uso di linguaggi a oggetti è stato fatto per effettuare simulazioni Interazioni tra diversi componenti scambio di messaggi = Potenza, 16/5/2001 Luca Lista

9 Simulazione: un Videogioco
Potenza, 16/5/2001 Luca Lista Attributi

10 Oggetti e Classi di Oggetti
Istanze (Oggetti) Orco Cavaliere Potenza, 16/5/2001 Luca Lista

11 Ereditarietà e Sottoclassi
Soldato Potenza, 16/5/2001 Luca Lista

12 Esempio: i soldati Tutti i soldati devono rispondere allo stesso messaggio: attacca! Il messaggio determina azioni diverse a seconda del tipo di soldato: Un arciere: lancia una freccia. Un fante: usa la spada. Un cavaliere: usa la lancia. Il giocatore comanda tutti soldati allo stesso modo. Potenza, 16/5/2001 Luca Lista

13 Concetti base del software “OO”
Classi e oggetti Incapsulamento Relazione di ereditarietà Polimorfismo Nella schermata del video-gioco ci sono uno decina di arcieri: ognuno di questi e’ un oggetto della classe Arciere. La classe definisce il comportamento: cioè che cosa gli oggetti di questa classe possono fare (l’interfaccia) e come (l’implementazione). I vari oggetti differiscono per il loro stato: I vari arcieri sono differenti e ognuno ha la sua posizione, il numero di frecce, quanto è e’ ferito etc. Queste informazioni sono incapsulate nell’oggetto come e incapsulata l’implementazione di ogni servizio. L’utente parla con l’oggetto attraverso un’interfaccia che si spera stabile: come internamente lo stato dell’oggetto è rappresentato e come ogni servizio sia implementato è nascosto e può essere quindi modificato senza dover modificare anche il codice dell’utente. Nel video-gioco vediamo anche che i vari personaggi hanno una interfaccia comune, muovono, attaccano etc, ma ognuno svolge quest'attività a modo suo. Questo comportamento è detto polimorfico ed è implemenrato attraverso la relazione di ereditarietà: Arciere, Falange, Catapulta ereditano tutti da una classe di base comune Personaggio che dichiara l’interfaccia comune, che viene poi specializzata in modo diverso dalle varie classi figlie. Potenza, 16/5/2001 Luca Lista

14 Classi astratte e polimorfismo
Diversi tipi di oggetti hanno comportamenti comuni che possono essere considerati in astratto: disegna, sposta, ingrandisci, etc. Potenza, 16/5/2001 Luca Lista

15 Vantaggi del polimorfismo
I messaggi comuni (sposta, ingrandisci, …) sono definiti in maniera astratta in nella classe di base forma Le sottoclassi li ereditano e li implementano in modo specifico Il programma client ignora i dettagli di implementazione e gestisce in modo omogeneo tutti i sottotipi di forma ereditarietà Potenza, 16/5/2001 Luca Lista

16 Perché programmare a oggetti?
non velocizza l’esecuzione dei programmi… non ottimizza l’uso della memoria... E allora perchè programmare a oggetti? Programmare a oggetti facilita la progettazione, lo sviluppo e il mantenimento di sistemi software molto complessi! Potenza, 16/5/2001 Luca Lista

17 Vantaggi dei programmi a oggetti
La programmazione ad oggetti consente di: Ridurre la dipendenza del codice di alto livello dalla rappresentazione dei dati l’accesso ai dati è mediato da un’interfaccia Riutilizzare del codice di alto livello definendo opportune classi astratte Sviluppare moduli indipendenti l’uno dall’altro I clienti che dipendono da interfacce che non dipendono dalla loro implementazione Le dipendenze da classi astratte sono più “leggere” Potenza, 16/5/2001 Luca Lista

18 Difetti del software non mantenibile
Rigidità Non può essere cambiato con faciltà Non può essere stimato l’impatto di una modifica Fragilità Una modifica singola causa una cascata di modifiche successive I bachi sorgono in aree concettualmente separate dalle aree dove sono avvenute le modifiche Non riusabilità Esistono molte interdipendenze, quindi non è possibile estrarre parti che potrebbero essere comuni Potenza, 16/5/2001 Luca Lista

19 Open/Closed principle
Un buon codice deve essere: Aperto a estensioni Le richieste di funzionalità del software sono in continua evoluzione Chiuso a modifiche Modificare un codice funzionante può introdurre bachi… La programmazione a oggetti, con il meccanismo delle classi astratte, permette di applicare questo principio Potenza, 16/5/2001 Luca Lista

20 Il ciclo di vita del software
Requirements Analysis Design Production Testing Maintenance Potenza, 16/5/2001 Luca Lista

21 Evoluzione di un progetto software
Modello a cascata Decomposizione completa del sistema dall’inizio Processo per singoli passi Integrazione alla fine Modello evolutivo Brevi cicli di sviluppo completi Scelte basate sulla valutazione dei rischi Integrazione continua Un prodotto completo è disponibile solo alla fine Un prototipo funzionante è disponibile sin dall’inizio Requirements Analysis Testing Design Production Potenza, 16/5/2001 Luca Lista

22 Metodi di programmazione
Grady Booch Jim Rumbaugh Ivar Jacobson Metodo Booch di Grady Booch OMT di Jim Rumbaugh Objectory (Use Cases) di Ivar Jacobson CRC di Rebecca Wirfs-Brock Notazione standard: UML uno standard OMG (Object Management Group), dal novembre 1997 Potenza, 16/5/2001 Luca Lista

23 Attributi e metodi, ereditarietà
Privati Atributi (dati) Publici Metodi (funzioni) Ereditarietà Protetti Potenza, 16/5/2001 Luca Lista

24 Relazioni di aggregazione
By reference (condivisa) un autista guida più automobili By value (possesso) una automobile possiede il suo motore Cardinalità relazione uno a uno, uno a molti Potenza, 16/5/2001 Luca Lista

25 Relazione di dipendenza
Non c’è nessuna associazione C’è comunque relazione di uso Potenza, 16/5/2001 Luca Lista

26 Software per fisica delle particelle
Potenza, 16/5/2001 Luca Lista

27 Kalman.inc Filter.f Sintassi oscura Tipo non controllato Dati globali
PARAMETER (NPLAN = 8, NSTOP = NPLAN-1, NSTOP5 = 5*NPLAN ) COMMON /GCFIT/ CSIX(6,0:NSTOP),CSIY(6,0:NSTOP) + ,CSIZ(6,0:NSTOP) + ,WW(5,5,0:NSTOP),DDT(5,5,0:NSTOP) + ,VV(5,5,0:NSTOP),SS(5,5,0:NSTOP) + ,CC(5,5,0:NSTOP) + ,CHI2,CHI2N,CHI2T,CHI2M + ,PLANI(3,4,0:NSTOP) DOUBLE PRECISION CSIX ,CSIY ,CSIZ ,WW ,DDT ,VV ,SS ,CC ,CHI2,CHI2N,CHI2T,CHI2M Kalman.inc SUBROUTINE FILTER(JSTOP,IFAIL) INTEGER JSTOP, IFAIL #include “Kalman.inc” DOUBLE PRECISION YDUM(5) * ** filter CALL DVADD(25,WW(1,1,JSTOP),WW(2,1,JSTOP), + VV(1,1,JSTOP),VV(2,1,JSTOP), + CC(1,1,JSTOP),CC(2,1,JSTOP)) CALL DSINV(5,CC(1,1,JSTOP),5,IFAIL) IF ( IFAIL.NE.0 ) THEN PRINT *,'DSINV IFAIL',IFAIL,' AT PLANE ',JSTOP CALL VZERO(CC(1,1,JSTOP),50) RETURN ENDIF CALL DMMPY(5,5,VV(1,1,JSTOP),VV(1,2,JSTOP),VV(2,1,JSTOP), + CSIZ(1,JSTOP),CSIZ(2,JSTOP), + YDUM(1), YDUM(2)) CALL DMMPA(5,5,WW(1,1,JSTOP),WW(1,2,JSTOP),WW(2,1,JSTOP), + CSIY(1,JSTOP),CSIY(2,JSTOP), CALL DMMPY(5,5,CC(1,1,JSTOP),CC(1,2,JSTOP),CC(2,1,JSTOP), + YDUM(1), YDUM(2), + CSIX(1,JSTOP),CSIX(2,JSTOP)) CSIX(6,JSTOP) = CSIY(6,JSTOP) * CHI2 DO J = 1,5 DO K=1,5 CHI2 = CHI2 + (CSIX(K,JSTOP)-CSIZ(K,JSTOP))*VV(K,J,JSTOP)* (CSIX(J,JSTOP)-CSIZ(J,JSTOP)) (CSIX(K,JSTOP)-CSIY(K,JSTOP))*WW(K,J,JSTOP)* (CSIX(J,JSTOP)-CSIY(J,JSTOP)) ENDDO END Filter.f Dati globali Modello dei dati esplicito Sintassi oscura Tipo non controllato Potenza, 16/5/2001 Luca Lista

28 Lo stesso codice in versione a oggetti
class KalmanStep { public: bool propagate(const KalmanStep& previous); bool filter() ; bool smooth(const KalmanStep& next); private: Vector5 csix; SimMatrix5 cc, ss, ww, vv; Vector5 csiy, csiz; Matrix5 ddt; Plane plane; double chi2; }; KalmanStep.h bool KalmanStep::filter() { bool fail = false; cc = ww + vv; cc.invert( fail ); if ( fail ) { cc.zero(); return false; } csix = cc * ( vv * csiz + ww * csiy ); chi2 += ( csix – csiz ) * vv * ( csix –csiz ) + ( csix – csiy ) * ww * ( csix – csiy ); return ! fail; } KalmanStep.cc Tipo dati controllato Sintassi “naturale” Dati incapsulati Modello dei dati nascosto Potenza, 16/5/2001 Luca Lista

29 Superfici e traiettorie
Nei rivelatori di tracciamento è necessario calcolare intersezioni tra curve (tracce) e superfici (elementi di rivelatore) Potenza, 16/5/2001 Luca Lista

30 Intersezione: implementazione
#include “Intersection.h” #include <math.h> #include “Surface.h” #include “Trajectory.h” const int maxIterations 20 const double sMax 1.e+6 const double accuracy1.e-3 double Intersection::sIntersect(double s1, double s2) { // algoritmo di Newton-Raphson double s = s1; double maxS = max(s1, s2); double minS = min(s1, s2); double d, delta; for( int j = 0; j < maxIterations; j++ ) Point p = _trajectory->position( s ); d = surface_->distance( p ); delta = surface_->derDist( p, trajectory_->direction( s ) ); double ds = - d / delta; double test = s + ds; Intersection.cc Implementazione dell’algoritmo // controlla che test è tra s1 e s2 if( (s1 - test) * (test - s2) < 0.0 ) { if ( s1 < s2 ) s += abs( d ); else s -= abs( d ); if( s > maxS || s < minS ) return sMax; } else s = test; if( abs(d) < accuracy ) return s; Point Intersection::intersect(double s1, double s2) return trajectory_->position(sIntersect(s1, s2)); Potenza, 16/5/2001 Luca Lista

31 Vantaggi del design a oggetti
Intersection usa solo: I metodi position e direction di un’oggetto Trajectory. I metodi distance e derDist di un oggetto Surface. E’ possibile aggiungere una nuova classe che modellizza una nuova Trajectory o una nuova Surface Intersection continua a funzionare senza modificare una linea di codice! E’ possibile rendere anche intersect un metodo astratto... Potenza, 16/5/2001 Luca Lista

32 Software dell’esperimento BABAR
Potenza, 16/5/2001 Luca Lista

33 Il rivelatore di muoni di BABAR
Identifica Muoni e adroni neutri (K0L) Rivelatore planare: 19 o 18 piani di camere per settore 65 (60) cm di ferro Rivelatore interno 2 livelli di rivelatori cilindrici Il segnale del rivelatore consiste nell’insieme delle strip che hanno prodotto un segnale rivelabile Potenza, 16/5/2001 Luca Lista

34 Modello a oggetti Gli oggetti incapsulano il comportamento di:
informazioni della ricostruzione (strip, hit, cluster,…) il modello geometrico del rivelatore (sector, layer, …) strategie e algoritmi (clusterizer, …) ecc. m cluster p cluster strip “hit” : 1D-cluster Potenza, 16/5/2001 Luca Lista

35 Modello a oggetti dei cluster
Il rivelatore è segmentato in settori 6  settori nella regione centrale 3 settori in ciascuna delle 4 porte 4 settori in  per il rivelatore cilindrico interno Ifr3DCluster: l’oggetto di base dei cluster planari. Tutta l’informazione è contenuta in un singolo settore. La geometria viene trattata in coordinate locali IfrInner3DCluster: La lettura stereo del rivelatore cilindrico richiede una clusterizzazione speciale per ridurre le intersezioni fittizie Ifr3DComposite: Un cluster fatto da segmenti in diversi settori. Le quantità misurate sono calcolate in modo ricorsivo IfrAbs3D: Tutti i tipi di cluster implementano la stessa interfaccia astratta. L’utente finale non conosce i dettagli di implementazione! Potenza, 16/5/2001 Luca Lista

36 Diagramma a classi Potenza, 16/5/2001 Luca Lista

37 Esempio di codice in C++
IfrAbs3D* ifr; // prendi un cluster … // calcola il numero di lunghezze di interazione double l = ifr->accept( ifrVstDouble(“interactionLengths”) ); // calcola il centro di gravita’ HepPoint c = ifr->accept( ifrVstPoint(“centerOfgravity”) ); // ha hit nel barrel? bool barrel = ifr->accept(ifrVstHasBool(“hasBarrel”) ); // calcola il numero di hit in ciascun layer int n[19]; for (int layer = 1; layer <= 19; layer++) n[ layer-1 ] = ifr->accept( ifrVstInt(“hitsInLayer”, layer) ); Potenza, 16/5/2001 Luca Lista

38 Diagramma del pattern “Visitor”
Ifr3DCluster accept (IfrClusterVisitor<T>& v) : T Ifr2DCluster IfrAbs3D accept (IfrClusterVisitor<T>&) : T Ifr3DComposite T IfrClusterVisitor operate (const Ifr3DCluster*) : T operate (const IfrInner3DCluster*) : T operate (const Ifr3DComposite*) : T operate (const Ifr2DCluster*) : T IfrInner3DCluster { return v.operate( this ); } 1..n IfrVstCenterOfGravity operate (const Ifr3DCluster*) : Hep3Vector operate (const IfrInner3DCluster*) : Hep3Vector operate (const Ifr3DComposite*) : Hep3Vector operate (const Ifr2DCluster*) : Hep3Vector IfrClusterVisitor{Hep3Vector} 2 Potenza, 16/5/2001 Luca Lista

39 Il modello geometrico del rivelatore
-_iterator #_parent -_component 0..1 0..1 1 1 1..* 1..* 1 1 IfrDetComponent -_components IfrDetIterator 0..1 0..1 1 1 0..1 0..1 IfrDetComposite IfrDetLeaf 1 1 IfrDetector IfrSector IfrLayer IfrView IfrFec IfrPlanarSector IfrCylindricalSector IfrSectorIterator IfrLayerIterator IfrViewIterator IfrBarrelSector IfrFwdCapSector IfrBarrelView IfrInnerView IfrFecIterator IfrBwdCapSector IfrInnerSector IfrEndCapView Potenza, 16/5/2001 Luca Lista

40 Organizzazione e dipendenze
Classi astratte Implementazioni concrete Potenza, 16/5/2001 Luca Lista

41 Linguaggi OO più usati nel calcolo scientifico
Utilizzato per applicazioni su larga scala Comprende anche la programmazione generica (Templates) Standard C++ Library (STL) disponibile Java Programmazione di Applet “portabili” Utilizzato per il web Le Applet sono incapsulabili in HTML Librerie grafiche native JavaScrips Usato per sviluppare pagine HTML “dinamiche” Gli oggetti sono i componenti della pagina web Link Immagini Finestre ecc. Potenza, 16/5/2001 Luca Lista

42 Conclusioni La programmazione a oggetti può aiutare a ridurre le dipendenze all’interno del codice e quindi lo sviluppo del programma ... … ma va utilizzato in maniera adeguata, progettando il codice prima di implementarlo. Attenzione: è facile scrivere un codice C++ traslitterando un codice F77, ma questo non produce grandi vantaggi! Potenza, 16/5/2001 Luca Lista

43 Fine Potenza, 16/5/2001 Luca Lista


Scaricare ppt "Programmazione orientata agli oggetti nel calcolo scientifico"

Presentazioni simili


Annunci Google