Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale...

32
Fasi della programmazione Gabriella Trucco

Transcript of Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale...

Page 1: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Fasi della

programmazioneGabriella Trucco

Page 2: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Algoritmi

Uso di algoritmi nella vita quotidiana

Algoritmo: sequenza di passi che, se intrapresa da un esecutore, permette

di ottenere i risultati attesi a partire dai dati forniti.

Dalla specifica all’automatizzazione

Page 3: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Quando l’esecutore è il calcolatore

Calcolatori: macchine in grado di eseguire velocemente e con precisione

sequenze di operazioni elementari.

Programma: descrizione di un algoritmo, espressa in un linguaggio di

programmazione che il calcolatore è in grado di comprendere ed

eseguire.

Il calcolatore riceve in ingresso un programma e un insieme di dati iniziali e

produce in uscita i risultati dell’esecuzione del programma.

A differenza di altre macchine automatiche (lavatrici, calcolatrici tascabili,

ecc.) i calcolatori sono programmabili

Page 4: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Programmazione

Procedimento che porta alla definizione dei programmi adatti a risolvere

problemi

I concetti che stanno alla base della programmazione si possono spiegare

e comprendere senza far riferimento al calcolatore.

Page 5: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Fasi della programmazione

Quattro (macro) fasi principali

1. Definizione del problema (specifica)

2. Individuazione di un procedimento risolutivo (algoritmo: analisi e

modellazione)

3. Codifica dell’algoritmo in un linguaggio di programmazione

4. Esecuzione e verifica

Page 6: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Specifica

Prima fase: comprendere e definire (specificare) il problema che si

vuole risolvere.

La specifica del problema può essere fatta in maniera più o meno

rigorosa, a seconda del formalismo descrittivo utilizzato.

La specifica di un problema prevede la descrizione dello stato

iniziale del problema (dati iniziali, input) e dello stato finale atteso (i

risultati, output).

Page 7: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Esempi

1. Dati due numeri, trovare il maggiore.

2. Dato un elenco telefonico e un nome, trovare il numero di telefono

corrispondente.

3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli,

determinare il percorso più veloce da A a B.

4. Scrivere tutti i numeri pari che non sono la somma di due numeri primi

(Congettura di Goldbach).

5. Decidere per ogni programma e per ogni dato in ingresso, se il programma

C termina quando viene eseguito su quel dato.

Page 8: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Specifica

Caratteristiche comuni ai problemi

informazioni in ingresso informazioni in uscita

stato iniziale stato finale

Page 9: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Formulazione dei problemi

La descrizione non fornisce un metodo risolutivo (es. 3 )

La descrizione del problema è talvolta ambigua o imprecisa (es. 2, con

Mario Rossi che compare più volte )

Per alcuni problemi non è noto un metodo risolutivo (es. 4 )

Esistono problemi per i quali è stato dimostrato che non può esistere un

metodo risolutivo (es. 5 )

Page 10: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Specifica

Descrizione del problema:

dati in ingresso

risultati desiderati (in uscita)

relazioni tra dati in ingresso e dati in uscita

condizioni al contorno

Tipi di specifica

informale (testo)

formale (formalismo)

Vincoli da rispettare (risorse)

Page 11: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Esempio di specifica informale

Scrivere un programma che, data una lista di schede cliente, costituite dai

campi ragione sociale, fatturato, [...], le ordina per fatturato. L'ordinamento

deve essere eseguito senza occupare altra memoria che quella già occupata

dalle schede più una, e deve impiegare meno di 1 secondo anche quando le

schede sono 10.000.

Page 12: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Esempio di specifica formale

S=⟨ X ,Y , I ,U ⟩

X: ingressi

Y: uscite

I: precondizioni

U: postcondizioni

Per ogni dato x appartenente a X che soddisfi la formula I(x), il risultato y

appartenente a Y deve soddisfare la formula U(x, y).

Page 13: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Algoritmi

Determinare un procedimento risolutivo per un dato problema

Il concetto di algoritmo ha origini molto lontane

