prof. Nunzio Brugaletta Programmazione e linguaggio C

EnneBi - Programmazione
Avanti Indietro Inizio


4.2 Un esempio di sviluppo top-down

Come esempio si applicherà il procedimento descritto alla risoluzione del seguente problema:

In una località geografica sono state rilevate ogni 2 ore le temperature di una giornata. Si vuole conoscere la temperatura media, l’escursione termica e lo scostamento medio dalla media.

Si tratta di scrivere un programma che richiede alcune elaborazioni statistiche su una serie di valori. Si ricorda che la media aritmetica di una serie n di valori è data dal rapporto fra la somma dei valori della serie e il numero n stesso. L’escursione termica è in pratica il campo di variazione cioè la differenza fra il valore massimo e il valore minimo della serie di valori. Lo scostamento medio è la media dei valori assoluti degli scostamenti dalla media aritmetica, dove lo scostamento è la differenza fra il valore considerato della serie e la media aritmetica.

La prima stesura del programma potrebbe essere la seguente:

Inizio
  Acquisizione temperature rilevate
  Calcolo media e ricerca massimo e minimo
  Calcolo escursione termica
  Calcolo scostamento medio
  Comunicazione risultati
Fine

In questa prima approssimazione si sono evidenziati i risultati intermedi da conseguire affinché il problema possa essere risolto. Non si parla di istruzioni eseguibili ma di stati di avanzamento del processo di elaborazione: per il momento non c’è niente di preciso ma il problema proposto è stato ricondotto a 5 problemi ognuno dei quali si occupa di una determinata elaborazione. Viene messa in evidenza la sequenza delle operazioni da effettuare: l’escursione termica si può, per esempio, calcolare solo dopo la ricerca del massimo e del minimo.

Si noti che ad ogni fase di lavoro è assegnato un compito specifico ed è quindi più facile la ricerca di un eventuale sottoprogramma errato: se lo scostamento medio è errato e la media risulta corretta è chiaro che, con molta probabilità, l’errore è localizzato nel penultimo sottoprogramma.

Il primo sottoprogramma possiamo già tradurlo in istruzioni eseguibili. È opportuno tenere presente che a questo livello il problema da risolvere riguarda solamente l’acquisizione delle temperature rilevate. Il resto del programma, a questo livello, non esiste.

Acquisizione temperature
Inizio
  Per indice da 0 a 11
    Ricevi temperatura rilevata
  Fine-per
Fine

Passando al dettaglio del secondo sottoprogramma lo si può pensare composto da una fase di inizializzazione dell’accumulatore della somma dei termini della serie e delle variabili che conterranno il massimo ed il minimo della serie stessa. La seconda fase è il calcolo vero e proprio. Anche qui il problema è limitato solo alla parte specificata.

Calcolo media e ricerca massimo e minimo
Inizio
  Inizializza Somma Valori
  Considera primo elemento serie come Massimo e Minimo
  Aggiorna Somma e cerca Massimo e Minimo
  Calcola Media
Fine
    
Aggiorna Somma e cerca Massimo, Minimo
Inizio
  Per indice da 1 a 11
    Aggiorna Somma con elemento considerato
    Se elemento<Minimo
      Sostituisci elemento a Minimo
    Altrimenti
      Se elemento>Massimo
        Sostituisci elemento a Massimo
      Fine-se
    Fine-se
  Fine-per
Fine

Il terzo sottoprogramma è immediato:

Calcolo escursione termica
Inizio
  Escursione = Massimo – Minimo
Fine

Il quarto sottoprogramma, come il secondo, prevede una inizializzazione:

Calcolo scostamento medio
Inizio
  Azzera Somma scostamenti
  Aggiorna Somma
  Calcola Media scostamenti
Fine
    
Aggiorna Somma scostamenti
Inizio
  Per indice da 0 a 11
    Se elemento>Media aritmetica
      Scostamento = elemento-Media
    Altrimenti
      Scostamento = Media-elemento
    Fine-se
    Aggiorna Somma scostamenti con scostamento
  Fine-per
Fine

L’ultimo sottoprogramma è immediato:

Comunicazione risultati
Inizio
  Comunica Media
  Comunica Escursione termica
  Comunica Scostamento medio
Fine

Il programma a questo punto è interamente svolto. Ogni sottoprogramma ha riguardato un solo aspetto dell’elaborazione: ciò rende la stesura del programma più semplice ed inoltre la manutenzione del programma stesso diventa più semplice. Ogni sottoprogramma diventa più semplice da controllare rispetto al programma nel suo complesso.

Il programma è stato diviso praticamente in 7 parti. Ognuna può essere trattata, in sede di codifica, come un sottoprogramma a parte come anche si può decidere di lasciare ai sottoprogrammi, vedi seconda e quarta fase, il compito dell’elaborazione e lasciare le inizializzazioni nel programma principale (il primo che si è scritto, quello cioè dove è evidenziata tutta l’elaborazione da svolgere). Si può anche decidere, sempre nella seconda e quarta fase per esempio, di considerare le inizializzazioni parte integrante della elaborazioni stessa e quindi rispettare la prima suddivisione di massima del programma, saltando la seconda suddivisione.

Il processo di scomposizione successiva non è fissato in maniera univoca: dipende fortemente dalla soggettività del programmatore. Non ci sono regole sulla quantità di pezzi in cui scomporre il programma. Ci sono delle indicazioni di massima che suggeriscono di limitare il singolo segmento in maniera sufficiente a che il codice non superi di molto la pagina in modo da coprire, con lo sguardo, l'intero o quasi programma e limitare il singolo segmento a poche azioni di modo che sia più semplice isolare eventuali errori. Inoltre il sottoprogramma deve essere quanto più possibile isolato dal contesto in cui opera, cioè il sottoprogramma deve avere al suo interno tutto ciò di cui ha bisogno e non fare riferimento a dati particolari presenti nel programma principale. Ciò porta ad alcuni indubbi vantaggi:

L’utilizzo di sottoprogrammi già pronti per la costruzione di un nuovo programma porta ad una metodologia di sviluppo dei programmi che viene comunemente chiamata bottom-up poiché rappresenta un modo di procedere opposto a quello descritto fino ad ora. Si parte da sottoprogrammi già esistenti che vengono assemblati assieme a nuovi per costruire la nuova elaborazione. In definitiva "… si può affermare che, nella costruzione di un nuovo algoritmo, è dominante il processo top-down, mentre nell’adattamento (a scopi diversi) di un programma già scritto, assume una maggiore importanza il metodo bottom-up." (N.Wirth)



Avanti Indietro Inizio

http://ennebi.solira.org ennebi@solira.org