Glossario Paradigmi di programmazione
I modi di pensare il codice: programmazione a oggetti, funzionale e procedurale. I paradigmi spiegati in modo accessibile.
-
P
-
Programmazione a attori
Modello di concorrenza in cui unità indipendenti dette attori comunicano solo scambiandosi messaggi, senza memoria condivisa. Semplifica la costruzione di sistemi concorrenti e distribuiti riducendo i problemi di sincronizzazione. -
Programmazione a componenti
Paradigma che costruisce il software assemblando componenti riutilizzabili e sostituibili, con interfacce ben definite. Favorisce modularità e riuso, permettendo di comporre sistemi da parti indipendenti. -
Programmazione a eventi
Paradigma in cui il flusso del programma è guidato da eventi, come input dell'utente o messaggi, a cui rispondono apposite funzioni. È tipico delle interfacce grafiche e delle applicazioni interattive. -
Programmazione a flusso di dati
Paradigma in cui il programma è modellato come una rete attraverso cui scorrono i dati, e le operazioni si attivano quando i loro ingressi sono disponibili. Rende naturale esprimere elaborazioni parallele e pipeline. -
Programmazione a vincoli
Paradigma in cui si dichiarano le relazioni e i vincoli che la soluzione deve soddisfare, lasciando a un risolutore il compito di trovarla. È usato per problemi di pianificazione, scheduling e ottimizzazione. -
Programmazione array-oriented
Approccio che tratta interi array come unità di calcolo, applicando operazioni all'intera struttura invece che elemento per elemento. È tipico di linguaggi per il calcolo numerico e l'analisi dei dati. -
Programmazione asincrona
Modello in cui le operazioni lunghe non bloccano il flusso, che prosegue e riceve il risultato quando è pronto. Migliora reattività ed efficienza, al prezzo di una gestione più complessa del controllo. -
Programmazione basata su classi
Modello della programmazione a oggetti in cui gli oggetti sono istanze di classi che ne definiscono struttura e comportamento. È l'approccio più diffuso, adottato da linguaggi come Java, C++ e Python. -
Programmazione basata su prototipi
Variante della programmazione a oggetti in cui gli oggetti ereditano direttamente da altri oggetti, senza classi. È il modello alla base di JavaScript, dove il comportamento si condivide clonando ed estendendo prototipi. -
Programmazione dichiarativa
Paradigma in cui si specifica cosa si vuole ottenere piuttosto che come calcolarlo, lasciando al sistema il compito di determinare la procedura. Linguaggi di query e descrizioni di interfacce ne sono esempi, favorendo concisione e riduzione degli errori procedurali. -
Programmazione funzionale reattiva (FRP)
Paradigma che combina lo stile funzionale con la gestione di flussi di valori che cambiano nel tempo. Permette di descrivere in modo dichiarativo come l'interfaccia o il sistema reagiscono ai cambiamenti dei dati. -
Programmazione generica
Tecnica che scrive algoritmi e strutture dati indipendenti dal tipo specifico dei dati trattati, parametrizzandoli. Permette di riutilizzare lo stesso codice con tipi diversi mantenendo la sicurezza dei tipi. -
Programmazione imperativa
Paradigma in cui il programma è una sequenza di istruzioni che modificano esplicitamente lo stato tramite assegnamenti, cicli e condizioni. Descrive passo per passo come raggiungere il risultato, rispecchiando da vicino il modello di esecuzione della macchina. -
Programmazione logica
Paradigma dichiarativo in cui il programma è un insieme di fatti e regole e il calcolo consiste nel derivare conclusioni tramite inferenza logica. L'esecuzione avviene interrogando la base di conoscenza, come nel linguaggio Prolog, che cerca soluzioni compatibili con i vincoli. -
Programmazione modulare
Approccio che suddivide un programma in moduli distinti e indipendenti, ciascuno con una responsabilità precisa. Favorisce riuso, manutenzione e lavoro in parallelo, riducendo la complessità complessiva del sistema. -
Programmazione orientata agli aspetti
Tecnica che isola le funzionalità trasversali, come logging o sicurezza, in moduli separati detti aspetti. Evita di disperdere lo stesso codice in tutto il programma, migliorando ordine e manutenibilità. -
Programmazione orientata ai dati
Approccio che progetta il software attorno all'organizzazione e alla trasformazione efficiente dei dati in memoria. È usato dove le prestazioni contano, come nei motori di gioco, sfruttando meglio la cache del processore. -
Programmazione orientata al dominio
Approccio che modella il software attorno ai concetti e al linguaggio del dominio applicativo. Avvicina il codice al modo di ragionare degli esperti del settore, riducendo la distanza tra requisiti e implementazione. -
Programmazione parallela
Approccio che scompone un calcolo in parti eseguite simultaneamente su più unità di elaborazione. Punta a ridurre i tempi sfruttando processori multicore o sistemi distribuiti, richiedendo attenzione alla sincronizzazione. -
Programmazione procedurale
Sottoinsieme del paradigma imperativo che struttura il codice in procedure o funzioni richiamabili, favorendo riuso e modularità. Organizza il flusso attorno a chiamate a subroutine che operano su dati passati come parametri, migliorando la leggibilità rispetto al codice monolitico. -
Programmazione reattiva
Paradigma incentrato sui flussi di dati e sulla propagazione automatica dei cambiamenti: quando una sorgente cambia, i valori che ne dipendono si aggiornano di conseguenza. È adatto a interfacce e sistemi orientati agli eventi, dove lo stato evolve nel tempo in modo asincrono. -
Programmazione simbolica
Approccio che manipola simboli ed espressioni anziché soli valori numerici, trattando il codice stesso come dato. È tipico dei linguaggi della famiglia Lisp e di applicazioni di calcolo formale e intelligenza artificiale. -
Programmazione sincrona
Modello in cui le operazioni vengono eseguite in sequenza e ciascuna attende il completamento della precedente. È semplice da seguire, ma un'operazione lenta blocca tutte quelle successive. -
Programmazione stack-oriented
Paradigma in cui le operazioni agiscono su una pila implicita di valori, senza nominare variabili intermedie. È il modello di linguaggi come Forth e del bytecode di molte macchine virtuali. -
Programmazione strutturata
Paradigma che organizza il codice con costrutti chiari come sequenze, selezioni e cicli, evitando i salti incondizionati. Rende i programmi più leggibili e manutenibili ed è alla base della programmazione moderna.