1 laboratorio di calcolo II AA 2003/04 a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 www.fis.uniroma3.it/~orestano.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Le forze ed i loro effetti
Introduzione al linguaggio C++
Informatica II – Basi di Dati (08/09) – Parte 1
CORSO DI RECUPERO CONTROLLI AUTOMATICI Prof. Filippo D’Ippolito
/ fax
Recupero debito quarto anno Primo incontro
Informatica Recupero debito quarto anno Terzo incontro.
Programmazione object oriented in C++
Massa Laura Mela Enrica
1 Semantica Operazionale di un frammento di Java: lo stato.
Metodologie di Programmazione = decomposizione basata su astrazioni
Meccanica 2 1 marzo 2011 Cinematica in una dimensione
A. Stefanel - M: Le leggi della dinamica
Programmazione Procedurale in Linguaggio C++
SOCIOLOGIA GENERALE –Coordinate Indirizzo dello studio del dr. A. Mongili: Dipartimento di Ricerche Economiche e Sociali Viale S. Ignazio da Làconi, 78.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Note organizzative per il corso di Laboratorio di tecniche computazionali Annarita Margiotta.
Introduzione alla Object Oriented Programming, OOP E.Mumolo. DEEI
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
E.Mumolo. DEEI Introduzione alla programmazione ad oggetti in C++ Object Oriented Programming, OOP E.Mumolo. DEEI
Introduzione al linguaggio C++ 5 lezioni
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Corso di Informatica (Basi di Dati)
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
Corso di Informatica (Basi di Dati)
eliana minicozzi linguaggi1a.a lezione2
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Simulazione di un esperimento di laboratorio: Caduta di un corpo quadrato in.
Obiettivi del corso Programmazione Corso di laurea in Informatica.
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
Approfondimento delle classi
Laboratorio di Calcolo I 1) Introduzione Università Roma Tre Corso di Studi in Fisica AA 2002/03.
Lab. Calc. 2005/06 Ereditarietà. Lab. Calc. 2005/06 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire.
Primi Elementi di Programmazione in C++
1 laboratorio di calcolo II AA 2003/04 sesta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
1 laboratorio di calcolo II AA 2003/04 terza settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
1 laboratorio di calcolo II AA 2003/04 quinta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
1 laboratorio di calcolo II AA 2003/04 quarta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
1 laboratorio di calcolo II AA 2003/04 seconda settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Corso di Laurea in INGEGNERIA MECCANICA
Strutture di controllo in C -- Flow Chart --
Espressioni condizionali
Labortaorio informatica 2003 Prof. Giovanni Raho 1 INFORMATICA Termini e concetti principali.
Intelligenza Artificiale
Introduzione alla modellazione di sistemi interattivi
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di Informatica di base
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
ISCRIZIONI A.S / ‘14 SCUOLA PRIMARIA
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Configurazione in ambiente Windows Ing. A. Stile – Ing. L. Marchesano – 1/23.
Settimana: 10 – 14 marzo Orariolunedimartedi Mercoledi 12 Giovedi 13 Venerdi Lezione Dal c al c Lezione Dal c al c
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Aprofondimenti e Applicazioni
Progettare corsi con Moodle
CORSO DI PROGRAMMAZIONE II Lezione 22
Programmazione ad oggetti
Lezione 1 Panoramica sui paradigmi di programmazione
Prof. Romano Boni Assistente Silvia Torrani ECONOMIA AZIENDALE AA Note Organizzative.
Algoritmi e Strutture Dati Introduzione agli algoritmi
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Progettazione di una base di dati Ciclo di vita di un sistema informativo Studio di fattibilità definisce le varie alternative possibili, i relativi costi.
Ingegneria del software Modulo 1 -Introduzione al processo software Unità didattica 4 -Progettazione del software Ernesto Damiani Università degli Studi.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

1 laboratorio di calcolo II AA 2003/04 a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( ) UNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI FISICA E. AMALDI

2 Introduzione: obiettivi del corso Introduzione alla Programmazione ad Oggetti Accento posto sulle Idee e non sugli aspetti tecnici Architetti e non Esperti del Linguaggio C/C++ Imparare a progettare un approccio al Calcolo Restano fuori Elementi di Analisi Numerica Aspetti di Grafica o di Tecnologie Multimediali

