Progettazione top-down e bottom-up

Da Wikipedia, l'enciclopedia libera.

I modelli top-down e bottom-up (ing. dall'alto verso il basso e dal basso verso l'alto, rispettivamente) sono strategie di elaborazione dell'informazione e di gestione delle conoscenze, riguardanti principalmente il software e, per estensione, altre teorie umanistiche e teorie dei sistemi. In linea generale, esse sono metodologie adoperate per analizzare situazioni problematiche e costruire ipotesi adeguate alla loro soluzione: il concetto di situazione problematica è riconducibile agli ambiti più vari, come ad esempio l'elaborazione di un programma informatico, la risoluzione di un problema geometrico o matematico, l'elaborazione di un testo, la risoluzione di un problema pratico/operativo.

Nel modello top-down si formula una visione generale del sistema, senza scendere nel dettaglio delle sue parti. Ogni parte del sistema è successivamente rifinita (decomposizione, specializzazione e specificazione o identificazione)[1] aggiungendo maggiori dettagli della progettazione. Ogni nuova parte così ottenuta può quindi essere nuovamente rifinita, specificando ulteriori dettagli, finché la specifica completa è sufficientemente dettagliata da validare il modello. Il modello top-down è spesso progettato con l'ausilio di scatole nere che semplificano il riempimento ma non consentono di capirne il meccanismo elementare.

In contrasto con il modello top-down c'è la progettazione bottom-up, nella quale parti individuali del sistema sono specificate in dettaglio, e poi connesse tra loro in modo da formare componenti più grandi, a loro volta interconnesse fino a realizzare un sistema completo. Le strategie basate sul flusso informativo bottom-up sembrano potenzialmente necessarie e sufficienti, poiché basate sulla conoscenza di tutte le variabili in grado di condizionare gli elementi del sistema.

Top down[modifica | modifica sorgente]

La programmazione top-down è uno stile di programmazione in cui la progettazione inizia specificando parti complesse e suddividendole successivamente in parti più piccole (divide et impera). Eventualmente, i componenti sono specificati quanto basta per la codifica ed il programma viene anche scritto. Questo è l'esatto opposto della programmazione bottom-up.

Il nome top down significa dall'alto verso il basso: in "alto" viene posto il problema e in "basso" i sottoproblemi che lo compongono. Il nome ricorda anche una raffigurazione a piramide: l'obiettivo finale è la cima della piramide, e i sottoproblemi che lo compongono formano la base.

Il top down parte dall'obiettivo e da esso fa scaturire la strategia direttamente adatta a determinare l'obiettivo stesso, quindi valorizza il perché e da esso fa dipendere il come, ovvero la strategia; individua, quindi, le risorse necessarie, precisa quelle disponibili e identifica quelle mancanti, propone successivamente ogni risorsa mancante come sub-obiettivo ovvero come sotto-problema in cui ciascun sub-obiettivo richiede una sub-strategia ad esso correlata.

Bottom up[modifica | modifica sorgente]

Il bottom up richiama invece un'immagine raffigurante una freccia in cui la coda è il bottom (la parte bassa) mentre up è la punta: dal punto di vista dinamico si parte dal bottom e si procede verso up.

Il bottom up prende corpo dal punto di partenza (bottom) ovvero dalla situazione iniziale; considera l'obiettivo finale, induce a costruire un percorso sequenziale organizzato in passaggi successivi in cui l'ancoraggio tra traguardi intermedi e obiettivo finale è generalmente ricercato in modo intuitivo (euristico).

Informatica[modifica | modifica sorgente]

Alcune parti di questo capitolo sono tratte dal libro Perl Design Patterns Book.

