Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoTerenzio Franchi Modificato 10 anni fa
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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.