3 Introduzione: organizzazione del corso Contenuti 1.Introduzione al linguaggio C++ e alla Programmazione ad Oggetti 2.Elementi di linguaggio UML 3.Elementi di strutture riutilizzabili Metodo 1.Comprensione del problema, ricerca della soluzione in ambito OO, implementazione in C++ 2.Lezioni Frontali (circa 40%) e Laboratorio (circa 60%) 3.Utilizzo di un problema guida (Sistema Solare) 4.Sintassi in Appendice a ciascuna lezione

4 Introduzione: orario del corso 10 o 11 lezioni frontali da 2 ore –0.5 - Introduzione –8.5 - Linguaggio C++ –1.5 - UML e strutture riutilizzabili –0.5 - Conclusione Si svolgeranno il lunedì dalle 14 alle 16 9 o 10 esercitazioni di laboratorio da 4 ore Si svolgeranno presso i laboratorio didattici il martedì (studenti del II anno) e il giovedì (studenti del I anno) dalle 9 alle 13 Indicativamente... Abbiamo 10 settimane

5 Introduzione: strumenti di lavoro Dispense Esercitazioni di Laboratorio (in gruppi di 2 persone) Manuale C++ –Come riferimento per la sintassi –Attenzione allimpostazione (partiamo direttamente dal C++, e non dal C!) –Alcuni suggerimenti nella prossima trasparenza Presenza attiva in Laboratorio e in Aula

6 Introduzione: manuali (1)

7 Introduzione: manuali (2)

8 Introduzione: svolgimento degli esami Prova Pratica –Prova in Laboratorio, in linguaggio C++ Prova Orale Discussione su un problema scelto dallo studente e preparato personalmente durante il corso –Ogni studente sceglie un problema di Fisica (semplice!) concordato o suggerito dal docente –Lo formalizza nella logica della programmazione ad oggetti –Lo scrive in C++ e lo discute nel corso della Prova Orale

9 Problematiche del calcolo moderno Applicazione del calcolo a sistemi sempre più complessi per quantità di dati da manipolare, numero di CPU utilizzate, distribuzione geografica dei soggetti coinvolti Esempi: esperimenti di fisica delle alte energie e di astroparticelle, biologia molecolare e progetto genoma, ma anche telecomunicazioni, sistemi bancari, reti di trasporto.

10 Requisiti per il software moderno 1.Robustezza protezioni nellaccesso 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

11 Paradigmi di programmazione Procedurale: si sceglie lalgoritmo che risolva il problema dato e il linguaggio permette di implementare l'algoritmo scelto Modulare: si decide quali moduli utilizzare e si separano i dati in modo da nasconderli entro ciascun modulo Definita dallutente: si decide quali tipi utilizzare e si genera un insieme di operazioni per i vari tipi Orientata agli Oggetti: si decide quali classi utilizzare, si genera un insieme di operazioni per le varie classi e si raggruppano le proprietà comuni tramite il meccanismo dell'ereditarietà Generica: si identificano una serie di algoritmi e si parametrizzano in modo che possano essere utilizzati per più classi o tipi definiti dall'utente.

12 Paradigmi e linguaggi di programmazione I diversi linguaggi di programmazione possono essere più o meno indicati ad esprimere un tipo di programmazione (paradigma). Il C++ permette di implementare una programmazione definita dall'utente, consentendo la definizione di tipi di oggetti e delle operazioni effettuabili con essi, con possibilità di mettere in evidenza i collegamenti e le similitudini tra di essi mediante il meccanismo dellereditarietà (ovvero una programmazione Orientata agli Oggetti) ma consente anche di realizzare una programmazione Generica, creando codice utilizzabile in situazioni formalmente simili anche in assenza di un collegamento concettuale.

13 Caratteristiche della programmazione OO 1.Incapsulamento : i dati delloggetto sono nascosti ad altri oggetti ed è possibile accedervi solo attraverso modalita ben definite Da questa caratteristica derivano robustezza e flessibilità del codice 2.Ereditarietà : gli oggetti complessi possono essere costruiti a partire da oggetti più semplici. Gli oggetti complessi derivano tutto o parte del loro comportamento dagli oggetti a partire dai quali sono stati generati Ne derivano ri-utilizzabilità e possibilità di organizzazione del codice 3.Polimorfismo: oggetti simili possono essere trattati, in alcuni casi, come se fossero dello stesso tipo, senza la necessità di implementare trattamenti specifici per distinguere tra le varie tipologie Rende il codice più flessibile e aumenta lefficienza dellereditarietà La Portabilità invece è una caratteristica del linguaggio ed in particolare del C++ standard (ANSi-C++)

