Sistemi e Tecnologie Informatiche Requisiti per la realizzazione di un buon programma.

Slides:



Advertisements
Presentazioni simili
C++ Di Marco Cozzani.
Advertisements

Sottoprogrammi: funzioni e procedure
Scomposizione funzionale
Array multidimensionali
Procedure e funzioni A. Ferrari.
LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.
PHP.
I DATI LE ISTRUZIONI LE STRUTTURE FONDAMENTALI
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Il Sistema Informativo Le Informazioni come elemento di base per il raggiungimento degli obiettivi aziendali Mario Capurso
Metodologie di Programmazione = decomposizione basata su astrazioni
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Introduzione al linguaggio C
5 – Progettazione Concettuale
Lez. 31 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
Algoritmi in C++ (1) da completare
Esercitazione 6 – Esercizio 1 Autore: Riccardo Bianco I Corso.
1 14. Verifica e Validazione Come assicurarsi che il software corrisponda alle necessità dellutente? Introdurremo i concetti di verifica e validazione.
PROGRAMMI DI RICERCA E ORDINAMENTO
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di Programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli Corso.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 18 Aprile 2012.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Calcolatori Elettronici III
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Unità Didattica 2 I Linguaggi di Programmazione
Primi Elementi di Programmazione in C++
Fondamenti di Informatica1 Ripetizioni di segmenti di codice Spesso è necessario ripetere più volte uno stesso segmento dell'algoritmo (e.g. I/O, elaborazioni.
Le funzioni.
Progettazione di una base di dati
Strategia bottom-up Nella strategia bottom-up le specifiche iniziali sono suddivise in componenti via via sempre più piccole, fino a descrivere frammenti.
A.Natali DL Maggio1999 Oggetti Concetti fondamentali.
Metodologia sviluppo KBS Fabio Sartori 12 ottobre 2005.
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Dall’algoritmo al programma.
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
La progettazione di un sistema informatico
Elementi di Informatica di base
Sistemi e Tecnologie Informatiche
Lezione 1 Linguaggi di programmazione – Algoritmi –Istruzioni
PROBLEMI E “PAROLACCE” Nucleo: Relazioni e Funzioni
Programmazione di Calcolatori
Un esempio: Calcolo della potenza n-esima di un numero reale
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
BIOINFO3 - Lezione 15 ISTRUZIONI
Complessità di un algoritmo
Algoritmo che viene utilizzato per elencare gli elementi di un insieme secondo una sequenza stabilita da una relazione d'ordine, in modo che ogni elemento.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Cicli ed asserzioni Corso di Informatica 2 a.a. 2003/04 Lezione 1.
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
Array (ordinamento) CORDA – Informatica A. Ferrari.
Gli Algoritmi L’algoritmo è un insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce un risultato e si.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Sistemi e Tecnologie Informatiche Verifica di correttezza di un programma.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
1 Informatica Generale Alessandra Di Pierro Ricevimento: Giovedì ore presso Dipartimento di Informatica, Via Buonarroti,
Strategie di progetto Si possono utilizzare le strategie tipiche dello sviluppo di un processo di ingegnerizzazione (es. ingegneria del software). Strategie.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
Progettazione di basi di dati: metodologie e modelli
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (III)
Programmazione dei Calcolatori Elettronici
Unità di apprendimento 6
ALGORITMI, LINGUAGGI E PROGRAMMI Facoltà di Lingue e Letterature Straniere Corso di laurea in Relazioni Pubbliche.
Transcript della presentazione:

Sistemi e Tecnologie Informatiche Requisiti per la realizzazione di un buon programma

Realizzare un programma Cosa deve fare? A che serve? Su quali sistemi dovrà funzionare? Quali tecnologie adopererà? Progettiamone una implementazione … Implementiamolo! Ora, assicuriamoci che funzioni correttamente Un po di tempo dopo … Avrei bisogno di questa funzione. Lo so che inizialmente non era prevista ma il programma ci guadagnerebbe molto se la implementassimo Il colore delle finestre, rosa pallido, non è molto azzeccato. Potremmo provare uno sfondo grigio a pois rossi?

Ciclo di vita dei programmi Descrive le attività fondamentali alla realizzazione di un programma: Specifica dei requisiti Scelta del sistema di calcolo Progetto Implementazione Test e correzione Manutenzione del codice

Requisiti per un buon programma Correttezza Leggibilità Efficienza Parametricità Modificabilità Portabilità

