1 / 43

Programmazione orientata agli oggetti nel calcolo scientifico

Programmazione orientata agli oggetti nel calcolo scientifico. Luca Lista INFN Sezione di Napoli. Meccanismo client - server. server. client. messaggio. Azione. Oggetti che già conosciamo. Menu. Messaggi : Click Doppio click Seleziona … Azioni: apri documento. Bottoni.

thalia
Télécharger la présentation

Programmazione orientata agli oggetti nel calcolo scientifico

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programmazione orientata agli oggettinel calcolo scientifico Luca Lista INFN Sezione di Napoli

  2. Meccanismo client - server server client messaggio Azione Luca Lista

  3. Oggetti che già conosciamo Menu • Messaggi: • Click • Doppio click • Seleziona • … • Azioni: • apri documento • ... Bottoni Hyperlink 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 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 caratteristichee funzionalità”. Luca Lista

  6. Incapsulamento • Interfaccia • 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 Luca Lista

  7. Messaggio Metodo Messaggio Metodo Metodo Messaggio Rappresentazione di un oggetto Attributo Attributo Attributo 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 = Luca Lista

  9. Simulazione: un Videogioco Luca Lista Attributi

  10. Oggetti e Classi di Oggetti Classi Istanze (Oggetti) Orco Cavaliere Luca Lista

  11. Ereditarietà e Sottoclassi Soldato 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. Luca Lista

  13. Concetti base del software “OO” • Classi e oggetti • Incapsulamento • Relazione di ereditarietà • Polimorfismo Luca Lista

  14. Classi astratte e polimorfismo • Diversi tipi di oggetti hanno comportamenti comuni che possono essere considerati in astratto: • disegna, sposta, ingrandisci, etc. 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à Luca Lista

  16. Perché programmare a oggetti? • Programmarea 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! 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 sonopiù “leggere” 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 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 Luca Lista

  20. Il ciclo di vita del software • Requirements • Analysis • Design • Production • Testing • Maintenance 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 Luca Lista

  22. Grady Booch Jim Rumbaugh Ivar Jacobson Metodi di programmazione • Metodo Booch di Grady Booch • OMTdi 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 Luca Lista

  23. Attributi e metodi, ereditarietà Privati Atributi (dati) Publici Metodi (funzioni) Ereditarietà Protetti 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 Luca Lista

  25. Relazione di dipendenza • Non c’è nessuna associazione • C’è comunque relazione di uso Luca Lista

  26. Software per fisica delle particelle Luca Lista

  27. Kalman.inc Filter.f 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 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), + YDUM(1), YDUM(2)) 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 ENDDO * END Dati globali Modello dei dati esplicito Sintassi oscura Tipo non controllato Luca Lista

  28. KalmanStep.h KalmanStep.cc 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; }; 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; } Lo stesso codice in versione a oggetti Tipo daticontrollato Sintassi “naturale” Dati incapsulati Modello dei dati nascosto Luca Lista

  29. Superfici e traiettorie • Nei rivelatori di tracciamento è necessario calcolare intersezioni tra curve (tracce) e superfici (elementi di rivelatore) Luca Lista

  30. Intersection.cc #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 diNewton-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; Intersezione: implementazione • 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; } return sMax; } PointIntersection::intersect(double s1, double s2) { return trajectory_->position(sIntersect(s1, s2)); } 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 • Intersectioncontinua a funzionare senza modificare una linea di codice! • E’ possibile rendere anche intersectun metodo astratto... Luca Lista

  32. Software dell’esperimento BABAR 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 Luca Lista

  34. mcluster pcluster 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. strip “hit” : 1D-cluster 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! Luca Lista

  36. Diagramma a classi 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) ); Luca Lista

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

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

  40. Organizzazione e dipendenze Classi astratte Implementazioni concrete Luca Lista

  41. Linguaggi OO più usati nel calcolo scientifico • C++ • 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. 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! Luca Lista

  43. Fine Luca Lista

More Related