La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli.

Presentazioni simili


Presentazione sul tema: "Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli."— Transcript della presentazione:

1 Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

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

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

4 Luca ListaPotenza, 16/5/2001 Esempio con JavaScript javascript.html Codice che gestisce i messaggi agli oggetti oggetto

5 Luca ListaPotenza, 16/5/2001 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 è unentità che si possa immaginare dotata di determinate caratteristiche e funzionalità.

6 Luca ListaPotenza, 16/5/2001 Incapsulamento Interfaccia –Definizione dei messaggi (metodi) possibili –Unico punto di accesso per lutente alloggetto Implementazione –Realizzazione dellazione corrispondente a un messaggio –Nascosta allutente –Dichiarazione di variabili private (attributi) che definiscono lo stato delloggetto

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

8 Luca ListaPotenza, 16/5/2001 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 Interazioni tra diversi componenti scambio di messaggi =

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

10 Luca ListaPotenza, 16/5/2001 Oggetti e Classi di Oggetti OrcoCavaliere Classi Istanze (Oggetti)

11 Luca ListaPotenza, 16/5/2001 Ereditarietà e Sottoclassi SoldatoSoldato

12 Luca ListaPotenza, 16/5/2001 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. Esempio: i soldati

13 Luca ListaPotenza, 16/5/2001 Concetti base del software OO Classi e oggetti Incapsulamento Relazione di ereditarietà Polimorfismo

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

15 Luca ListaPotenza, 16/5/2001 Vantaggi del polimorfismo astrattaI messaggi comuni (sposta, ingrandisci, …) sono definiti in maniera astratta in nella classe di base forma ereditanoLe 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à

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

17 Luca ListaPotenza, 16/5/2001 Vantaggi dei programmi a oggetti La programmazione ad oggetti consente di: –Ridurre la dipendenza del codice di alto livello dalla rappresentazione dei dati laccesso ai dati è mediato da uninterfaccia –Riutilizzare del codice di alto livello definendo opportune classi astratte –Sviluppare moduli indipendenti luno dallaltro I clienti che dipendono da interfacce che non dipendono dalla loro implementazione Le dipendenze da classi astratte sono più leggere

18 Luca ListaPotenza, 16/5/2001 Difetti del software non mantenibile Rigidità –Non può essere cambiato con faciltà –Non può essere stimato limpatto 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

19 Luca ListaPotenza, 16/5/2001 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

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

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

22 Luca ListaPotenza, 16/5/2001 Metodi di programmazione –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 Grady Booch Jim Rumbaugh Ivar Jacobson

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

24 Luca ListaPotenza, 16/5/2001 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

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

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

27 Luca ListaPotenza, 16/5/2001 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), + 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 * END Filter.f Dati globali Modello dei dati esplicito Sintassi oscura Tipo non controllato

28 Luca ListaPotenza, 16/5/2001 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 Dati incapsulati Modello dei dati nascosto Sintassi naturale Tipo dati controllato Lo stesso codice in versione a oggetti

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

30 Luca ListaPotenza, 16/5/2001 Intersezione: implementazione Implementazione dellalgoritmo #include Intersection.h #include #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 // 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; } Point Intersection::intersect(double s1, double s2) { return trajectory_->position(sIntersect(s1, s2)); }

31 Luca ListaPotenza, 16/5/2001 Vantaggi del design a oggetti Intersection usa solo: –I metodi position e direction di unoggetto 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 I ntersection continua a funzionare senza modificare una linea di codice! E possibile rendere anche intersect un metodo astratto...

32 Luca ListaPotenza, 16/5/2001 Software dellesperimento B A B AR

33 Luca ListaPotenza, 16/5/2001 Il rivelatore di muoni di B A B AR Identifica Muoni e adroni neutri (K 0 L ) 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 nellinsieme delle strip che hanno prodotto un segnale rivelabile

34 Luca ListaPotenza, 16/5/2001 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

35 Luca ListaPotenza, 16/5/2001 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:Ifr3DCluster: loggetto di base dei cluster planari. –Tutta linformazione è contenuta in un singolo settore. –La geometria viene trattata in coordinate locali IfrInner3DCluster:IfrInner3DCluster: La lettura stereo del rivelatore cilindrico richiede una clusterizzazione speciale per ridurre le intersezioni fittizie Ifr3DComposite:Ifr3DComposite: Un cluster fatto da segmenti in diversi settori. Le quantità misurate sono calcolate in modo ricorsivo IfrAbs3D:IfrAbs3D: Tutti i tipi di cluster implementano la stessa interfaccia astratta. Lutente finale non conosce i dettagli di implementazione!

36 Luca ListaPotenza, 16/5/2001 Diagramma a classi

37 Luca ListaPotenza, 16/5/2001 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) );

38 Luca ListaPotenza, 16/5/2001 Diagramma del pattern Visitor Ifr3DCluster accept (IfrClusterVisitor & v) : T Ifr2DCluster accept (IfrClusterVisitor & v) : T IfrAbs3D accept (IfrClusterVisitor &) : T Ifr3DComposite accept (IfrClusterVisitor & v) : T T T IfrClusterVisitor operate (const Ifr3DCluster*) : T operate (const IfrInner3DCluster*) : T operate (const Ifr3DComposite*) : T operate (const Ifr2DCluster*) : T IfrInner3DCluster accept (IfrClusterVisitor & v) : T { { 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 2

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

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

41 Luca ListaPotenza, 16/5/2001 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.

42 Luca ListaPotenza, 16/5/2001 Conclusioni La programmazione a oggetti può aiutare a ridurre le dipendenze allinterno 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!

43 Luca ListaPotenza, 16/5/2001 Fine


Scaricare ppt "Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli."

Presentazioni simili


Annunci Google