Più recentemente problema di caratterizzare problemi e classi di problemi

per i quali è possibile individuare una soluzione algoritmica

esistono problemi per i quali non è possibile individuare una soluzione

algoritmica.

Page 14: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Proprietà di un algoritmo

La descrizione di un procedimento risolutivo può considerarsi un algoritmo

se rispetta alcuni requisiti essenziali, tra i quali:

1. Finitezza

2. Non-ambiguità

3. Eseguibilità

Esempio di procedimento che non rispetta alcuni dei requisiti precedenti:

le ricette di cucina: aggiungere sale q.b. - non rispetta 2.

Page 15: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Progettazione (o analisi) di un

algoritmo

Approccio top-down

parte dai requisiti della specifica

li decompone in sottorequisiti

procede per decomposizione, in modo gerarchico

termina quando i sottorequisiti sono compiti elementari

Approccio bottom-up

parte dai compiti elementari che si sanno già svolgere

li combina per crearne di più complessi

strumenti, librerie, subroutines, utilities

mattoncini facili da realizzare e da verificare

Page 16: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Analisi top-down

L'analisi top down parte dai i requisiti che devono essere soddisfatti per

risolvere il problema.

Questi vengono poi divisi in un piccolo numero di sottorequisiti; ciascun

sottorequisito che non sia un compito elementare viene a sua volta diviso

in sottorequisiti.

Questa scomposizione termina quando tutti i sottorequisiti rappresentano

compiti elementari.

Progettazione di algoritmi chiari e ben strutturati.

Chiarezza e strutturazione di un algoritmo mantenuti dal codice che lo

realizza.

Esigenza di una programmazione strutturata

Page 17: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Programmazione strutturata

Idea: scomporre il codice in parti più semplici senza lasciare che i dettagli

di ciascuna parte del codice interferiscano con lo sviluppo del programma

nel suo complesso.

Attività di processo e attività di gestione

In generale, ciascuna attività di gestione comprende un costrutto di

controllo, come una decisione, una selezione o un'iterazione.

Integrazione di tutte le attività identificate in componenti funzionali o

moduli.

Page 18: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Programmazione strutturata

Quali attività integrare nello stesso modulo?

dimensione

Profondità

fase temporale

stessa base condizionale

condivisione dei dati

coesione funzionale

Page 19: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Programmazione strutturata

Vincoli ai modi in cui l'esecuzione di attività di processo è controllata.

Costrutti di controllo fondamentali:

esecuzione seriale

Iterazione

selezione

Page 20: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Modellazione di un algoritmo

Programma come sistema

Modellazione concettuale

Evidenziare eventuali vizi concettuali

Fornire documentazione

Page 21: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Documentazione

Ciò che, senza essere il programma stesso, è usato da un altro

programmatore per capire il programma

Documentazione interna: commenti nel corpo del programma,

formattazione, …

Documentazione esterna: documenti di progetto separati dal

programma

Manuale utente

Manuale di riferimento

Page 22: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Codifica

Individuare una rappresentazione degli oggetti di interesse del problema e

tradurre la descrizione dell’algoritmo in un opportuno linguaggio noto

all’esecutore.

Algoritmo codificato in un linguaggio di programmazione.

Risultato: programma eseguibile per il calcolatore.

Quanto più il linguaggio di descrizione dell’algoritmo è vicino al linguaggio

di programmazione scelto, tanto più semplice è la fase di traduzione e

codifica

Page 23: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Codifica

Scelta del linguaggio di programmazione

Scrittura del codice

Conforme al progetto

Page 24: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Codifica

I linguaggi di programmazione forniscono strumenti linguistici per

rappresentare gli algoritmi sotto forma di programmi che possano essere

compresi da un calcolatore.

In particolare dobbiamo rappresentare nel linguaggio di programmazione

Algoritmo programma

informazioni iniziali dati in ingresso

informazioni utilizzate dall’algoritmo dati ausiliari

informazioni finali dati in uscita

Page 25: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Esecuzione

La fase conclusiva

