• Non ci sono risultati.

Progettazione di Progettazione di Programmi Programmi

N/A
N/A
Protected

Academic year: 2021

Condividi "Progettazione di Progettazione di Programmi Programmi"

Copied!
102
0
0

Testo completo

(1)

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 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 3

Ciclo di Progettazione Ciclo di Progettazione

Analisi Analisi

Progetto Progetto

Codifica Codifica

(4)

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

Riferimenti

Documenti correlati

I: il valore di ciascun elemento dello array di numeri interi Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array.. U: lo array

codice strumento prezzo FLT flauto 2500 VLN violino 8000. $inv_art

– PUÒ raffinare e definire meglio, eventualmente ricorrendo a delle ipotesi semplificative, quanto non esplicitamente presente nella traccia del problema come fornita dal

Per rendere nucleofilo lo ione fluoruro e per poterlo avere in soluzione con il reattivo A, si deve usare il reattivo X, questo è un etere corona che sequestra lo ione potassio

La forza di questo metodo si basa sul fatto che gli elementi piu’ distanti vengono spostati prima.In questo modo insert sort deve ordinare solo elementi gi` a in buona parte in

Dato un array e un elemento t voglio dividere l’array in modo che tutti gli elementi minori di t vengano prima di quelli maggiori o uguali di

Un albero binario ` e una struttura di dati in cui c’` e un nodo radice ed ogni nodo ` e collegato a due nodi figli; i nodi in fondo alla gerarchia sono chiamati foglie. Uno heap

– Soluzione: si passa alla funzione un ulteriore parametro di tipo array, che viene “riempito” con il risultato.. E i parametri di