Nel processo di sviluppo software, gli approcci top-down e bottom-up giocano un ruolo fondamentale. L'approccio top-down enfatizza la pianificazione ed una completa comprensione del sistema. È ovvio che nessuna codifica può iniziare finché non si è raggiunto almeno un sufficiente livello di dettaglio nella progettazione di una parte significante del sistema. Questo, comunque, ritarda la fase di test delle ultime unità funzionali di un sistema finché una parte significativa della progettazione non è stata completata. L'approccio bottom-up enfatizza la codifica e la fase di test precoce, che può iniziare appena il primo modulo è stato specificato. Questo approccio, comunque, induce il rischio che i moduli possano essere codificati senza avere una chiara idea di come dovranno essere connessi ad altre parti del sistema, e quel tipo di link potrebbe non essere facile. La riusabilità del codice è uno dei principali benefici dell'approccio bottom-up. La progettazione top-down è stata sostenuta negli anni settanta dai ricercatori IBM Harlan Mills e Niklaus Wirth. Mills sviluppò i concetti della programmazione strutturata per uso pratico e li testò in un progetto del 1969 per automatizzare l'archivio del New York Times. Il successo ingegneristico e gestionale di questo progetto condusse alla crescita dell'approccio top-down tramite IBM ed il resto dell'industria informatica. Niklaus Wirth, che tra altre imprese sviluppò il linguaggio di programmazione Pascal, scrisse l'autorevole documento Lo sviluppo del software per raffinamenti successivi. I metodi top-down erano i preferiti nell'ingegneria del software negli anni ottanta. I moderni approcci alla progettazione software tipicamente combinano sia la tecnica top-down che quella bottom-up. Sebbene la comprensione del sistema completo è tipicamente considerata necessaria per una buona progettazione che conduce teoricamente ad un approccio top-down, la maggior parte dei progetti software cercano di fare uso di codice già esistente ad alcuni livelli. I moduli pre-esistenti danno alla progettazione una tendenza bottom-up. Alcuni approcci di progettazione operano progettando un sistema parzialmente funzionale che viene completamente codificato, poi questo sistema viene quindi espanso fino a soddisfare tutti i requisiti di progetto.

Programmazione[modifica | modifica sorgente]

La tecnica per la scrittura di un programma mediante l'utilizzo dei metodi top-down indica di scrivere una procedura principale che indica dei nomi per le principali funzioni di cui avrà bisogno. In seguito, il gruppo di programmazione esaminerà i requisiti di ognuna di queste funzioni ed il processo verrà ripetuto. Queste sotto-procedure a comparto eseguiranno eventualmente azioni così semplici che porteranno ad una codifica semplice e concisa. Quando tutte le varie sotto-procedure sono state codificate, il programma è realizzato.

Vantaggi[modifica | modifica sorgente]

  • Il gruppo di programmazione resta focalizzato sull'obiettivo.
  • Ognuno conosce il proprio compito.
  • Nel momento in cui parte la programmazione, non vi sono più domande.
  • Il codice è semplice da seguire, dato che è scritto in maniera metodica e con uno scopo preciso.

Svantaggi[modifica | modifica sorgente]

  • La programmazione top-down può complicare la fase di test, dato che non esisterà un eseguibile finché non si arriverà quasi alla fine del progetto.
  • La programmazione bottom-up agevola il test di unità, ma finché il sistema non si unisce non può essere testato nella sua interezza, e ciò causa spesso complicazioni verso la fine del progetto "Individualmente ci siamo, insieme falliamo."
  • Tutte le decisioni dipendono dall'avvio del progetto ed alcune decisioni non possono essere fatte sulla base del dettaglio delle specifiche.

Neuroscienza e psicologia[modifica | modifica sorgente]

Questo lessico è anche utilizzato nella neuroscienza e nella psicologia. Lo studio dell'attenzione visiva ne è un esempio. Se la tua attenzione è rivolta ad un fiore in un campo, può semplicemente essere che il fiore sia visivamente più rilevante rispetto al resto del campo. L'informazione che ti ha portato ad osservare il fiore ti è giunta in modo bottom-up. La tua attenzione non è stata condizionata dalla conoscenza del fiore; gli stimoli esterni erano già propriamente sufficienti. Confronta questa situazione con una in cui tu stai cercando un fiore. Hai una rappresentazione di cosa cerchi. Quando vedi l'oggetto che cerchi, questo è saliente. Questo è un esempio dell'uso dell'informazione in modo top-down.

Note[modifica | modifica sorgente]

  1. ^ Adam Maria Gadomski,Top-down Object-based Goal-oriented Approach (TOGA meta-theory), 1994, Sito specialistico ENEA.