Requisiti per un buon programma Correttezza Assicurarsi che il programma restituisca risultati corretti in tutti i possibili casi di esecuzione previsti (e.g., un algoritmo di ordinamento deve restituire sempre un elenco ordinato) Leggibilità Adoperare uno stile di programmazione che ne semplifichi la comprensione ed, al contempo, documentare opportunamente il codice sorgente ed il progetto nella sua interezza (e.g., evitare variabili dai nomi criptici tipo a, b, c, d, e)

Requisiti per un buon programma Modificabilità Semplificare la possibilità di modificare un programma preesistente per soddisfare degli eventuali nuovi requisiti (e.g., se il colore delle finestre viene memorizzato in una sola variabile mi basterà cambiare quella per passare da rosa a grigio) Portabilità Favorire la possibilità di riutilizzare il programma realizzato su sistemi diversi da quello inizialmente utilizzato (e.g., un gioco per telefonini scritto in Java potrà funzionare su tutti i telefonini Java compatibili, anche se di marche diverse)

Requisiti per un buon programma Efficienza Implementare soluzioni concettualmente e sperimentalmente efficienti rispetto ai requisiti del progetto (e.g., un programma che impiega 10 anni a terminare è probabilmente inutile) Parametricità Realizzare soluzioni generali riutilizzabili in contesti differenti. (e.g. una funzione per lordinamento di un elenco telefonico, se scritta opportunamente, andrà bene per ordinare un qualsiasi altro elenco di nomi)

Realizzare un buon programma La possibilità di realizzare un buon programma è condizionata alladozione di opportune metodologie di sviluppo Queste intervengono: A priori, in fase di progetto, guidando lo sviluppatore nelladottare le scelte migliori per la realizzazione del programma A posteriori, in fase di analisi, consentendo di valutare la qualità e la correttezza di un programma già realizzato

Metodologie di progettazione Top-down (dallalto verso il basso) Decompone il problema di partenza in sottoproblemi di più semplice risoluzione Il processo di scomposizione si arresta quando si giunge a problemi elementari Bottom-up (dal basso verso lalto) Risolve isolatamente problemi più semplici e li assembla per la risoluzione di problemi più complessi Trova applicazione nei linguaggi orientati agli oggetti (e.g., C++, Java)

Progettazione top-down Vantaggi: Storicamente indicata per la risoluzione di problemi molto complessi Tali problemi possono essere suddivisi in problemi più elementari Diviene inoltre possibile ripartire più facilmente un lavoro tra diversi sviluppatori Svantaggi: Le soluzioni sviluppate sono difficilmente riutilizzabili in contesti diversi da quelli previsti originariamente La progettazione trascura limportanza delle strutture dati

Progettazione bottom-up Vantaggi: Si affrontano inizialmente problemi elementari e di semplice risoluzione I programmi così realizzati costituiranno moduli da utilizzare nella risoluzione problemi più complessi La possibilità di riutilizzare i programmi realizzati consegue direttamente dalla strategia di progetto Svantaggi: I tempi di sviluppo sono tipicamente più lunghi di quelli richiesti dalla metodologia top-down E più complessa da attuare

Metodologie di progettazione Esercizio: Progettare un programma che acquisisca una lista di valori numerici in input e ne restituisca lelenco ordinato 1.Leggi dati in input 2.Ordina i dati letti 3.Stampa dati ordinati 1.Alloca un array di interi Vettore 2.For i from 0 to n-1 3. Leggi da tastiera Vettore[i] 4.Ordina i dati letti 5.For i from 0 to n-1 6. Stampa Vettore[i]

Verifica correttezza #include #define N 6 // Numero degli elementi da ordinare int main(void){ int vettore[N]; // Mantiene gli elementi da ordinare int scambio; // Usato come variabile temporanea effettuare lo // scambio durante lordinamento int minimo, i, j, pos_minimo; for(i=0; i<N; i++) // Legge gli N elementi da tastiera scanf("%d", &vettore[i]);

