UNIVERSITA’ DEGLI STUDI ROMA TRE DIPARTIMENTO DI FISICA “E. AMALDI” laboratorio di calcolo II AA 2003/04 sesta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 www.fis.uniroma3.it/~orestano [email protected] 1 Esercitazione della settimana scorsa • Ereditarietà e polimorfismo (shape) OK? • Implementazione della classe dei numeri complessi con overloading di alcuni operatori – Non per tutti era chiaro cosa fare – Alcuni errori negli esempi che vi ho fornito e differenze tra lucidi e dispense – Un problema legato al nostro compilatore con i metodi che ritornano degli oggetti • Nell’esercitazione di questa settimana: 1h30 per completare i numeri complessi 2 class Compl { private: double re; double im ; Un esempio classico: la classe dei numeri complessi (con correzioni) public: // costruttori Compl() ; // costruttore di default Compl(double a) ; // costruisce un numero reale come complesso Compl(double a, double b) ; // costruisce a+ib Compl(Compl & c) ; // costruisce un numero complesso uguale a c ~Compl() ; //distruttore //metodi di tipo Set void set_Re(double a); // pone re=a void set_Im(double b); // pone re=a //metodi di tipo Get double const Real() const ; // restituisce re double const Imm() const ; // restituisce im //operatori unari Compl & operator- (); // ritorna un nuovo numero complesso //operatori binari Compl & operator= (Compl const & c); // ritorna una reference Compl operator+ (Compl const & c); // ritorna un nuovo complesso } ; 3 X X Nell’implementazione di TwoVector: ostream & operator << (ostream & fstream, const TwoVector & v) { fstream << " (" << v.x() << "," << v.y() << ") "; return fstream; } 4 TwoVector & TwoVector::operator = (const TwoVector & p) { dx = p.x(); dy = p.y(); return *this; } TwoVector TwoVector::operator - () const { return TwoVector(-dx, -dy); } TwoVector TwoVector::operator + (const TwoVector & a) { return TwoVector(dx + a.x(), dy + a.y()); } Questi due metodi non compilano: modificarli come segue: TwoVector TwoVector::operator - () const { TwoVector A(-dx,-dy); return A; } TwoVector TwoVector::operator + (const TwoVector & a) { TwoVector B(dx + a.x(), dy + a.y()); return B; } 5 UML Universal Modeling Language Esistono delle convenzioni universali per rappresentare • Le classi • Le relazioni tra le classi • Le interazioni tra le classi • Gli use case http://www.rational.com/uml 6 applicativi • Esistono dei pacchetti applicativi per – Costruire la struttura del programma C++ (o altro linguaggio OO) a partire dalla rappresentazione UML – Ottenere la rappresentazione UML a partire dal codice del programma C++ (o altro linguaggio OO) (Reverse Engeneering) 7 Use case diagrams • Descrivono cosa ci si aspetta che il sistema faccia dal punto di vista di un osservatore esterno (e non come) • Gli elementi sono – Actor: rappresenta il ruolo svolto da una persona o da un oggetto – Use case: l’insieme delle situazioni (scenari) che si verificano quando qualcuno interagisce col sistema – Communication association: il collegamento tra Actor e Use case Servono a definire i requirement e a generare i test case 8 Esempio di use case diagram 9 Class diagrams Classe Nome della Classe attributo attributo : tipo attributo : tipo = valore_iniziale ............. operazione operazione (argomenti) : tipo_risultato ............. 10 protezioni Classe # /+$ attributo privato attributo protetto attributo privato derivato attributo pubblico della classe + # /+$ operazione pubblica operazione protetta operazione privata operazione pubblica della classe 11 Relazioni tra classi • Ci limitiamo a quelle fondamentali: – Relazione di associazione ed in particolare: • Relazione di aggregazione ; • Relazione di composizione ; Un oggetto di una classe è in relazione con uno o più oggetti di un’altra – Relazione di ereditarieta'; • Una relazione di associazione (un oggetto di una classe deve conoscere l’esistenza dell’altro per poter operare) è rappresentata da una linea che congiunge i diagrammi di 2 classi. • La molteplicità minima e massima degli oggetti coinvolti è riportata agli estremi della linea – – – – m…n : da m a n oggetti 0…* o semplicemente * : un numero qualsiasi n : esattamente n oggetti n…* : almeno n oggetti 12 Relazione di aggregazione • Un oggetto di una classe ha tra i sui attributi puntatori ad oggetti di un'altra classe • Gli oggetti aggregati esistono indipendentemente dall’oggetto aggregante • La relazione di aggregazione è indicata da un rombo vuoto posto vicino alla classe che aggrega • La freccia indica la direzione di “navigabilità” della relazione quando questa è monodirezionale 13 Relazione di composizione • Un oggetto di una classe ha tra i sui attributi oggetti di un'altra classe • L’esistenza degli oggetti componenti dipende dall’esistenza dell’oggetto composto e non possono appartenere a più di un oggetto • La relazione di composizione è indicata da un rombo nero posto vicino alla classe composta ThreeVector -Componenti:VecComp[3] … +ThreeVector … VecComp 1 3 -element:double … +VecComp … 14 Relazione di ereditarietà si indica con una freccia vuota, a punta trangolare, che connette la classe che eredita con la classe base 15 esempio 16 Interaction diagrams • Diagrammi dinamici che mettono in evidenza le interazioni tra gli oggetti. • In particolare un sequence diagram mostra in dettaglio i vari passaggi richiesti dall’esecuzione di un’operazione evidenziando quali messaggi vengano scambiati e in che ordine temporale. • Le linee verticali rappresentano istanze di oggetti (e non classi), il tempo scorre dall’alto verso il basso, i rettangoli sovrapposti alle linee verticali (opzionali) mostrano l’attività di un oggetto. • Frecce piene dirette da sinistra a destra rappresentano messaggi sincroni, frecce vuote messaggi asincroni, frecce vuote da destra a sinistra con linee tratteggiate rappresentano return. 17 18 19 link interessanti • I diagrammi di UML sono molti di più, sono stati illustrati solo quelli di uso più frequente. Per approfondimenti: http://www.rational.com/uml • Tutorial online dalla pagina http://atlas.web.cern.ch/Atlas/GROUPS/SOFTWARE/OO/sit/Training/main.html • Elenco e descrizione aggiornata di tutti i diagrammi http://www.holub.com/goodies/uml/index.html 20 Possibili argomenti di esame • • • Combinazione di Momenti Angolari in MQ Particella in una buca di potenziale Moto di una particella in – – – – • • Capacita’ di un condensatore con dielettrico variabile Circuiti Elettrici Lineari – – – – – • • Campo elettrico Campo Magnetico Campo Elettrico e Magnetico Campo EM lentamente variabile Resistenza Capacita' Induttanza Impedenza Generatori, ecc. Circuiti Elettrici Logici Trasformazioni di Lorentz - Quadrivettori 21 • • • • • • Soluzione dell’eq. di Schrodinger Barriera di potenziale Oscillatore armonico (vari casi) Elementi di Statistica (medie e varianze, distr. della media, distr. di Gauss e di Poisson, prob. condizionate, teorema di Bayes, Istogrammi) Rappresentazione di strumentazione (orologio, generatore di segnali, tester (con Rint )) Termodinamica e Meccanica Statistica: – – • Elementi di Ottica – – – • Teoria cinetica dei gas Gas perfetti e gas reali Lenti Specchi Reticoli Analisi numerica – – Calcolo integrale Integrazione di equazioni differenziali 22 Cosa fare • • • • • • • • • • • Formare un gruppo (max 4 persone) Scegliere un argomento Costruire use case e scenari Redigere un elenco di requisiti Definire gli oggetti coinvolti e le loro relazioni Distribuire le responsabilità Identificare le interazioni tra gli oggetti Esercitare il modello in una sessione CRC Mettere a punto delle procedure di test Iterare? Scrivere e testare il codice 23 Sessione CRC CRC: Classi, Responsabilità, Collaborazione capire come funziona dinamicamente il programma che si vuole realizzare Giuoco di Ruolo: • ciascuno dei partecipanti è un Oggetto del programma • uno dei partecipanti è il Programma "Main Ogni partecipante deve conoscere le caratteristiche di ciascuna Classe: • "come è fatta" • "quali azionì può compiere” Durante la sessione tutto si svolge come nel corso dell'esecuzione del Programma, in questo modo emergono casi non previsti ed eventuali problemi. 24 Documentazione per l’esame (deliverables) • Documento di requirements • Diagrammi UML: – Use case – Class – Sequence • • • • • Per ogni ciclo di sviluppo Resoconto sessione CRC Documento descrittivo delle procedure di test Dichiarazioni delle classi (.h) Implementazione Risultati dei test 25