Programmazione strutturata: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m →Collegamenti esterni: Aggiunto il parametro "Nome del soggetto" nel template "FOLDOC" |
|||
(32 versioni intermedie di 25 utenti non mostrate) | |||
Riga 1:
{{F|programmazione|maggio 2014}}
== Origini concettuali ==
Le idee chiave della programmazione strutturata si possono ricondurre alla critica della [[struttura di controllo]] del ''[[GOTO|salto incondizionato]]'' (o ''goto'', "vai a"), che rappresentava, negli [[anni 1960|anni sessanta]], lo strumento fondamentale per la definizione di [[algoritmo|algoritmi]] complessi nel software. In un celebre articolo del [[1968]], [https://web.archive.org/web/20070703050443/http://www.acm.org/classics/oct95/ ''Goto statement considered harmful''], [[Edsger Dijkstra]] discusse approfonditamente gli effetti deleteri del ''goto'' sulla qualità del software, e in particolare sulla sua [[leggibilità (software)|leggibilità]] e [[modificabilità (software)|modificabilità]] (il cosiddetto problema dello ''[[spaghetti code]]'').▼
▲Le idee chiave della programmazione strutturata si possono ricondurre alla critica della [[struttura di controllo]] del ''[[GOTO|salto incondizionato]]'' (o ''goto'', "vai a"), che rappresentava, negli [[anni 1960|anni sessanta]], lo strumento fondamentale per la definizione di [[algoritmo|algoritmi]] complessi nel software. In un celebre articolo del [[1968]], [http://www.acm.org/classics/oct95/ ''Goto statement considered harmful''], [[Edsger Dijkstra]] discusse approfonditamente gli effetti deleteri del ''goto'' sulla qualità del software, e in particolare sulla sua [[leggibilità (software)|leggibilità]] e [[modificabilità (software)|modificabilità]] (il cosiddetto problema dello ''[[spaghetti code]]'').
Un'altra celebre pubblicazione che risultò fondamentale all'affermarsi della programmazione strutturata fu ''Flow Diagrams, Turing Machines, and Languages with Only Two Formation Rules'', in cui [[Corrado Böhm]] e [[Giuseppe Jacopini]] dimostrarono il [[Teorema di Böhm-Jacopini|loro celebre teorema]]. Secondo tale teorema, qualsiasi programma scritto usando il ''goto'' poteva essere riscritto senza, a patto di avere a disposizione altri tre tipi di strutture di controllo: ''sequenza'', ''selezione'' e ''ciclo''. Il risultato di Böhm-Jacopini può anche essere espresso dicendo che, dato un qualunque [[diagramma di flusso]], ne esiste almeno un altro che a parità di input produce sempre gli stessi output del primo e in cui i nodi del diagramma di flusso rispettano un certo insieme di vincoli.
== La strutturazione del controllo ==
{{Vedi anche|Struttura di controllo}}
Le strutture di controllo ammesse dai linguaggi strutturati, e le regole sintattiche e semantiche del loro uso, possono variare nei dettagli specifici; tuttavia, devono essere rispettati un insieme di requisiti fondamentali:
Riga 18 ⟶ 16:
Gli ultimi due vincoli fanno sì che, per quanto concerne il [[flusso del controllo]], ciascuna struttura di controllo definisca un ambito completamente isolato dalle altre, e incapace di interferire o subire interferenze. Questo rappresenta un requisito indispensabile per l'applicazione di metodologie di progetto e sviluppo tradizionalmente legate alla programmazione strutturata, come la [[progettazione top-down]] e lo [[sviluppo per raffinamenti successivi]].
=== Sequenza ===
'''Il''' '''seguente diagramma mostra la struttura''' generale della sequenza. In rosso viene mostrato l'unico punto d'ingresso, in verde l'unico punto d'uscita.
[[File:progr_strutt_sequenza.gif|center|Sequenza di istruzioni]]
=== Selezione ===
Il seguente diagramma mostra due esempi di alternative strutturate (a sinistra un ''if..then..else'', a destra un ''if..then''). In rosso viene mostrato l'unico punto d'ingresso, in verde l'unico punto d'uscita.
[[File:progr_strutt_iterazioni.gif|center|Due tipi di iterazioni strutturate]]
=== Iterazione ===
Riga 27 ⟶ 33:
Il seguente diagramma mostra due esempi di iterazioni strutturate (a sinistra un ''while..do..'', a destra un ''repeat..until..''). In rosso viene mostrato l'unico punto d'ingresso, in verde l'unico punto d'uscita.
[[File:progr_strutt_alternative.gif|center|Due tipi di alternative strutturate]]
=== Nuove rappresentazioni grafiche. ===▼
Finestra
=== Componibilità ===▼
[[File:Structured program patterns.png|thumb|upright=3.2|center|In azzurro i diagrammi scatuli o di Nassi–Shneiderman, inventati per la nuova teoria. In verde vedete i loro equivalenti.]]
▲=== Componibilità ===
Il seguente diagramma mostra un esempio di composizione di due strutture di controllo: una struttura di selezione viene inserita in una iterativa. Si può osservare che l'intera composizione mantiene un unico punto d'ingresso e un unico punto d'uscita.
Riga 35 ⟶ 45:
== I linguaggi di programmazione strutturati ==
I '''linguaggi di programmazione strutturati''' iniziarono a emergere intorno all'inizio degli [[anni 1970|anni settanta]]. Incorporando le [[Teorema di Böhm-Jacopini|idee di Böhm e Jacopini]], essi offrivano un insieme di strutture di controllo completo, ovvero almeno una forma di sequenza, una di alternativa e una di iterazione. In effetti, nella maggior parte dei casi, venivano fornite alcune varianti per ciascuna famiglia di strutture di controllo. Quasi tutti i progettisti di questi linguaggi, comunque, mantennero il ''goto'' come possibile strumento per la strutturazione del controllo (spesso sconsigliandone l'uso).
Riga 44 ⟶ 53:
* [[Pascal (linguaggio)|Pascal]]
* [[ALGOL]]
* [[C (linguaggio)|C
== La programmazione strutturata nella storia della programmazione ==
La programmazione strutturata rappresenta una tappa fondamentale dell'evoluzione della cosiddetta programmazione ''mainstream'', ovvero di quella sequenza di paradigmi che, nel corso degli anni, l'uno succedendo all'altro, hanno dominato il mondo dell'industria del software. In particolare, sia il successivo paradigma della [[programmazione modulare]] che il paradigma della [[programmazione orientata agli oggetti]] hanno mantenuto gli stessi princìpi della programmazione strutturata per quanto concerne la strutturazione del controllo "ordinario" e "sequenziale", introducendo nuovi meccanismi solo per affrontare le tematiche (nate successivamente) della [[gestione delle eccezioni]] e dello sviluppo di [[programmazione concorrente|programmi concorrenti]].
Riga 55 ⟶ 63:
* [[Paradigma di programmazione]]
* [[Diagramma di flusso]]
* [[Scope rules]]
* [[Blocco (programmazione)]]▼
* [[Programmazione procedurale]]
* [[Teorema di Böhm-Jacopini]]
== Altri progetti ==
{{interprogetto|preposizione=sulla}}
== Collegamenti esterni ==
* {{FOLDOC|structured programming|structured programming}}
* [https://web.archive.org/web/20070703050443/http://www.acm.org/classics/oct95/ ''Go To Statement Considered Harmful''] l'articolo originale di [[Edsger Dijkstra]]
* {{cita web|url=
* {{cita web|http://algobuild.com/|Algobuild: Editor gratuito di flow chart e pseudo codice strutturati (EN - IT)}}
{{Controllo di autorità}}
{{Portale|informatica}}
[[Categoria:Paradigmi di programmazione|Strutturata]]
|