See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Programmazione strutturata - Wikipedia

Programmazione strutturata

Da Wikipedia, l'enciclopedia libera.

La programmazione strutturata è un paradigma di programmazione emerso fra gli anni '60 e gli anni '70 nel contesto della programmazione procedurale. I concetti introdotti dalla programmazione strutturata sono alla base di numerosi altri paradigmi procedurali successivi, non ultimo quello object-oriented.

Indice

[modifica] Origini concettuali

Le idee chiave della programmazione strutturata si possono ricondurre alla critica della struttura di controllo del salto incondizionato (o goto, "vai a"), che rappresentava, negli anni '60, lo strumento fondamentale per la definizione di algoritmi complessi nel software. In un celebre articolo del 1968, Goto statement considered harmful, Edsger Dijkstra discusse approfonditamente gli effetti deleteri del goto sulla qualità del software, e in particolare sulla sua leggibilità e 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 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, ripetizione e alternativa. Il risultato di Boehm 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.

[modifica] La strutturazione del controllo

Per approfondire, vedi la voce 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:

  • completezza. Un linguaggio strutturato deve fornire la sequenza, almeno una struttura di tipo alternativa, e almeno una struttura di tipo iterazione;
  • singolo punto di ingresso e di uscita. Idealmente, ogni struttura di controllo, completa delle istruzioni controllate, deve poter essere considerata come una singola macro-istruzione dal punto di vista del controllo complessivo, con un ben identificato punto di ingresso e un ben identificato punto di uscita.
  • componibilità. Ogni struttura di controllo può avere fra le sue istruzioni controllate, ricorsivamente, altre strutture di controllo (senza limiti).

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.

[modifica] 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.

Sequenza di istruzioni

[modifica] Alternative

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.

Due tipi di alternative strutturate

[modifica] Ripetizione

Il seguente diagramma mostra due esempi di iterazioni strutturate (a sinistra un while..do, a destra un do..while). In rosso viene mostrato l'unico punto d'ingresso, in verde l'unico punto d'uscita.

Due tipi di iterazioni strutturate

[modifica] Componibilità

Il seguente diagramma mostra un esempio di composizione di due strutture di controllo; viene iterativamente ripetuta una alternativa. Si può osservare che l'intera composizione mantiene un unico punto d'ingresso e un unico punto d'uscita.

Iterazione di alternative

[modifica] I linguaggi di programmazione strutturati

I linguaggi di programmazione strutturati iniziarono a emergere intorno all'inizio degli anni '70. Incorporando le 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).

Nella maggior parte dei casi, questi linguaggi introducevano una nozione di blocco, su cui spesso erano basate caratteristiche correlate del linguaggio, come le scope rules per gli identificatori (per esempio le variabili).

Fra i linguaggi tipici del paradigma strutturato si possono citare:

[modifica] 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 programmi concorrenti.

[modifica] Voci correlate

[modifica] Collegamenti esterni


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -