Paradigma di programmazione: differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
I paradigmi di programmazione non sono propriamente "strumenti per la stesura del codice sorgente", come pure non sono i linguaggi di programmazione ad offrirli, ma al massimo implementarli.
m →‎Tipi di paradigmi: Sistemato la formattazione dei paradigmi
Riga 19: Riga 19:
Per quanto riguarda almeno i linguaggi di programmazione usati nella pratica industriale dello [[Ciclo di vita del software|sviluppo del software]], si può identificare un "filone principale" di paradigmi di programmazione:
Per quanto riguarda almeno i linguaggi di programmazione usati nella pratica industriale dello [[Ciclo di vita del software|sviluppo del software]], si può identificare un "filone principale" di paradigmi di programmazione:


;[[programmazione modulare]]: (metà [[anni 1970|anni settanta]]) [[Modula]], [[CLU (linguaggio)]]
[[programmazione modulare]]: (metà [[anni 1970|anni settanta]]) [[Modula]], [[CLU (linguaggio)]]
;[[programmazione orientata agli aspetti]]: Una estensione dell'OOP ([[anni 2000]]) [[AspectJ]]
[[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 utenti]]: Inside [[Microsoft Windows NT]] Internet Development (1998 Microsoft Press), piattaforma [[.NET]]
;[[programmazione orientata agli oggetti]]: ([[anni 1980|anni ottanta]]) [[Smalltalk]], [[Eiffel (linguaggio)|Eiffel]], [[C++]], [[Java (linguaggio di programmazione)|Java]], [[Python]], [[Ruby (linguaggio di programmazione)|Ruby]], piattaforma [[.NET]]
[[programmazione orientata agli oggetti]]: ([[anni 1980|anni ottanta]]) [[Smalltalk]], [[Eiffel (linguaggio)|Eiffel]], [[C++]], [[Java (linguaggio di programmazione)|Java]], [[Python]], [[Ruby (linguaggio di programmazione)|Ruby]], piattaforma [[.NET]]
;[[design pattern|programmazione strutturata secondo patterns]]: [[Java blueprints]], [[Sun Java blueprints]]
[[design pattern|programmazione strutturata secondo patterns]]: [[Java blueprints]], [[Sun Java blueprints]]
;[[programmazione orientata al pattern matching|programmazione per pattern matching]]: ([[Espressioni regolari]])
[[programmazione orientata al pattern matching|programmazione per pattern matching]]: ([[Espressioni regolari]])
;[[programmazione procedurale]]:([[anni 1960|anni sessanta]]) [[Fortran]], [[COBOL]], [[F Sharp|F#]]
[[programmazione procedurale]]:([[anni 1960|anni sessanta]]) [[Fortran]], [[COBOL]], [[F Sharp|F#]]
;[[programmazione strutturata]]: (primi [[anni 1970|anni settanta]]) [[Pascal (linguaggio)|Pascal]], [[C (linguaggio)|C]]
[[programmazione strutturata]]: (primi [[anni 1970|anni settanta]]) [[Pascal (linguaggio)|Pascal]], [[C (linguaggio)|C]]
;[[tipo di dato astratto|programmazione per tipi di dati astratti]]: (tardi [[anni 1970|anni settanta]]) [[OBJ]]
[[tipo di dato astratto|programmazione per tipi di dati astratti]]: (tardi [[anni 1970|anni settanta]]) [[OBJ]]


Altri paradigmi sono nati per applicazioni specifiche:
Altri paradigmi sono nati per applicazioni specifiche:


;[[programmazione concorrente]]:Inizialmente per il calcolo su architetture parallele ([[anni 1970|anni settanta]]) [[Erlang (linguaggio)|Erlang]], [[Communicating Sequential Processes]] (CSP), [[Linguaggio di programmazione Occam|Occam]], Go
[[programmazione concorrente]]:Inizialmente per il calcolo su architetture parallele ([[anni 1970|anni settanta]]) [[Erlang (linguaggio)|Erlang]], [[Communicating Sequential Processes]] (CSP), [[Linguaggio di programmazione Occam|Occam]], Go
;[[programmazione logica]]: Per applicazioni [[euristica|euristiche]], [[intelligenza artificiale]], ecc.; ([[anni 1970|anni settanta]]) [[Prolog]]
[[programmazione logica]]: Per applicazioni [[euristica|euristiche]], [[intelligenza artificiale]], ecc.; ([[anni 1970|anni settanta]]) [[Prolog]]
;[[programmazione funzionale]]: Per applicazioni matematiche e scientifiche ecc.; ([[anni 1970|anni settanta]]) [[Lisp]], [[Haskell (linguaggio)|Haskell]]
[[programmazione funzionale]]: Per applicazioni matematiche e scientifiche ecc.; ([[anni 1970|anni settanta]]) [[Lisp]], [[Haskell (linguaggio)|Haskell]]
;[[programmazione ad eventi|programmazione orientata agli eventi]]: Per applicazioni real-time e interfacce grafiche
[[programmazione ad eventi|programmazione orientata agli eventi]]: Per applicazioni real-time e interfacce grafiche
;[[programmazione a vincoli]]
[[programmazione a vincoli]]


== Voci correlate ==
== Voci correlate ==

Versione delle 22:05, 12 mag 2024

Voce principale: Paradigma.

In informatica, un paradigma di programmazione è un insieme di strumenti concettuali per la modellazione di algoritmi, determinando quindi il modo in cui il programmatore progetta, implementa e interpreta i programmi corrispondenti.

Diversi paradigmi si differenziano per i concetti e le astrazioni usate per rappresentare gli elementi di un programma (come ad esempio le funzioni, gli oggetti, le variabili, vincoli, ecc.) e per i procedimenti usati per l'esecuzione delle procedure di elaborazione dei dati (assegnazione, calcolo, iterazione, data flow, ecc.).

Descrizione

Ogni linguaggio di programmazione è generalmente ispirato — e riconducibile — ad un particolare paradigma di programmazione; un programma object-oriented, ad esempio, è costituito da oggetti che interagiscono fra loro, mentre nella programmazione funzionale il programma è una composizione di funzioni; per quanto riguarda i linguaggi, ad esempio, Pascal e 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 invece sono influenzati da molteplici paradigmi; due esempi macroscopici sono 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, e C++, che unisce parti di programmazione procedurale, funzionale e ad oggetti.

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 e mantenendo quelli fondamentali del precedente (ponendoli eventualmente in una prospettiva nuova o modificandone l'importanza relativa). A volte questo "salto evolutivo" consiste nel rendere obbligatorio e/o supportare esplicitamente un modo di procedere che nei paradigmi precedenti si era affermato solamente come regola di buona programmazione. Per esempio, la programmazione strutturata ha introdotto strutture di controllo standard (sequenze, selezioni e cicli) e ha di fatto reso non raccomandabile l'uso dell'istruzione di salto incondizionato goto, della quale si era dimostrata la non indispensabilità con il teorema di Böhm-Jacopini. Quando questo avvenne, i rischi legati all'uso indiscriminato del goto erano già noti a molti programmatori ed erano diffuse regole di stile che suggerivano di restringere l'uso del goto a casi 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 direttamente ispirato a quello stesso paradigma; ad esempio, è possibile, anche se non facilissimo, 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.

Tipi di paradigmi

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:

programmazione modulare: (metà anni settanta) Modula, CLU (linguaggio) 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, C++, Java, Python, Ruby, piattaforma .NET programmazione strutturata secondo patterns: Java blueprints, Sun Java blueprints programmazione per pattern matching: (Espressioni regolari) programmazione procedurale:(anni sessanta) Fortran, COBOL, F# 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, Go 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

Voci correlate

Altri progetti

Collegamenti esterni

Controllo di autoritàGND (DE4308224-5
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica