programmazione orientata agli oggetti nel calcolo scientifico luca lista infn sezione di napoli

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

Upload: terenzio-franchi

Post on 01-May-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

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

Programmazione Programmazione orientata agli oggettiorientata agli oggetti

nel calcolo scientificonel calcolo scientifico

Luca Lista

INFN Sezione di Napoli

Page 2: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Meccanismo client - serverMeccanismo client - server

messaggiomessaggio

AzioneAzione

clientclient

serverserver

Page 3: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

OggettiOggetti che già conosciamo che già conosciamo

Bottoni

Menu

Hyperlink

• Messaggi:– Click– Doppio click– Seleziona– …

• Azioni:– apri documento– ...

Page 4: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

<A HREF=“ “ onMouseOveronMouseOver = “ foto.srcfoto.src = 'foto2.jpg' “ onMouseOutonMouseOut = “ foto.srcfoto.src = 'foto1.jpg' “ ><IMG NAME = "fotofoto" SRC = "foto1.jpg" BORDER=0 ></A>

<A HREF=“ “ onMouseOveronMouseOver = “ foto.srcfoto.src = 'foto2.jpg' “ onMouseOutonMouseOut = “ foto.srcfoto.src = 'foto1.jpg' “ ><IMG NAME = "fotofoto" SRC = "foto1.jpg" BORDER=0 ></A>

Esempio con JavaScriptEsempio con JavaScript

javascript.html

• Codice che gestisce i messaggi agli oggetti

oggettooggetto

Page 5: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Cos’è un Cos’è un OggettoOggetto??

• 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à”.

“Un oggetto è un’entità che si

possa immaginare dotata di

determinate caratteristiche

e funzionalità”.

Page 6: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

IncapsulamentoIncapsulamento

• 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

Page 7: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

RappresentazioneRappresentazione di un oggetto di un oggetto

MessaggioMessaggio

Messaggio

Metodo

Metodo

MetodoAttributo

Attributo

Attributo

Page 8: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Gli oggetti come modello naturaleGli 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=

Page 9: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Simulazione: un VideogiocoSimulazione: un Videogioco

AttributiAttributi

Page 10: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Oggetti e Classi di OggettiOggetti e Classi di Oggetti

OrcoOrco CavaliereCavaliere

Classi

Istanze (Oggetti)

Page 11: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Ereditarietà e SottoclassiEreditarietà e Sottoclassi

SoldatoSoldatoSoldatoSoldato

Page 12: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

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 soldatiEsempio: i soldati

Page 13: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Concetti base del software “OO”Concetti base del software “OO”

• Classi e oggetti

• Incapsulamento

• Relazione di ereditarietà

• Polimorfismo

Page 14: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Classi astratte e polimorfismoClassi astratte e polimorfismo

• Diversi tipi di oggetti hanno comportamenti comuni che possono essere considerati in astratto:– disegna, sposta, ingrandisci, etc.

Page 15: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Vantaggi del polimorfismoVantaggi del polimorfismo

• I messaggi comuni (sposta, ingrandisci, …) sono definiti in maniera astrattaastratta in nella classe di base forma

• Le sottoclassi li ereditanoereditano e li implementano in modo specifico• Il programma client ignora i dettagli di implementazione e

gestisce in modo omogeneo tutti i sottotipi di forma

Forma

sposta(x, y)ingrandisci(sx, sy)

Rettangolo

lato_xlato_y

Cerchio

raggiocentro_xcentro_y

Poligono

latonumero_laticentro_xcentro_y

Testo

testoposizione_xposizione_yfontdimensione_font

Client

ereditarietà

Page 16: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Perché programmare aPerché programmare a oggetti oggetti??

• 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!

Page 17: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Vantaggi dei programmi a oggettiVantaggi 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”

Page 18: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Difetti del software Difetti del software non mantenibilenon 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

Page 19: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Open/Closed principleOpen/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

Page 20: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Il Il ciclo di vitaciclo di vita del software del software

• Requirements• Analysis• Design• Production• Testing• Maintenance

Page 21: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Evoluzione di un progetto softwareEvoluzione 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 dall’inizio

• Processo per singoli passi

• Integrazione alla fine

Un prodotto completo è disponibile solo alla fine

Un prototipo funzionante è disponibile sin dall’inizio

RequirementsRequirements

AnalysisAnalysis

DesignDesignProductionProduction

TestingTesting

Page 22: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Metodi di programmazioneMetodi 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

Page 23: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Attributi e metodi, ereditarietàAttributi e metodi, ereditarietà

Plane

_distance : double_nor : Vector_origin : Point

distance()derDist()

Surface

id : int

distance()derDist()

Cylinder

Publici

Protetti

Metodi (funzioni)

Atributi (dati)Privati

Ereditarietà

Page 24: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Relazioni di aggregazioneRelazioni di aggregazione

By reference (condivisa)• un autista guida più automobili

By value (possesso)• una automobile possiede il suo motore

Autista

Motore

Automobile

PointPolygone

1 1..*1..*1

-_pointsCardinalità• relazione uno a uno, uno a molti

Page 25: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Relazione di dipendenzaRelazione di dipendenza

CDPlayer

play(CD& theCd)

CD

• Non c’è nessuna associazione• C’è comunque relazione di uso

Page 26: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Software per fisica delle particelleSoftware per fisica delle particelle

Page 27: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

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.incSUBROUTINE 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

Filter.f

Dati Dati globaliglobaliModello Modello deidei dati esplicito dati esplicito

SintassiSintassi oscura oscura

Tipo non controllatoTipo non controllato

Page 28: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

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.hbool 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 Dati incapsulatiincapsulatiModello dei dati nascostoModello dei dati nascosto

Sintassi “naturale”Sintassi “naturale”

Tipo datiTipo daticontrollatocontrollato

Lo stesso codice in versione a oggettiLo stesso codice in versione a oggetti

Page 29: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Superfici e traiettorieSuperfici e traiettorie• Nei rivelatori di tracciamento è necessario calcolare intersezioni

tra curve (tracce) e superfici (elementi di rivelatore)

Line

SurfaceTrajectory

Helix

PolyLine

Plane Cylinder

Intersection

Page 30: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Intersezione: implementazioneIntersezione: implementazione• Implementazione

dell’algoritmo#include “Intersection.h”#include <math.h>#include “Surface.h”#include “Trajectory.h”

const int maxIterations 20const double sMax 1.e+6const 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)); }

Page 31: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Vantaggi del design a oggettiVantaggi 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...

Page 32: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Software dell’esperimento BSoftware dell’esperimento BAABBARAR

Page 33: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Il rivelatore di muoni di Il rivelatore di muoni di BBAABBARAR

