Progettazione di Progettazione di
Programmi Programmi
Corso di Programmazione Corso di Programmazione CdS:
CdS: Informatica e Tecnologie Informatica e Tecnologie
per la Produzione di Software
per la Produzione di Software
Nicola Fanizzi
Nicola Fanizzi
2 2
Obiettivo Obiettivo
Risoluzione di un problema mediante un Risoluzione di un problema mediante un calcolatore
calcolatore
Partire dalla descrizione del problema Partire dalla descrizione del problema
In linguaggio naturale In linguaggio naturale
per giungere alla stesura di un programma per giungere alla stesura di un programma
nel linguaggio di programmazione sceltonel linguaggio di programmazione scelto
3 3
Ciclo di Progettazione Ciclo di Progettazione
Analisi Analisi
Progetto Progetto
Codifica Codifica
4 4
Fasi di Sviluppo Fasi di Sviluppo
(Studio di fattibilità)(Studio di fattibilità)
AnalisiAnalisi
Chiarifica del problemaChiarifica del problema
COSA si ha a COSA si ha a disposizione ? disposizione ?
COSA si deve ottenere ?COSA si deve ottenere ?
ProgettazioneProgettazione
Individuazione di una Individuazione di una strategia di soluzione strategia di soluzione
COME raggiungere COME raggiungere l'obiettivo dato quello l'obiettivo dato quello di cui si dispone ?
di cui si dispone ?
Scelta delle strutture di datiScelta delle strutture di dati
CodificaCodifica
Scrittura del programmaScrittura del programma
Verifica (e correzione)Verifica (e correzione)
(Test) del programma(Test) del programma
Rimanda ad una delle Rimanda ad una delle fasi precedenti
fasi precedenti
ManutenzioneManutenzione
Correttiva, Adattativa, Correttiva, Adattativa, Migliorativa
Migliorativa
Analisi Analisi
Progetto Progetto
Codifica Codifica
5 5
Sviluppo di un Programma Sviluppo di un Programma
Accumulo degli errori Accumulo degli errori
Gli errori in ciascuna fase si ripercuotono su Gli errori in ciascuna fase si ripercuotono su tutte le fasi successive
tutte le fasi successive
Più costosi se rinvengono da fasi più lontanePiù costosi se rinvengono da fasi più lontane
Ciascuna fase può aggiungere errori a quelli Ciascuna fase può aggiungere errori a quelli delle fasi precedenti
delle fasi precedenti
Vari approcci Vari approcci
Differente sequenza di esecuzione delle fasi di Differente sequenza di esecuzione delle fasi di sviluppo
sviluppo
6 6
Sviluppo di un Programma Sviluppo di un Programma
Documentazione Documentazione di di ogni ogni fase fase
Necessaria per chi riprenderà in seguito il Necessaria per chi riprenderà in seguito il programma per modificarlo
programma per modificarlo
L’autore/gli autori stesso/iL’autore/gli autori stesso/i
Altri sviluppatoriAltri sviluppatori
La documentazione prodotta in ciascuna La documentazione prodotta in ciascuna fase rappresenta l'input per le fasi
fase rappresenta l'input per le fasi successive
successive
7 7
Problema Problema
Comprendere il problemaComprendere il problema
Il suo significatoIl suo significato
Il suo scopoIl suo scopo
come un tutt’uno come un tutt’uno
Vederne molto chiaramente le parti principaliVederne molto chiaramente le parti principali
IncognitaIncognita/e o /e o ObiettivoObiettivo/i/i
Ciò che si vuole trovareCiò che si vuole trovare
DatiDati
Ciò che è dato o conosciutoCiò che è dato o conosciuto
Condizione/iCondizione/i
Specifica come l’incognita è connessa ai dati
8 8
Specifica di Problema Specifica di Problema
insieme di ingresso o parametri insieme di ingresso o parametri
i parametri del problema i parametri del problema
dati di ingressodati di ingresso
pre-condizione pre-condizione
condizione relativa all’insieme di ingresso condizione relativa all’insieme di ingresso
insieme di uscita o risultati insieme di uscita o risultati
dati di uscitadati di uscita
post-condizione post-condizione
condizione relativa all’insieme di uscitacondizione relativa all’insieme di uscita
9 9
Tipi di Problemi Tipi di Problemi
decisionali: decisionali:
rispondere alla domandarispondere alla domanda dato x input,
dato x input, ∃∃ y y ∋∋' P(x,y) = vero ' P(x,y) = vero ??
ricerca: ricerca:
trovare y tale che trovare y tale che P(x,y) = veroP(x,y) = vero
ottimizzazione: ottimizzazione:
trovare y tale che trovare y tale che P(x,y) = vero
P(x,y) = vero ∧∧ ∀∀z P(x,z) = Veroz P(x,z) = Vero:: f(y) ≥ f(z) f(y) ≥ f(z)
10 10
I Termini del Problema I Termini del Problema
Scopo di un problema che Scopo di un problema che
“chiede di trovare”
“chiede di trovare”
TrovareTrovare
Trovare, produrre, costruire, identificare, elencare, Trovare, produrre, costruire, identificare, elencare, caratterizzare, …
caratterizzare, …
un certo oggettoun certo oggetto
L’incognita del problemaL’incognita del problema
soddisfacente alla condizione del problemasoddisfacente alla condizione del problema
Collega l’incognita ai dati del problemaCollega l’incognita ai dati del problema
11 11
Formulazione del Problema Formulazione del Problema
I problemi reali sono tutt’altro che ben I problemi reali sono tutt’altro che ben formulati
formulati
I datiI dati
Sono sufficienti?Sono sufficienti?
Sono sovrabbondanti?Sono sovrabbondanti?
La condizioneLa condizione
È sufficiente, è sovrabbondante?È sufficiente, è sovrabbondante?
È contraddittoria?È contraddittoria?
12 12
Formulazione del Problema Formulazione del Problema
Caso di problemi perfettamente Caso di problemi perfettamente determinati (ad es. un teorema) determinati (ad es. un teorema)
Tutte le affermazioni contenute nell’ipotesi del Tutte le affermazioni contenute nell’ipotesi del teorema sono essenziali per dimostrare la tesi teorema sono essenziali per dimostrare la tesi
Se la dimostrazione non tiene conto di una Se la dimostrazione non tiene conto di una qualsiasi parte dell’ipotesi è senz’altro errata qualsiasi parte dell’ipotesi è senz’altro errata
Analogamente se una parte della condizione di un Analogamente se una parte della condizione di un problema che “chiede di trovare” non viene presa problema che “chiede di trovare” non viene presa in considerazione, si finisce col risolvere un
in considerazione, si finisce col risolvere un problema diverso da quello originale
problema diverso da quello originale
13 13
Formulazione del Problema Formulazione del Problema
Un problema Un problema chiaramente enunciato chiaramente enunciato deve deve specificare
specificare
La La categoriacategoria a cui appartiene l’incognita a cui appartiene l’incognita
Che genere di cosa bisogna trovareChe genere di cosa bisogna trovare
Esempio: un numero, una parola, ecc.
Esempio: un numero, una parola, ecc.
La La condizionecondizione che deve soddisfare l’incognita che deve soddisfare l’incognita
Il sottoinsieme degli oggetti che soddisfano la Il sottoinsieme degli oggetti che soddisfano la
condizione, tra tutti gli oggetti della categoria a cui condizione, tra tutti gli oggetti della categoria a cui deve appartenere l’incognita, Le soluzioni
deve appartenere l’incognita, Le soluzioni
I dati
14 14
Formulazione del Problema Formulazione del Problema
Quasi tutti i problemi sono mal formulati Quasi tutti i problemi sono mal formulati
Non chiaramente enunciatiNon chiaramente enunciati
OmissioniOmissioni
AmbiguitàAmbiguità
ImprecisioniImprecisioni
Possibilità che non si comprendano bene Possibilità che non si comprendano bene le richieste del problema
le richieste del problema
Necessità di esplicitare le ipotesiNecessità di esplicitare le ipotesi
15 15
Esempio Esempio
ProblemaProblema
Calcolare l’Calcolare l’altezzaaltezza di uno stabile di uno stabile avente n piani di h metri
avente n piani di h metri
ObiettivoObiettivo
Trovare il valore dell’Trovare il valore dell’altezza complessivaaltezza complessiva dello stabile dello stabile
DatiDati
Numero di pianiNumero di piani dello stabile ( dello stabile (nn))
Altezza dei pianiAltezza dei piani ( (hh))
16 16
Imprecisione ed Ambiguità Imprecisione ed Ambiguità
Nell’obiettivo (incognita)Nell’obiettivo (incognita)
Nei datiNei dati
Nell'esempio, l’
Nell'esempio, l’incognitaincognita è un valore numerico è un valore numerico
(espressa nella stessa unità di misura dei valori in (espressa nella stessa unità di misura dei valori in
ingresso) e rappresenta l’altezza di uno stabile ingresso) e rappresenta l’altezza di uno stabile
Cosa si intende per Cosa si intende per altezza complessiva?altezza complessiva?
La distanza fra suolo e parapetto del terrazzo?La distanza fra suolo e parapetto del terrazzo?
O questo è escluso?O questo è escluso?
Cosa si intende per numero di piani?Cosa si intende per numero di piani?
Il piano terra costituisce un piano?Il piano terra costituisce un piano?
Ed è compreso nel dato Ed è compreso nel dato n fornitoci?n fornitoci?
Cosa si intende per Cosa si intende per altezza dei pianialtezza dei piani??
La distanza che intercorre fra pavimento e soffitto?La distanza che intercorre fra pavimento e soffitto?
O fra due solai successivi?O fra due solai successivi?
17 17
Formulazione del Problema Formulazione del Problema
Tutti i problemi enunciati a parole Tutti i problemi enunciati a parole contengono ipotesi semplificatrici contengono ipotesi semplificatrici
sottintese sottintese
Necessità di un certo lavoro preliminare di Necessità di un certo lavoro preliminare di
interpretazione e di astrazione da parte di colui interpretazione e di astrazione da parte di colui
che risolve il problema che risolve il problema
In particolare quando si parte da un problema In particolare quando si parte da un problema
relativo ad oggetti reali per ridurlo ad un problema relativo ad oggetti reali per ridurlo ad un problema matematico
matematico
18 18
Esempio Esempio
Un aeroplano di pattuglia percorre 220 Un aeroplano di pattuglia percorre 220 miglia all’ora in atmosfera tranquilla.
miglia all’ora in atmosfera tranquilla.
Esso trasporta benzina per 4 ore di volo Esso trasporta benzina per 4 ore di volo sicuro. Se decolla in pattuglia contro un sicuro. Se decolla in pattuglia contro un vento di 20 miglia orarie, di quanto può vento di 20 miglia orarie, di quanto può
allontanarsi per ritornare sano e salvo?
allontanarsi per ritornare sano e salvo?
È sottintesoÈ sottinteso
Che si suppone che il vento continui a soffiare con la Che si suppone che il vento continui a soffiare con la stessa intensità durante tutto il volo
stessa intensità durante tutto il volo
Che l’aeroplano voli in linea rettaChe l’aeroplano voli in linea retta
Che il tempo necessario per cambiare direzione nel Che il tempo necessario per cambiare direzione nel
19 19
Formulazione di un Formulazione di un
Problema Problema
NON iniziare a risolvere un problema NON iniziare a risolvere un problema prima di averlo capito
prima di averlo capito
Lo si è capito quando si è in grado di Lo si è capito quando si è in grado di
riformulare il problema indicando chiaramente riformulare il problema indicando chiaramente
Le incogniteLe incognite
I datiI dati
e spiegandoe spiegando
La condizioneLa condizione
20 20
Chiarifica Chiarifica
Riformulazione del problema – Riformulazione del problema –
considerandolo risolto – cercando di vedere considerandolo risolto – cercando di vedere
con chiarezza, in un ordine conveniente, con chiarezza, in un ordine conveniente, tutte le relazioni che devono intercorrere tutte le relazioni che devono intercorrere fra le incognite ed i dati, in rapporto alla fra le incognite ed i dati, in rapporto alla
condizione condizione
Se n è il numero delle incognite, Se n è il numero delle incognite, ottenere n equazioni
ottenere n equazioni
21 21
Esempio Esempio
Un fattore ha polli e conigli. Un fattore ha polli e conigli.
Questi animali hanno 50 teste e 140 zampe.
Questi animali hanno 50 teste e 140 zampe.
Quanti polli e quanti conigli ha il fattore?
Quanti polli e quanti conigli ha il fattore?
Bisogna trovare 2 numeri, Bisogna trovare 2 numeri, p p e e cc, che rappresentano il , che rappresentano il numero dei polli e il numero dei conigli rispettivamente numero dei polli e il numero dei conigli rispettivamente
Sono forniti il numero delle teste (50) ed il numero Sono forniti il numero delle teste (50) ed il numero delle zampe (140)
delle zampe (140)
p + c = 50 p + c = 50 2p + 4c = 140 2p + 4c = 140
2 = nro zampe per ciascun pollo2 = nro zampe per ciascun pollo
4 = nro zampe per ciascun coniglio4 = nro zampe per ciascun coniglio
22 22
Chiarifica Chiarifica
Il chiarimento del problema avviene Il chiarimento del problema avviene
Se il proponente del problema è disponibileSe il proponente del problema è disponibile
Ponendogli domande puntuali riguardo lo scopo del Ponendogli domande puntuali riguardo lo scopo del problema, i dati e le relazioni intercorrenti tra
problema, i dati e le relazioni intercorrenti tra incognita e dati
incognita e dati
Altrimenti Altrimenti
Facendo opportune ipotesiFacendo opportune ipotesi
Ottenere dei campioniOttenere dei campioni
23 23
Chiarifica Chiarifica
La fase di chiarificaLa fase di chiarifica
PUÒ raffinare e definire meglio, eventualmente ricorrendo a PUÒ raffinare e definire meglio, eventualmente ricorrendo a delle ipotesi semplificative, quanto non esplicitamente presente delle ipotesi semplificative, quanto non esplicitamente presente
nella traccia del problema come fornita dal committente nella traccia del problema come fornita dal committente
NON DEVE disattendere o contravvenire a quanto NON DEVE disattendere o contravvenire a quanto
esplicitamente riportato nella traccia del problema come fornita esplicitamente riportato nella traccia del problema come fornita
dal committente dal committente
Generalmente per essere in grado di comprendere il Generalmente per essere in grado di comprendere il problema bisogna avere delle conoscenze pertinenti problema bisogna avere delle conoscenze pertinenti
Dominio del problemaDominio del problema
Esempio: problemi geometriciEsempio: problemi geometrici
Il teorema di Pitagora, la proporzionalità dei lati nei triangoli simili, Il teorema di Pitagora, la proporzionalità dei lati nei triangoli simili, formule per aree e volumi, ecc.
formule per aree e volumi, ecc.
24 24
Analisi Analisi
Input:Input: Traccia del problema Traccia del problema
Processo:Processo: Chiarire con precisione Chiarire con precisione COSACOSA vuole vuole il problema (non
il problema (non COMECOME va risolto) va risolto)
Obiettivo del problemaObiettivo del problema
Dati a disposizioneDati a disposizione
Risultati desideratiRisultati desiderati
Ambiguità e imprecisioni nella definizione del Ambiguità e imprecisioni nella definizione del problema
problema
Obiettivo, datiObiettivo, dati
Possibilità di capire male le richiestePossibilità di capire male le richieste
Output:Output: Descrizione dettagliata e precisa del Descrizione dettagliata e precisa del problema
problema
25 25
Analisi Analisi
Punti chiave Punti chiave
Dati (input)Dati (input)
Formato o tipo, ordine, limiti sui valori, limiti sul Formato o tipo, ordine, limiti sui valori, limiti sul volume, fine dei dati, ipotesi di ordinamento
volume, fine dei dati, ipotesi di ordinamento
Risultati (output)Risultati (output)
Contenuto, formato, ordine, limite sul volumeContenuto, formato, ordine, limite sul volume
Errori e Casi limiteErrori e Casi limite
Tipi di errori (di input e/o di elaborazione) Tipi di errori (di input e/o di elaborazione) ed azioni da intraprendere
ed azioni da intraprendere
Campioni di input e di output corrispondentiCampioni di input e di output corrispondenti
26 26
Analisi Analisi
Ambiguità Ambiguità
Alcune informazioni su cui è necessario Alcune informazioni su cui è necessario fare delle assunzioni
fare delle assunzioni
Ordine dell’inputOrdine dell’input
8/7 = 8 luglio o 7 agosto?8/7 = 8 luglio o 7 agosto?
Limiti sui valoriLimiti sui valori
0 < età < 1250 < età < 125
Errore di elaborazioneErrore di elaborazione
∆∆ < 0 nelle equazioni di II grado< 0 nelle equazioni di II grado
27 27
Analisi Analisi
Esempio Esempio
Data una lista di numeri, stampare il 1° Data una lista di numeri, stampare il 1°
numero della lista, il 2° e così via fino al numero della lista, il 2° e così via fino al
più grande dei valori presenti nella lista più grande dei valori presenti nella lista
33 88 22 2525 1313 19 ...19 ...
Necessità di una fase di chiarifica del Necessità di una fase di chiarifica del problema
problema
28 28
Analisi Analisi
Esempio Esempio
Input Input : : lista di numeri lista di numeri
Insieme composto da non più di 100 valori Insieme composto da non più di 100 valori interi positivi (>0).
interi positivi (>0).
Un valore fittizio nullo, aggiunto in coda Un valore fittizio nullo, aggiunto in coda all’insieme, definisce la fine dei dati
all’insieme, definisce la fine dei dati
Lo 0 non fa parte dei valoriLo 0 non fa parte dei valori
I dati di ingresso non sono ordinati per valoreI dati di ingresso non sono ordinati per valore
Campione di Ingresso: Campione di Ingresso: 1 7 3 9 5 8 1 7 3 9 5 8
29 29
Analisi Analisi
Esempio Esempio
Output: elenco di valoriOutput: elenco di valori
Si vuole la stampa di una Si vuole la stampa di una colonnacolonna di numeri che di numeri che corrispondono ai numeri di ingresso nello
corrispondono ai numeri di ingresso nello stesso stesso ordine
ordine
La colonna inizia con il primo numero e termina quando La colonna inizia con il primo numero e termina quando l’ultimo numero stampato è il più grande dell’intero insieme l’ultimo numero stampato è il più grande dell’intero insieme di ingresso
di ingresso
Verranno stampati Verranno stampati al massimoal massimo un numero di valori un numero di valori pari alla numerosità
pari alla numerosità dell’insieme di input dell’insieme di input
Se il valore più grande non è l’ultimoSe il valore più grande non è l’ultimo
Campione di Uscita:Campione di Uscita: 1 7 3 91 7 3 9 (incolonnati)(incolonnati)
30 30
Analisi Analisi
Esempio Esempio
Input Input
Quali numeri?Quali numeri?
Reali, interiReali, interi
Limiti sui valori?Limiti sui valori?
Qual è il minimo ammissibile? Qual è il massimo?Qual è il minimo ammissibile? Qual è il massimo?
Ad es., se rappresentassimo età non avrebbero Ad es., se rappresentassimo età non avrebbero senso dei valori negativi
senso dei valori negativi
Se fossero anni di nascita sarebbero fuori range Se fossero anni di nascita sarebbero fuori range tutti i valori > 2002
tutti i valori > 2002
Limiti sul volume?Limiti sul volume?
Quanti al massimo potranno essere i dati?Quanti al massimo potranno essere i dati?
31 31
Analisi Analisi
Domande Domande
Come si riconosce la fine dei dati?Come si riconosce la fine dei dati?
Sono ordinati?Sono ordinati?
Qual è il criterio di ordinamento?Qual è il criterio di ordinamento?
Crescente, decrescente, non crescente, non Crescente, decrescente, non crescente, non decrescente
decrescente
Lessicografico, …Lessicografico, …
Rispetto a cosa (per dati non atomici)?Rispetto a cosa (per dati non atomici)?
Cognome, anno di nascita, …Cognome, anno di nascita, …
Controlli sui dati in ingresso Controlli sui dati in ingresso
32 32
Analisi Analisi
Errori e casi limite Errori e casi limite
Valori negativiValori negativi
Scartare il dato, oppureScartare il dato, oppure
Prendere il valore assolutoPrendere il valore assoluto
Troppi dati (più di 100)Troppi dati (più di 100)
Prendere in considerazione solo i primi 100Prendere in considerazione solo i primi 100
Presenza di più massimiPresenza di più massimi
Fermarsi in output alla prima occorrenza del massimoFermarsi in output alla prima occorrenza del massimo
Mancanza di dati (lista vuota)Mancanza di dati (lista vuota)
Prevedere il controllo adeguato da programmaPrevedere il controllo adeguato da programma
Mancanza del flag di fine datiMancanza del flag di fine dati
Non rilevabile da programmaNon rilevabile da programma
NB:NB: Per ogni situazione di errore individuata va almeno Per ogni situazione di errore individuata va almeno inviato un messaggio di notifica all’utente
inviato un messaggio di notifica all’utente
33 33
Progettazione Progettazione
Si occupa di definire una strategia di soluzione Si occupa di definire una strategia di soluzione che porti ad ottenere il risultato desiderato
che porti ad ottenere il risultato desiderato
Necessita di una definizione chiara del Necessita di una definizione chiara del cosacosa si vuole si vuole ottenere
ottenere
Organizza la soluzione in un insieme di moduli Organizza la soluzione in un insieme di moduli cooperanti
cooperanti
Tecniche basate sul metodo di soluzione di problemi Tecniche basate sul metodo di soluzione di problemi consistente nello scomporre un problema in
consistente nello scomporre un problema in sottoproblemi più semplici
sottoproblemi più semplici
34 34
Progettazione Progettazione
Elementi a disposizioneElementi a disposizione
Dati in ingressoDati in ingresso
Dati in uscitaDati in uscita
Relazioni esistenti fra essiRelazioni esistenti fra essi
ProdottoProdotto
Rappresentazione delle entità del problemaRappresentazione delle entità del problema
Suddivisione in sottoproblemiSuddivisione in sottoproblemi
Strategia per passare dalle entità in ingresso a quelle Strategia per passare dalle entità in ingresso a quelle in uscita
in uscita
35 35
Progettazione Progettazione
Input: Analisi del problema Input: Analisi del problema
Processo: Chiarire con precisione Processo: Chiarire con precisione COME COME va ottenuto lo scopo voluto dal problema va ottenuto lo scopo voluto dal problema
Strategia di soluzioneStrategia di soluzione
Strutture di datiStrutture di dati
Output: Descrizione dettagliata della Output: Descrizione dettagliata della struttura della soluzione
struttura della soluzione
36 36
Progettazione Progettazione
Tecniche di Sviluppo Tecniche di Sviluppo
Top-DownTop-Down
Raffinamento successivo della procedura di soluzioneRaffinamento successivo della procedura di soluzione
Raffinamento della descrizione dei datiRaffinamento della descrizione dei dati
Bottom-UpBottom-Up
Sfrutta algoritmi codificati già esistenti Sfrutta algoritmi codificati già esistenti
raggruppandoli per adattarli a nuove situazioni raggruppandoli per adattarli a nuove situazioni
IbridaIbrida
Basata su una cooperazione fra le tecniche precedentiBasata su una cooperazione fra le tecniche precedenti
37 37
Progettazione Progettazione
Individuare una possibile scomposizione Individuare una possibile scomposizione in sottoproblemi più semplici
in sottoproblemi più semplici
Descrivere un procedimento risolutivo per Descrivere un procedimento risolutivo per ciascun sottoproblema
ciascun sottoproblema
Riportare l’algoritmo per il problema Riportare l’algoritmo per il problema originario
originario
Attenzione: l’algoritmo dipende sempre dal Attenzione: l’algoritmo dipende sempre dal modo in cui sono organizzati i dati
modo in cui sono organizzati i dati
38 38
Progettazione Progettazione
Criteri di Modularizzazione Criteri di Modularizzazione
Coesione: misura relativa ad un singolo modulo.Coesione: misura relativa ad un singolo modulo.
tipo di relazione tra funzioni svolte e tra i loro argomenti tipo di relazione tra funzioni svolte e tra i loro argomenti
Logica. Logica.
es. modulo di ordinamento es. modulo di ordinamento
Di comunicazioneDi comunicazione
Funzionale. Funzionale.
es. modulo per il calcolo degli stipendi es. modulo per il calcolo degli stipendi
Informativa. Informativa.
es. accorpamento di tutte le funzioni di stampa di messaggi d’errore es. accorpamento di tutte le funzioni di stampa di messaggi d’errore
AccoppiamentoAccoppiamento: misura delle relazioni fra moduli diversi: misura delle relazioni fra moduli diversi
Per dati: riguarda le modalità di scambio di informazioni fra moduliPer dati: riguarda le modalità di scambio di informazioni fra moduli
Tramite variabili localiTramite variabili locali
Tramite parametri per tutti i dati di I/O Tramite parametri per tutti i dati di I/O
(applicazione flessibile per non compromettere la leggibilità) (applicazione flessibile per non compromettere la leggibilità)
Per controllo: si passano dati che non vengono modificati, ma Per controllo: si passano dati che non vengono modificati, ma determinano l’ordine di esecuzione delle istruzioni
determinano l’ordine di esecuzione delle istruzioni
39 39
Progettazione Progettazione
Strategia di Soluzione Strategia di Soluzione
Individuare l’insieme di moduli che Individuare l’insieme di moduli che costituiscono la soluzione
costituiscono la soluzione
Il compito specifico di ciascunoIl compito specifico di ciascuno
Rappresentazione strutturata grafica o lineareRappresentazione strutturata grafica o lineare
Prima descrivere l’algoritmo principale (Main)Prima descrivere l’algoritmo principale (Main)
Poi dettagliare i singoli blocchi Poi dettagliare i singoli blocchi (procedure/funzioni)
(procedure/funzioni)
Le loro interazioniLe loro interazioni
Albero delle procedureAlbero delle procedure
40 40
Progettazione Progettazione
Definizione dei Dati Definizione dei Dati
Elencare le principali strutture dati Elencare le principali strutture dati
Per ogni singolo blocco (Main, Procedura o Per ogni singolo blocco (Main, Procedura o Funzione) riportare
Funzione) riportare
IdentificatoriIdentificatori
UsoUso
TipoTipo
RangeRange
Per le procedure parametriche riportare la Per le procedure parametriche riportare la specifica di interfaccia
specifica di interfaccia
41 41
Progettazione Progettazione
Esempio Esempio
Problema Problema
Trovare in una agendina il numero telefonico Trovare in una agendina il numero telefonico di una persona di cui sia noto il cognome
di una persona di cui sia noto il cognome
Dati di ingressoDati di ingresso
agendina e cognomeagendina e cognome
Dati di uscitaDati di uscita
Numero telefonicoNumero telefonico
Caso particolare: se nell’agenda non esiste quel Caso particolare: se nell’agenda non esiste quel cognome? Risposta “non trovato”
cognome? Risposta “non trovato”
42 42
Progettazione Progettazione
Esempio Esempio
Organizzazione di un’agendinaOrganizzazione di un’agendina
Pagine consecutivePagine consecutive
Ordinate alfabeticamenteOrdinate alfabeticamente
In base all’intestazioneIn base all’intestazione
Una singola lettera alfabeticaUna singola lettera alfabetica
Un gruppo di lettere consecutiveUn gruppo di lettere consecutive
Ci sono tutte le 26 lettere!Ci sono tutte le 26 lettere!
Ogni pagina contiene cognomi ed i corrispondenti Ogni pagina contiene cognomi ed i corrispondenti numeri telefonici relativi alla propria intestazione numeri telefonici relativi alla propria intestazione
All’interno di ciascuna pagina, i cognomi non sono generalmente All’interno di ciascuna pagina, i cognomi non sono generalmente ordinati ma raggruppati
ordinati ma raggruppati
Esempio:Esempio: GHGH
Gruppo dei cognomi che iniziano con G o con HGruppo dei cognomi che iniziano con G o con H
Non ordinatiNon ordinati
43 43
Progettazione Progettazione
Esempio Esempio
Descrivere il metodo che si usa quando Descrivere il metodo che si usa quando abbiamo da risolvere questo problema abbiamo da risolvere questo problema
Algoritmo di ricerca in una agendinaAlgoritmo di ricerca in una agendina
Bisogna Bisogna
Pensare “come si fa” a ricercare in un’agendina Pensare “come si fa” a ricercare in un’agendina telefonica
telefonica
Darne una descrizione Darne una descrizione sistematicasistematica
44 44
Progettazione Progettazione
Sottoproblemi e loro Soluzione Sottoproblemi e loro Soluzione
Scomposizione del problema in sottoproblemi Scomposizione del problema in sottoproblemi più semplici il cui insieme sia equivalente al più semplici il cui insieme sia equivalente al
problema di partenza problema di partenza
Trovare la pagina dell’agendina in cui dovrebbe Trovare la pagina dell’agendina in cui dovrebbe trovarsi (se c’è) il cognome dato
trovarsi (se c’è) il cognome dato
Ricercare il cognome dato nella pagina trovataRicercare il cognome dato nella pagina trovata
Risoluzione dei sottoproblemi individuatiRisoluzione dei sottoproblemi individuati
Quantunque chiara possa essere la formulazione di un Quantunque chiara possa essere la formulazione di un problema, essa non fornisce, in genere, un metodo che problema, essa non fornisce, in genere, un metodo che
consenta di ottenere il risultato partendo dai dati consenta di ottenere il risultato partendo dai dati
iniziali!
iniziali!
45 45
Progettazione Progettazione
Esempio Esempio
Sottoproblema 1Sottoproblema 1
Si tratta di un problema di ricerca in un insieme di Si tratta di un problema di ricerca in un insieme di pagine ordinato alfabeticamente
pagine ordinato alfabeticamente
L’insieme delle pagine che costituiscono l’agendina è L’insieme delle pagine che costituiscono l’agendina è piccolo
piccolo
La scansione è sequenzialeLa scansione è sequenziale
Si sfogliano tutte le pagine, una dopo l’altra, a partire dalla Si sfogliano tutte le pagine, una dopo l’altra, a partire dalla prima
prima
È una ricerca di sicuro successoÈ una ricerca di sicuro successo
La pagina cercata esiste sicuramente nell’agendinaLa pagina cercata esiste sicuramente nell’agendina
46 46
Progettazione Progettazione
Esempio Esempio
COME controlliamo se la pagina attuale è COME controlliamo se la pagina attuale è proprio la pagina cercata
proprio la pagina cercata
In tal caso avremmo raggiunto il nostro obiettivo In tal caso avremmo raggiunto il nostro obiettivo (termine della ricerca)
(termine della ricerca)
Sfogliare una pagina alla volta, iniziando dalla prima Sfogliare una pagina alla volta, iniziando dalla prima pagina, fino a che la pagina attuale contiene
pagina, fino a che la pagina attuale contiene nell’intestazione la lettera iniziale del cognome nell’intestazione la lettera iniziale del cognome
cercato cercato
Confrontare la lettera iniziale del cognome con la Confrontare la lettera iniziale del cognome con la lettera o il gruppo di lettere contenute
lettera o il gruppo di lettere contenute nell’intestazione della pagina attuale nell’intestazione della pagina attuale
47 47
Progettazione Progettazione
Esempio Esempio
Individuazione della pagina in cui cercare Individuazione della pagina in cui cercare il cognome voluto
il cognome voluto
AA BB CC
DD →→ se il cognome è se il cognome è Di_MauroDi_Mauro,, EE termina la scansionetermina la scansione
FF dell’agendina alla ricerca della paginadell’agendina alla ricerca della pagina GG
48 48
Progettazione Progettazione
Esempio Esempio
Entità da rappresentareEntità da rappresentare
Sequenza di pagineSequenza di pagine
2 componenti2 componenti
IntestazioneIntestazione
Insieme di righiInsieme di righi
Ogni pagina ha un insieme di righiOgni pagina ha un insieme di righi
Tutti con la stessa strutturaTutti con la stessa struttura
Ogni rigo ha le stesse suddivisioniOgni rigo ha le stesse suddivisioni
Ciascuna destinata ad un’informazione diversaCiascuna destinata ad un’informazione diversa
CognomeCognome
Numero telefonicoNumero telefonico
49 49
Progettazione Progettazione
Esempio Esempio
Strutture di dati Strutture di dati
Agendina: Agendina: File sequenzialeFile sequenziale
Pagina: Record/ClassePagina: Record/Classe
Intestazione: Intestazione: Insieme di CaratteriInsieme di Caratteri
Righe: Righe: Array di 25 RecordArray di 25 Record
Cognome: Array di 30 CaratteriCognome: Array di 30 Caratteri
Numero telefonico: Numero telefonico: Array di 10 CaratteriArray di 10 Caratteri
50 50
Progettazione Progettazione
Esempio Esempio
Per il sottoproblema 2 Per il sottoproblema 2
Si tratta di un problema di ricerca in un Si tratta di un problema di ricerca in un insieme di cognomi non ordinati
insieme di cognomi non ordinati
Non è assicurato che la ricerca avrà successoNon è assicurato che la ricerca avrà successo
Ossia che si troverà il cognome cercatoOssia che si troverà il cognome cercato
La ricerca è di tipo sequenziale La ricerca è di tipo sequenziale (come per il sottoproblema 1) (come per il sottoproblema 1)
Si parte dal primo cognome presente sulla pagina e Si parte dal primo cognome presente sulla pagina e si passa al cognome immediatamente successivo
si passa al cognome immediatamente successivo
51 51
Progettazione Progettazione
Esempio Esempio
La scansione dei cognomi nella pagina ha La scansione dei cognomi nella pagina ha termine quando:
termine quando:
Si è trovato un cognome uguale a quello Si è trovato un cognome uguale a quello cercato
cercato
In tal caso il numero riportato accanto è il risultatoIn tal caso il numero riportato accanto è il risultato
Oppure si sono scanditi tutti i cognomiOppure si sono scanditi tutti i cognomi
In tal caso il risultato è “non presente”In tal caso il risultato è “non presente”
Sfogliare una pagina alla volta, iniziando Sfogliare una pagina alla volta, iniziando dalla prima pagina, fino a che la pagina dalla prima pagina, fino a che la pagina
attuale contiene nell’intestazione la lettera
attuale contiene nell’intestazione la lettera
52 52
Progettazione Progettazione
Esempio Esempio
Ricercare in un elenco telefonico il numero Ricercare in un elenco telefonico il numero
corrispondente ad una persona di cui sia noto il cognome corrispondente ad una persona di cui sia noto il cognome
Molte pagine (più pagine per lettera)Molte pagine (più pagine per lettera)
Ordinamento a più livelli (Paesi, Cognomi)Ordinamento a più livelli (Paesi, Cognomi)
Ricercare in un vocabolario il significato corrispondente Ricercare in un vocabolario il significato corrispondente ad un termine dato
ad un termine dato
Stesse modalità di consultazioneStesse modalità di consultazione
Scandire sequenzialmente un cognome alla volta, Scandire sequenzialmente un cognome alla volta, iniziando dal primo, fino a che il cognome attuale iniziando dal primo, fino a che il cognome attuale
coincide con il cognome cercato coincide con il cognome cercato
e in tal caso comunicare il numero accanto riportatoe in tal caso comunicare il numero accanto riportato
oppure non ci sono più cognomi oppure non ci sono più cognomi
e in tal caso comunicare “non presente”e in tal caso comunicare “non presente”
53 53
Codifica Codifica
Si occupa di realizzare nel miglior modo Si occupa di realizzare nel miglior modo possibile la strategia solutiva
possibile la strategia solutiva
Necessita di una definizione chiara del Necessita di una definizione chiara del comecome si si giunge alla soluzione del problema
giunge alla soluzione del problema
con il linguaggio di programmazione a con il linguaggio di programmazione a
disposizione disposizione
Tipi e costruttori di tipo predefinitiTipi e costruttori di tipo predefiniti
Definizioni di sottoprogrammiDefinizioni di sottoprogrammi
54 54
Qualità di un Programma Qualità di un Programma
CorrettezzaCorrettezza
Aderenza alle Aderenza alle specifiche
specifiche
LeggibilitàLeggibilità
EfficienzaEfficienza
Uso delle risorseUso delle risorse
ModularitàModularità
Grado di Grado di
organizzazione interna organizzazione interna
ModificabilitàModificabilità
ParametricitàParametricità
Grado di generalitàGrado di generalità
PortabilitàPortabilità
Diversi ambienti di Diversi ambienti di calcolo
calcolo
RobustezzaRobustezza
Gestione di situazioni Gestione di situazioni impreviste
impreviste
55 55
Leggibilità Leggibilità
Esempio Esempio
Costruire un programma che crei una Costruire un programma che crei una matrice quadrata diagonale ad elementi matrice quadrata diagonale ad elementi
unitari unitari
11 00 00 00 00 11 00 00 00 00 11 00 00 00 00 11
56 56
Leggibilità Leggibilità
Esempio Esempio
Leggibile:Leggibile:
int i,j;
int i,j;
for (i = 1; i<= n; i++)for (i = 1; i<= n; i++)
forfor (j = 1; j <= n; j++) (j = 1; j <= n; j++) if (i = j) if (i = j)
M[i,j] = 1;
M[i,j] = 1;
elseelse
M[i,j] = 0;
M[i,j] = 0;
Poco chiara:Poco chiara:
int i,j;
int i,j;
for (i = 1; i<= n; i++)for (i = 1; i<= n; i++)
for (j = 1; j <= n; j++)for (j = 1; j <= n; j++) M[i,j] = (i/j)*(j/i);
M[i,j] = (i/j)*(j/i);
Basata sull’assunzione Basata sull’assunzione
non esplicita che non esplicita che n/m = 0
n/m = 0 ssesse n < mn < m
57 57
Codifica Codifica
Input Input : Progetto di soluzione del problema : Progetto di soluzione del problema
Processo Processo : Realizzare la soluzione in un : Realizzare la soluzione in un linguaggio di programmazione
linguaggio di programmazione
Strategia di soluzioneStrategia di soluzione
Strutture di datiStrutture di dati
Output Output : Codice sorgente e corrispondente : Codice sorgente e corrispondente programma compilato
programma compilato
58 58
Codifica Codifica
Il prodotto va in ingresso Il prodotto va in ingresso
All’elaboratore per l’esecuzioneAll’elaboratore per l’esecuzione
Istruzioni dichiarative ed operativeIstruzioni dichiarative ed operative
Poco naturali per gli esseri umaniPoco naturali per gli esseri umani
Ai programmatori per le modificheAi programmatori per le modifiche
Necessità di documentazione che ne aumenti la Necessità di documentazione che ne aumenti la comprensibilità
comprensibilità
Non richiesta dall’elaboratoreNon richiesta dall’elaboratore
Necessità di coerenza con la progettazioneNecessità di coerenza con la progettazione
59 59
Codifica Codifica
Autodocumentazione Autodocumentazione
Convenzioni per gli identificatoriConvenzioni per gli identificatori
Identificatori significativiIdentificatori significativi
Commentare opportunamenteCommentare opportunamente
La funzione delle variabiliLa funzione delle variabili
La funzione svolta dai frammenti di programmaLa funzione svolta dai frammenti di programma
Indentare correttamente e con metodo uniformeIndentare correttamente e con metodo uniforme
Separare visivamente i blocchi di programmaSeparare visivamente i blocchi di programma
Non usare istruzioni di saltoNon usare istruzioni di salto
Non modificare gli indici dei cicli forNon modificare gli indici dei cicli for
60 60
Codifica Codifica
Esempio Errato Esempio Errato
public static public static
void main
void main(String a[]) {(String a[]) { int n, f, i: integer;int n, f, i: integer;
readln(n);
readln(n);
f = 1;
f = 1;
if (n > 0) if (n > 0) thenthen
for (i=1; i<=n; i++)for (i=1; i<=n; i++) f = f * i;
f = f * i;
System.out.print(f);
System.out.print(f);
}}
Identificatori non Identificatori non significativi
significativi
Mancanza di Mancanza di commenti
commenti
Assenza di controlli Assenza di controlli sui valori in ingresso sui valori in ingresso
Valori negativiValori negativi
61 61
Codifica Codifica
Esempio Corretto Esempio Corretto
/* calcola n! mediante algoritmo iterativo */
/* calcola n! mediante algoritmo iterativo */
import
import javax.swing.JOptionPane; javax.swing.JOptionPane;
class
class fattoriale { fattoriale { public static void
public static void main (String a[]) { main (String a[]) { // main// main int n, nfatt = 1;int n, nfatt = 1;
System.out.println(" *** fattoriale ***");
System.out.println(" *** fattoriale ***");
// lettura di n e verifica di non negatività // lettura di n e verifica di non negatività dodo { {
n = Integer.parseInt(JOptionPane.showInputDialog n = Integer.parseInt(JOptionPane.showInputDialog
("Immettere un intero >= 0"));
("Immettere un intero >= 0"));
} while} while (n < 0); (n < 0);
// calcolo di n!
// calcolo di n!
if (n > 0)if (n > 0)
forfor (int i=1; i<=n; i++) (int i=1; i<=n; i++) nfatt = nfatt*i;
nfatt = nfatt*i;
// stampa del fattoriale calcolato n!
// stampa del fattoriale calcolato n!
62 62
Verifica Verifica
È estremamente raro che un programma È estremamente raro che un programma di una certa lunghezza sia scritto senza di una certa lunghezza sia scritto senza
alcun errore alcun errore
Necessità di verifica prima del rilascioNecessità di verifica prima del rilascio
Individuazione degli erroriIndividuazione degli errori
CorrezioneCorrezione
Correttezza di un programmaCorrettezza di un programma
Terminazione e risposta corretta per ingressi Terminazione e risposta corretta per ingressi corretti
corretti
Riconoscimento e segnalazione di ingressi erratiRiconoscimento e segnalazione di ingressi errati