C++ – Un esempio di sviluppo top-down

Scritto da Gianjey | 17 ottobre, 2010 15:24

cplusplus

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.

Innanzi tutto si può osservare che, qualunque sia il problema da risolvere, il processo di sviluppo di un programma avanza attraversando tre stadi: input dati da elaborare, elaborazione, output dei risultati ottenuti. Nell’esempio proposto possono essere tradotti in:

Inizio
 Acquisizione temperature rilevate
 Elaborazioni sulle temperature
 Comunicazione risultati
Fine

Se, poi, si tiene conto delle elaborazioni da compiere e si specificano meglio le richieste, si avrà:

Elaborazioni sulle temperature
Inizio
  Calcolo media e ricerca massimo e minimo
  Calcolo escursione termica
  Calcolo scostamento medio
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 processo di risoluzione del problema, è stato ricondotto a fasi elementari ognuna delle quali si occupa di una determinata elaborazione. Viene evidenziata 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 sottoprogramma che si occupa di tale calcolo.

Il primo sottoprogramma si può già tradurre 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 e conserva temperatura rilevata
  Fine-per
Fine

Passando al dettaglio della prima elaborazione richiesta, la si può pensare composta 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.

Calcolo media e ricerca massimo e minimo
Inizio
  Inizializza Somma Valori
  Considera primo elemento serie come Massimo e Minimo
  Per indice da 1 a 11
    Aggiorna Somma con elemento considerato
    calcola minimo fra minimo ed elemento
    calcola massimo fra massimo ed elemento
  Fine-per
Fine

La seconda fase dell’elaborazione da svolgere è immediata:

Calcolo escursione termica
Inizio
  Escursione = Massimo – Minimo
Fine

Il dettaglio del calcolo successivo potrebbe essere:

Calcolo scostamento medio
Inizio
  Azzera Somma scostamenti
  Per indice da 0 a 11
    Aggiorna Somma scostamenti con scostamento in valore assoluto
  Fine-per
  scostamento medio=Somma scostamenti/12
Fine

La stesura del sottoprogramma, che si occupa dell’output dei risultati ottenuti, è immediata:

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

Il programma a questo punto è interamente svolto. Per ogni sottoprogramma ci si è occupati di un solo aspetto dell’elaborazione: ciò rende la stesura del programma, e la sua manutenzione, più semplici. Ogni sottoprogramma diventa più agevole da controllare rispetto al programma nel suo complesso.

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:

  • Il sottoprogramma è facilmente esportabile. Se dalla scomposizione di altri programmi si vede che si ha necessità di utilizzare elaborazioni uguali si può riutilizzare il sottoprogramma. È evidente che affinché ciò sia possibile è necessario che il sottoprogramma non faccia riferimento a contesti che in questo caso potrebbero essere diversi. Se, inoltre, il sottoprogramma effettua una sola operazione si potrà avere più opportunità di inserirlo in nuove elaborazioni.
  • La manutenzione del programma è semplificata dal fatto che, facendo il sottoprogramma una sola elaborazione e, avendo al suo interno tutto ciò che serve, se c’è un errore nella elaborazione questo è completamente isolato nel sottoprogramma stesso e, quindi, più facilmente rintracciabile.
  • Qualora si avesse necessità di modificare una parte del programma, ciò può avvenire facilmente: basta sostituire solamente il sottoprogramma che esegue l’elaborazione da modificare. Il resto del programma non viene interessato dalla modifica effettuata.

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

 Indice corso: C++ Appunti di Programmazione Fonte: prof. Nunzio Brugaletta 

Lascia un Commento