1 laboratorio di calcolo ii aa 2003/04 ottava settimana a cura di domizia orestano dipartimento di...
TRANSCRIPT
![Page 1: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/1.jpg)
1
laboratorio di calcolo IIAA 2003/04
ottava settimana
a cura di
Domizia Orestano
Dipartimento di FisicaStanza 159 - tel. (06 5517) 7281
www.fis.uniroma3.it/[email protected]
UNIVERSITA’ DEGLI STUDI ROMA TRE
DIPARTIMENTO DI FISICA “E. AMALDI”
![Page 2: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/2.jpg)
2
Relazioni tra Concetti ed Ereditarietà
«A concept does not exist in isolation. It coexists with related concepts and derives much of its power from relationships with related concepts…» (B. Stroustrup)
Indipendenza tra Concetti e Programmazione Generica
«Independent concepts should be independently represented and should be combined only when needed. Where this principle is violated, you either bundle unrelated concepts together or create unnecessary dependencies. Either way, you get a less flexible set of components out of which to compose systems…» (B. Stroustrup)
Relazioni tra concetti Ereditarieta’
Concetti Indipendenti Templates
premessa
![Page 3: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/3.jpg)
3
L’implementazione di un metodo assume molte forme ( poli-morfismo ) ed e’ possibile scegliere “automaticamente” la
“forma” giusta
Polimorfismo a Run Time
La forma “giusta” viene scelta durante
l’esecuzione del programma
Polimorfismo a Compilation Time
La forma “giusta” viene scelta durante
la compilazione del programma
Programmazione Generica
![Page 4: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/4.jpg)
4
Voglio contare le gocce di pioggia che cadono sulle mattonelle di un pavimento
class Myfloor {
protected :
int element[4][4] ;
public:
// costruttori
// distruttore
// metodi di tipo set
// metodi di tipo get
// altri metodi (incremento)
// operatori
…………………………………..
} ;
Esempio 1
![Page 5: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/5.jpg)
5
Voglio studiare la distribuzione di massa in una lastra non omogenea
class Myplate {
protected :
double element[4][4] ;
public:
// costruttori
// distruttore
// metodi di tipo set
// metodi di tipo get
// altri metodi (incremento)
// operatori
…………………………………..
} ;
Esempio 2
![Page 6: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/6.jpg)
6
Voglio studiare il capo elettrico su un reticolo
class Myfield {
protected :
ThreeVector element[4][4] ;
public:
// costruttori
// distruttore
// metodi di tipo set
// metodi di tipo get
// altri metodi (incremento)
// operatori
…………………………………..
} ;
Esempio 3
![Page 7: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/7.jpg)
7
Stiamo scrivendo molte linee di codice praticamente identiche, ma non possiamo ri-utilizzare il codice attraverso il meccanismo
dell’Ereditarietà, infatti da un lato non ci sono relazioni sfruttabili tra le situazioni elencate e dall’altro attributi e metodi delle classi che abbiamo visto sono di tipo diverso.
Il problema
Ma la possibilità di ri-utilizzare del codice non era uno dei cardini della programmazione OO?
![Page 8: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/8.jpg)
8
Lezione 1: Requisiti per il software moderno
1. Robustezza
protezioni nell’accesso ai dati
2. Possibilità di ri-utilizzo del codice
1. economia di risorse umane ed economiche
2. maggiore affidabilità
3. Portabilità
1. verso sistemi operativi diversi
2. verso diverse versioni di uno stesso sistema
4. Flessibilità e Organizzazione del Codice
semplicità di gestione e sviluppo successivo del codice
![Page 9: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/9.jpg)
9
Vogliamo calcolare il minimo tra due oggetti (per i quali sia definito un ordinamento).
Definiamo una funzione minimo per ogni tipo di oggetto trattato:
double & minimo(const double & a1, const double & a2) { if(a1<=a2) { return a1; } else { return a2;} }
TwoVect & minimo(const TwoVect & a1, const TwoVect & a2) { if(a1<=a2) { return a1; } else { return a2} ;}
int & minimo(const int & a1, const int & a2) { if(a1<=a2) { return a1; } else { return a2;} }
Esempio 4
![Page 10: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/10.jpg)
10
Introduco un parametro T che rappresenta il tipo (la classe) cui appartengono gli oggetti da trattare e implemento il codice in funzione della generica classe T.
Specificando T (int, double, complex, TwoVector…) in fase di compilazione ottengo il codice oggetto che tratta interi, reali in doppia precisione, complessi, vettori a due componenti…
La soluzione: le classi Template
![Page 11: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/11.jpg)
11
La sintassi delle classi Template
template <class T> class Myclass {
…………………………………
// T si puo’ usare come
// una classe qualsiasi
………………………………….
};
Dichiarazione (.h):
template <class T> tipo Myclass<T>::nomemetodo(…) { …………… }
Implementazione (.icc):
Implementazione (.cc):
export template <class T> tipo Myclass<T>::nomemetodo(…) { …………… }
![Page 12: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/12.jpg)
12
Esempi 1,2 e 3
template <class T> class Mynet {
protected :
T element[4][4] ;
public:
// costruttori
// distruttore
// metodi di tipo set
// metodi di tipo get
// altri metodi (incremento)
// operatori
…………………………………..
} ;
Myfloor Mynet<int>
Myplate Mynet<double>
Myfield Mynet<ThreeVector>
![Page 13: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/13.jpg)
13
#include “Mynet.h”
int main() {
………………
Mynet<int> mi;
Mynet<double> mdb;
Mynet<TwoVector> mtv;
………………
return 0;
}
Uso di una classe Template
![Page 14: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/14.jpg)
14
class Myfloor : public Mynet<int> {
public:
// costruttori
~Myfloor() {}; // distruttore
} ;
posso poi usare anche l’Ereditarietà, implementando solo costruttori e distruttori
class Myplate : public Mynet<double> {
public:
// costruttori
~Myplate() {}; // distruttore
} ;
#include <TwoVector.h>
class Myfield : public Mynet<TwoVector> {
public:
// costruttori
~Myplate() {}; // distruttore
} ;
Template e ereditarietà
#include “Mynet.h”
int main() {
………………
Myfloor mi;
Myplate mdb;
Myfield mtv;
………………
return 0;
}
![Page 15: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/15.jpg)
15
template <class T> T & minimo(const T & a1, const T & a2) { if(a1<=a2) { return a1; } else { return a2;} }
La funzione:
E il suo uso:
#include <TwoVector.h>
int main() {
float a = min(3.,2.); //float
int i = min(2,3); // int
TwoVector p1(1.,2.); TwoVector p2(3.,1.); TwoVector p3 = min(p1,p2);
return 0;
}
#include “mymin.icc”
Esempio 4
![Page 16: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/16.jpg)
16
1. Riferimenti http://wwweth.cern.ch/STL_doc/
Libreria STL
![Page 17: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/17.jpg)
17
• Strutture dati per memorizzare oggetti (e puntatori ad oggetti)
Esempi di contenitori
vector
list
map
• Per accedere ad essi (iteratori)
• Per eseguire operazioni su di essi ( find, sort, copy, merge… )
container
![Page 18: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/18.jpg)
18
push_back()push_back()11 22 ...... 99
begin()begin() end()end()
pppp pp pp pp
00
pp++++
Funzionamento di vector
![Page 19: 1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 orestano](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c4259/html5/thumbnails/19.jpg)
19
#include <stdlib.h>#include <vector>
int main() {
vector<int> v; // create an empty vector of integers cout << v.size() << endl; // print the size of v: zero for (int I=0; I!=10; ++I) { // a loop from 0 to 9 v.push_back(I); // add an integer to v from the back } cout << v.size() << endl; // print the size of v: 10 // create an constant iterator for a vector of integers: // p behaves at all effects as a “const int *” vector<int>::const_iterator p; // begin() points to the first element // and end() to the last+1 // (compare with the previous “for” loop) for (p=v.begin(); p!=v.end(); ++p) cout << (*p) << “ “; cout << endl; return 0;}
Main.cc
Uso di vector