Spesso questa fase porta alla luce errori che possono coinvolgere ciascuna

delle fasi precedenti

revisione di una o più

Debugger: aiuta nella individuazione degli errori e nella messa a punto dei

programmi.

Page 26: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Verifica e correzione

Scoprire gli errori:

collaudo empirico

non garantisce la correttezza

criterio della massima copertura

verifica formale

garantisce la correttezza

molto onerosa

Correzione (eliminazione degli errori)

Spesso genera un riciclo dell'intero processo

Page 27: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Verifica del programma

E' evidente che la verifica è "meglio" della validazione, poiché la verifica

ha una valore assoluto (se la dimostrazione è corretta), mentre la

validazione ha un valore solo statistico.

Difficile ed oneroso verificare programmi di una certa complessità

E' bene sottolineare, tuttavia, che la validazione è in grado soltanto di

rivelare la presenza di un errore; non è mai in grado di garantirne l'assenza!

Page 28: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Collaudo empirico

Quando si valida un programma, lo spirito del gioco non è dimostrare che il programma

funziona, ma che non funziona

esercitare tutto il codice

provare alcuni casi tipici

provare tutti i casi atipici

provare tutti i casi limite

Test di regressione: ogni modifica apportata durante la sua manutenzione richiede che

le parti modificate vengano collaudate di nuovo.

Approcci selettivi al test di regressione:

approcci di minimizzazione

approcci di copertura;

approcci sicuri

Page 29: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Esempio

Problema: calcolo del prodotto di due interi positivi

Specifica

Input: due valori interi positivi A e B

Output: il valore di A×B

Algoritmo

Se l’esecutore che scegliamo è in grado di effettuare tutte le operazioni di

base sui numeri, un semplice algoritmo è il seguente:

1. Passo 1. Acquisisci il primo valore, sia esso A

2. Passo 2. Acquisisci il secondo valore, sia esso B

3. Passo 3. Ottieni il risultato dell’operazione A×B

Page 30: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Esempio

Codifica

Un esecutore che rispetta le ipotesi precedenti è una persona dotata di una

calcolatrice tascabile. La codifica dell’algoritmo in questo caso può essere:

Passo 1. Digita in sequenza le cifre decimali del primo valore

Passo 2. Digita il tasto *

Passo 3. Digita in sequenza le cifre decimali del secondo valore

Passo 4. Digita il tasto =

Page 31: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Esempio

Supponiamo ora che l’esecutore scelto sia in grado di effettuare solo le operazioni elementari di somma, sottrazione, confronto tra numeri.

E’ necessario individuare un nuovo procedimento risolutivo che tenga conto delle limitate capacità dell’esecutore

Algoritmo 2

Passo 1. Acquisisci il primo valore, sia esso A

Passo 2. Acquisisci il secondo valore, sia esso B

Passo 3. Associa 0 ad un terzo valore, sia esso C

Passo 4. Finchè B>0 ripeti

Passo 4.1. Somma a C il valore A

Passo 4.2. Sottrai a B il valore 1

Passo 5. Il risultato è il valore C

Page 32: Fasi della programmazione - Home di homes.di.unimi.it · 3. Data la struttura di una rete stradale e le informazioni sui flussi dei veicoli, determinare il percorso più veloce da

Esempio

Un esecutore che rispetta le ipotesi precedenti è un bimbo in grado di effettuare le operazioni richieste (somma, sottrazione e confronto) e di riportare i risultati di semplici calcoli su un quaderno.

Codifica

Passo 1. Scrivi il primo numero nel riquadro A

Passo 2. Scrivi il secondo numero nel riquadro B

Passo 3. Scrivi il valore 0 nel riquadro C

Passo 4. Ripeti i seguenti passi finché il valore nel riquadro B è maggiore di 0:

calcola la somma tra il valore in A e il valore in C

scrivi il risultato ottenuto in C

- calcola la differenza tra il valore in B ed il numero 1

- scrivi il risultato ottenuto in B

Passo 5. Il risultato è quanto contenuto nel riquadro C.