• Identifica Muoni e adroni neutri (K0

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 nell’insieme delle strip che hanno prodotto un segnale rivelabile

Page 34: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Modello a oggettiModello 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.

stripstrip ““hit” : 1D-clusterhit” : 1D-cluster

clustercluster

clustercluster

Page 35: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Modello a oggetti dei clusterModello 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: l’oggetto di base dei cluster planari. – Tutta l’informazione è 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. L’utente finale non conosce i dettagli di implementazione!

Page 36: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

1

Ifr3DCluster IfrInner3DCluster

Ifr2DCluster

2

1

2

IfrAbs1D

2..4

1

2..4

1

1..*1 1..*1

IfrAbs3D

Ifr3DComposite

1

1..*

1

1..*

1

Ifr3DCluster IfrInner3DCluster

Ifr2DCluster

2

1

2

IfrAbs1D

2..4

1

2..4

1

1..*1 1..*1

IfrAbs3D

Ifr3DComposite

1

1..*

1

1..*

Diagramma a classiDiagramma a classi

Page 37: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Esempio di codice in C++Esempio di codice in C++

IfrAbs3D* ifr; // prendi un cluster …

// calcola il numero di lunghezze di interazionedouble 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 layerint n[19];for (int layer = 1; layer <= 19; layer++) n[ layer-1 ] = ifr->accept( ifrVstInt(“hitsInLayer”, layer) );

Page 38: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Diagramma del pattern “Diagramma del pattern “VisitorVisitor””

Ifr3DClusterIfr3DCluster

accept (IfrClusterVisitor<T>& v) : Taccept (IfrClusterVisitor<T>& v) : T

Ifr2DClusterIfr2DCluster

accept (IfrClusterVisitor<T>& v) : Taccept (IfrClusterVisitor<T>& v) : T

IfrAbs3DIfrAbs3D

accept (IfrClusterVisitor<T>&) : Taccept (IfrClusterVisitor<T>&) : T

Ifr3DCompositeIfr3DComposite

accept (IfrClusterVisitor<T>& v) : Taccept (IfrClusterVisitor<T>& v) : T

TT

IfrClusterVisitorIfrClusterVisitor

operate (const Ifr3DCluster*) : Toperate (const Ifr3DCluster*) : T

operate (const IfrInner3DCluster*) : Toperate (const IfrInner3DCluster*) : T

operate (const Ifr3DComposite*) : Toperate (const Ifr3DComposite*) : T

operate (const Ifr2DCluster*) : Toperate (const Ifr2DCluster*) : T

IfrInner3DClusterIfrInner3DCluster

accept (IfrClusterVisitor<T>& v) : Taccept (IfrClusterVisitor<T>& v) : T

{{

return v.operate( this ); return v.operate( this );}}

1..n1..n

IfrVstCenterOfGravityIfrVstCenterOfGravity

operate (const Ifr3DCluster*) : Hep3Vectoroperate (const Ifr3DCluster*) : Hep3Vector

operate (const IfrInner3DCluster*) : Hep3Vectoroperate (const IfrInner3DCluster*) : Hep3Vector

operate (const Ifr3DComposite*) : Hep3Vectoroperate (const Ifr3DComposite*) : Hep3Vector

operate (const Ifr2DCluster*) : Hep3Vectoroperate (const Ifr2DCluster*) : Hep3Vector

IfrClusterVisitor{Hep3Vector}IfrClusterVisitor{Hep3Vector}

22

Page 39: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Il modello geometrico del rivelatoreIl modello geometrico del rivelatore

IfrBarrelSector

IfrPlanarSector

IfrBarrelView

IfrView

IfrBwdCapSector

IfrCylindricalSector

IfrDetLeaf

IfrEndCapView

IfrFecIteratorIfrFwdCapSector

IfrInnerSector

IfrInnerView

IfrLayer

IfrLayerIterator

IfrSectorIterator

IfrViewIterator

-_components

1..*

1

IfrDetComposite

1

#_parent

0..1-_component

0..1 1

1

IfrDetIterator

1

0..1

-_iterator

0..1

IfrSector IfrFecIfrDetector

IfrDetComponent

10..1

0..1 1

1..*

1

IfrGeomBase

IfrGeom

Page 40: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Organizzazione e dipendenzeOrganizzazione e dipendenze

IfrVisitors

IfrData

IfrDataImp

External Clients

IfrClusterVisitor

IfrVstCenterOfGravityIfr3DCluster

IfrVst ...IfrInner3DCluster

Ifr2DCluster

IfrAbs3D

Ifr3DComposite

IfrVisitors

IfrData

IfrDataImp

External Clients

IfrClusterVisitor

IfrVstCenterOfGravityIfr3DCluster

IfrVst ...IfrInner3DCluster

Ifr2DCluster

IfrAbs3D

Ifr3DComposite

Classi astratte

Implementazioni concrete

Page 41: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

Linguaggi OO più usati nel calcolo scientificoLinguaggi 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.

Page 42: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

ConclusioniConclusioni

• 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!

Page 43: Programmazione orientata agli oggetti nel calcolo scientifico Luca Lista INFN Sezione di Napoli

Luca ListaPotenza, 16/5/2001

FineFine