for(i=0; i<N-1; i++) { pos_minimo=i; minimo=vettore[i]; // ricerca il valore minimo in Vettore[i+1..N] for(j=i+1; j<N; j++) if( vettore[j]<minimo ) { pos_minimo=j; minimo=vettore[j]; } // scambia vettore[pos_minimo] e vettore[i] scambio=vettore[pos_minimo]; vettore[pos_minimo]=vettore[i]; vettore[i]=scambio; } for(i=0; i<N; i++) // Stampa gli N elementi ordinati printf("%d\n", vettore[i]); return 0; }

Leggibilità di un programma Sviluppare programmi che siano leggibili e ben documentati presenta notevoli vantaggi: Consente di comprendere con facilità quale problema il programma risolve e con quale approccio Facilita la possibilità di condividere con altri sviluppatori le soluzioni impiegate Semplifica la possibilità di tornare a modificare in un secondo momento un programma sviluppato in passato Svantaggi: E una attività noiosa e, spesso, apparentemente inutile

Leggibilità di un programma Esistono numerose possibilità di intervento per migliorare la leggibilità di un programma, tra queste citiamo: Formattare (indentare) il codice sorgente Utilizzare nomi di variabili autoesplicativi Commentare il codice sorgente

#include int main(void) { int beta, gamma, i, delta;i=1;delta=0; scanf("%d", &beta); while(i<=9) { scanf("%d", gamma); if( beta<gamma)delta++;beta=gamma; i++; } printf("%d\n", delta);return 0; } ??? Formattare il codice sorgente

for(int i = 0; i < 5; i++) { istruzione1; istruzione2; istruzione3; } if (condizione) { istruzione1; istruzione2; } else { istruzione3; istruzione4; } void funzione (int numero) { istruzione1; istruzione2; istruzione3; } do{ istruzione1; istruzione2; istruzione3; } while (i > 0) Una buona formattazione si ottiene disponendo opportunamente il codice su righe e colonne in modo da far risaltare le singole istruzioni ed il contesto nel quale queste vengono eseguite Formattare il codice sorgente

#include int main(void) { int beta, gamma, i, delta; i=1; delta=0; scanf("%d", &beta); while(i<=9) { scanf("%d", &gamma); if( beta<gamma ) delta++; beta=gamma; i++; } printf("%d\n", delta); return 0; } #include int main(void) { int beta, gamma, i, delta;i=1;delta=0; scanf("%d", &beta); while(i<=9) { scanf("%d", gamma); if( beta<gamma)delta++;beta=gamma; i++; } printf("%d\n", delta);return 0; } Prima …. … Dopo

Utilizzare nomi di variabili autoesplicativi E preferibile attribuire alle variabili dei nomi che aiutino a comprenderne il significato e la finalità: E.g. Definire la variabile che mantiene una somma: somma Definire un intero che mantiene un indice: indice Definire una coppia di matrici da sommare: matrice1 e matrice2 Evitare nomi criptici o incomprensibili! E.g a,b,c,d x,y,z,v,w variabile1,variabile2,variabile3

#include int main(void) { int beta, gamma, i, delta; i=1; delta=0; scanf("%d", &beta); while(i<=9) { scanf("%d", &gamma); if( beta<gamma ) delta++; beta=gamma; i++; } printf("%d\n", delta); return 0; } #include int main(void) { int ultimo_numero, penultimo_numero, int i, conta_numeri; i=1; conta_numeri=0; scanf("%d", &penultimo_numero); while(i<=9) { scanf("%d", &ultimo_numero); if( penultimo_numero<ultimo_numero ) conta_numeri++; penultimo_numero=ultimo_numero; i++; } printf("%d\n", conta_numeri); return 0; }

Commentare il codice I commenti sono messaggi di testo che possono essere inseriti in un codice sorgente al fine di migliorarne la comprensibilità Non hanno alcun effettto sul funzionamento di un programma … … a patto che siano usati correttamente! In C/C++ esistono due tipologie di commenti: Commenti su una sola riga, sono preceduti dalla coppia di simboli // e si concludono al termine della riga stessa Commenti su più righe, sono preceduti e seguite dalle coppie di simboli /* e */. Tutto il testo racchiuso tra questi due coppie di simboli si intende essere un commento I commenti possono essere utilizzati per : Definire lo scopo di una funzione e spiegare il significato dei suoi parametri Chiarire il ruolo di una variabile Commentare un gruppo di istruzioni

// Questo programma legge una sequenza di 10 numeri e calcola // quanti numeri sono maggiori del precedente. #include int main(void){ int ultimo_numero;// ultimo numero letto int penultimo_numero;// penultimo numero letto int i; int conta_numeri;// memorizza quante volte un numero e' // maggiore del precedente // assegnazione valori iniziali alla variabile di ciclo e al contatore i=1; conta_numeri=0; scanf("%d", &penultimo_numero); // lettura del primo numero …

// leggo i successivi numeri: confronto ognuno con il precedente while(i<=9) { scanf("%d", &ultimo_numero);// leggo un numero // confronto ed eventuale incremento del contatore if( penultimo_numero<ultimo_numero ) conta_numeri++; // l'ultimo numero letto diventa il penultimo, penultimo_numero=ultimo_numero; i++; } printf("%d\n", conta_numeri); // stampa risultato return 0; }