Paradigma di programmazione

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire

In informatica, un paradigma di programmazione è uno stile fondamentale di programmazione, ovvero un insieme di strumenti concettuali forniti da un linguaggio di programmazione per la stesura di programmi, e definisce/determina il modo in cui il programmatore concepisce e percepisce il programma. Un programma object-oriented, per esempio, è costituito da oggetti che interagiscono fra loro, mentre nella programmazione funzionale il programma è una composizione di funzioni.

Ogni linguaggio di programmazione è generalmente ispirato (e riconducibile) a un particolare paradigma di programmazione; per esempio, il Pascal e il C sono basati sul paradigma della programmazione strutturata, Lisp su quello della programmazione funzionale, Prolog su quello della programmazione logica e così via. Alcuni linguaggi di programmazione sono influenzati da molteplici paradigmi; un esempio macroscopico è Ada, che fu esplicitamente progettato come summa di concetti provenienti dalla programmazione strutturata, dalla programmazione modulare, dalla programmazione generica, dalla Programmazione concorrente, e dalla programmazione per tipi di dati astratti.

La storia dei paradigmi di programmazione si presta a essere rappresentata con un albero genealogico; in molti casi, infatti, un nuovo paradigma nasce come evoluzione di un altro, aggiungendo nuovi concetti ma mantenendo anche quelli fondamentali del precedente (ponendoli eventualmente in una prospettiva nuova o modificandone l'importanza relativa). Talvolta questo "salto evolutivo" consiste nel rendere obbligatoria e/o supportare esplicitamente quella che nei paradigmi precedenti si era affermata come regola di buona programmazione. Per esempio, la programmazione strutturata ha introdotto strutture di controllo standard (sequenze, cicli e alternative) e ha vietato l'uso dell'istruzione di goto, della quale si era dimostrata la non indispensabilità (teorema di Böhm-Jacopini). Quando questo avvenne, i rischi legati all'uso indiscriminato dell'istruzione di salto incondizionato goto erano già noti a molti programmatori, ed erano diffuse regole di stile che suggerivano di restringere l'uso del goto in modi che si potessero far sostanzialmente corrispondere alle strutture di controllo della programmazione strutturata.

Sulla base della considerazione precedente, si può anche osservare che non è strettamente necessario, per programmare secondo un certo paradigma, avere a disposizione un linguaggio di programmazione ispirato a quel paradigma; per esempio, è possibile (anche se non semplicissimo) programmare a oggetti in linguaggio C. I meccanismi di astrazione dei linguaggi di programmazione (differenti per i vari paradigmi!) possono contribuire a rendere possibile stili di programmazione basati su concetti non direttamente forniti dal linguaggio utilizzato.

Per quanto riguarda almeno i linguaggi di programmazione usati nella pratica industriale dello sviluppo del software, si può identificare un "filone principale" di paradigmi di programmazione:

Esempi

programmazione modulare
(metà anni Settanta) Modula, Linguaggio CLU
programmazione orientata agli aspetti
Una estensione dell'OOP (anni 2000) AspectJ
programmazione orientata agli utenti
Inside Microsoft Windows NT Internet Development (1998 Microsoft Press), piattaforma .NET
programmazione orientata agli oggetti
(anni Ottanta) Smalltalk, Eiffel, Java, Python, Ruby
programmazione per pattern
Java blueprints, Sun Java blueprints
programmazione per pattern matching
(Regular Expression)
programmazione procedurale
(anni Sessanta) Fortran
programmazione strutturata
(primi anni Settanta) Pascal, C
programmazione per tipi di dati astratti
(tardi anni Settanta) OBJ

Altri paradigmi sono nati per applicazioni specifiche:

programmazione concorrente
Inizialmente per il calcolo su architetture parallele (anni Settanta) Erlang, Communicating Sequential Processes (CSP), Occam
programmazione logica
Per applicazioni euristiche, intelligenza artificiale, ecc.; (anni Settanta) Prolog
programmazione funzionale
Per applicazioni matematiche e scientifiche ecc.; (anni Settanta) Lisp, Haskell
programmazione orientata agli eventi
Per applicazioni real-time e interfacce grafiche
Programmazione a vincoli

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net