14 Progettazione di un programma Scelta degli Oggetti Identificazione delle relazioni tra gli Oggetti (proprietà statiche o geometriche) Esame dei casi duso (use case) Identificazione delle interazioni tra gli Oggetti (proprietà dinamiche) Eventuale ridefinizione delle responsabilita delle classi NB gli Oggetti vengono descritti mediante classi, ovvero tipi definiti dallutente che realizzano lincapsulamento dei dati

15 La simulazione del Sistema Solare F 12 = m a F 12 = - G m 1 m 2 r / r 3 G = 6.673e-11 Unità mks Il problema fisico: Determinare levoluzione temporale di un certo numero di corpi sottoposti a reciproca attrazione gravitazionale

16 Scelta degli Oggetti Quali Oggetti entrano nel problema? corpi celesti, sonde, pianeti, stelle, satelliti … Quali proprieta hanno tali oggetti? massa, posizione, velocità…

17 Relazioni tra gli Oggetti Quali sono le relazioni tra gli Oggetti? Possono essere raggruppati? Quali proprieta sono condivise da Oggetti simili? Quali proprieta permettono di distinguere Oggetti simili tra loro? un pianeta è un corpo celeste, una sonda è un satellite… … ed è anche un corpo celeste tutti gli oggetti possono essere ricondotti a Corpi Celesti o a Sonde, dove la Sonda è un Corpo Celeste con qualche proprietà in più Quali oggetti sono superflui? Quali oggetti mancano? manca il Sistema Solare … e un Sistema Solare è composto da dei Corpi Celesti!

18 UMLUML Universal Modeling Language

19 Casi duso A cosa serve esattamente il programma? simulazione del moto dei vari Corpi Celesti inseriti nel Sistema Solare In quali situazioni concrete tali oggetti dovranno essere utilizzati? 1.Si vuole conoscere lo stato del sistema (posizione di ciascun Corpo Celeste) dopo un tempo T dallistante iniziale 2.Si suddivide lintervallo T in n intervallini dT nei quali si possano trascurare variazioni di forza e di velocità 3.Per ogni intervallo dT 1.Nota la posizione di ciascun Corpo Celeste allinizio dellintervallo 2.La si usa per determinare la forza agente su ciascun Corpo Celeste 3.Nota la forza si determina laccelerazione di ogni Corpo Celeste 4.Si calcola la velocità del Corpo Celeste, nota la velocità allinizio dellintervallo, assumendo che laccelerazione resti costante 5.Si calcola la nuova posizione, assumendo che la velocità resti costante

20 Scenari Oltre ai casi duso si possono introdurre gli scenari. Questi descrivono in maniera piu dettagliata situazioni particolari che possono presentarsi e devono essere previste dal programma. Nel nostro caso possiamo ad esempio prevedere di voler lanciare una sonda dalla superficie di un altro Corpo Celeste X ad un istante t compreso tra 0 e T. Il programma dovrà allora anche controllare quando si raggiunga il tempo t e aggiungere al Sistema Solare un Oggetto Sonda con una certa velocità iniziale rispetto al Corpo Celeste X, assegnandole la posizione di X ed una velocità ottenuta dalla combinazione della velocità iniziale relativa della Sonda rispetto a X e della velocità del Corpo Celeste X.

21 Interazioni tra gli Oggetti Non è sufficiente capire la relazione geometrica tra gli oggetti, è necessario anche valutare come gli oggetti interagiscono dinamicamente tra loro Quali compiti ha ciascuna classe? Chi determina le nuove coordinate del sistema? Chi invoca i metodi per far evolvere il sistema? Una possibile scelta: CorpoCeleste ha il metodo CalcolaPosizione SistemaSolare ha il metodo Evolvi che determina il nuovo stato del sistema dopo un tempo T Il metodo Evolvi (di SistemaSolare) si occupa di invocare i metodi CalcolaPosizione di ciascun pianeta del sistema solare.

22 Responsabilità delle classi è chiaro di chi sia la responsabilita di un punto chiave del programma? Una classe ha troppe responsabilita? Una classe è irrilevante e può essere assorbita da unaltra? Distribuire le responsabilità tra le varie classi Sfruttare un procedimento a cascata Limitare le responsabilità di una classe ad una o due

23 Interaction Diagram (semplificato)

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

25 Costruzione di una classe Get 1.Attributi public private protected 2.Metodi public private protected Obbligatorio il tipo (nessun tipo void ) 3.Accesso agli attributi di una classe (tipo Set e tipo Get) Nome Classe Attributi Metodi Set

