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
Scarica

ppt - Università degli Studi Roma Tre