26 Nomeclasse.h Contiene la dichiarazione degli Attributi e dei Metodi CorpoCeleste Nome (stringa) m (num. reale) x (num. reale) y (num. reale) vx (num. reale) vy (num. reale) CalcolaPosizione(forza, dt) StampaVelocita() StampaPosizione() M() X() Y() Vx() Vy() La dichiarazione di una classe: lheader file (.h)

27 Limplementazione di una Classe: limplementation file (.cc) Nomeclasse.cc Contiene limplementazione degli Attributi e dei Metodi

28 #ifndef CORPOCELESTE_H #define CORPOCELESTE_H class CorpoCeleste { private: char *Nome; double m; double x; double y; double vx; double vy; public: CorpoCeleste() ; CorpoCeleste (const char *nomeCorpo, float mass, float xpos, float ypos, float vxi, float vyi); ~CorpoCeleste() ; void calcolaPosizione (float fx, float fy, float t); void stampaPosizione(); void stampaVelocita() ; const char *nome() ; double M() ; double X() ; double Y() ; double Vx() ; double Vy() ; }; #endif CorpoCeleste.h

29 #ifndef CORPOCELESTE_H #define CORPOCELESTE_H class CorpoCeleste { protected: char *Nome; double m; double x; double y; double vx; double vy; public: CorpoCeleste() ; CorpoCeleste (const char *nomeCorpo, float mass, float xpos, float ypos, float vxi, float vyi); ~CorpoCeleste() ; virtual void calcolaPosizione (float fx, float fy, float t); void stampaPosizione(); void stampaVelocita() ; const char *nome() ; double M() ; double X() ; double Y() ; double Vx() ; double Vy() ; }; #endif CorpoCeleste.h con modifiche per ereditarietà

30 #include "CorpoCeleste.h CorpoCeleste::CorpoCeleste( ) { } CorpoCeleste::CorpoCeleste (const char *nomeCorpo, float mass, float xpos, float ypos, float vxi, float vyi) { } CorpoCeleste::~CorpoCeleste() { } void CorpoCeleste::calcolaPosizione (float fx, float fy, float t) { } void CorpoCeleste::stampaPosizione() { } void CorpoCeleste::stampaVelocita() { } const char* CorpoCeleste::nome() { } double CorpoCeleste::M() { } double CorpoCeleste::X() { } double CorpoCeleste::Y() { } double CorpoCeleste::Vx() { } double CorpoCeleste::Vy() { } CorpoCeleste.cc Schema vuoto

31 #include "CorpoCeleste.h" #include CorpoCeleste::CorpoCeleste() { } CorpoCeleste::CorpoCeleste (const char *nomeCorpo, float mass, float xpos, float ypos, float vxi, float vyi) { Nome = new char[strlen(nomeCorpo)]; strcpy(Nome, nomeCorpo); m = mass; x = xpos; y = ypos; vx = vxi; vy = vyi; } void CorpoCeleste::calcolaPosizione( float fx, float fy, float t) { double ax = fx/m; double ay = fy/m; vx += ax*t; vy += ay*t; x += vx*t; y += vy*t; } CorpoCeleste.cc Prima parte

32 void CorpoCeleste::stampaPosizione() { cout.setf(ios::fixed); cout.setf(ios::showpos); cout << " " << setprecision(4) << setw(9) << x*1.e-11 << " " << setprecision(4) << setw(9) << y*1e-11 ; } void CorpoCeleste::stampaVelocita() { cout.setf(ios::fixed); cout.setf(ios::showpos); cout << " " << vx << " " << vy ; } CorpoCeleste::~CorpoCeleste() { } const char* CorpoCeleste::nome() {return Nome; } double CorpoCeleste::M() { return m; } double CorpoCeleste::X() { return x; } double CorpoCeleste::Y() {return y; } double CorpoCeleste::Vx() {return vx; } double CorpoCeleste::Vy() {return vy; } CorpoCeleste.cc Seconda parte

33 #ifndef CORPOCELESTE_H #define CORPOCELESTE_H class CorpoCeleste { protected: char *Nome; double m; double x; double y; double vx; double vy; public: CorpoCeleste() ; CorpoCeleste (const char *nomeCorpo, float mass, float xpos, float ypos, float vxi, float vyi); ~CorpoCeleste() { } ; virtual void calcolaPosizione (float fx, float fy, float t); void stampaPosizione(); void stampaVelocita(); const char *nome() {return Nome;}; double M() {return m;}; double X() {return x;}; double Y() {return y;}; double Vx() {return vx;}; double Vy() {return vy;}; }; #endif CorpoCeleste.h con impletazione di alcuni metodi inline