Programmazione paradigmatica
I paradigmi di programmazione sono un modo per raggruppare i linguaggi di programmazione in base a ciò che fanno. I linguaggi possono essere in più di un paradigma.
Alcuni paradigmi guardano al modo in cui il codice viene eseguito, come ad esempio permettere effetti collaterali, o dover fare le cose in un certo ordine. Altri paradigmi guardano al modo in cui il codice è raggruppato, come ad esempio mettere il codice in uno o due pezzi (o, invece, molti piccoli pezzi). Altri paradigmi guardano all'ordine e ai pezzi che rendono il programma così com'è.
Ci sono due gruppi principali di paradigmi, imperativo e dichiarativo. Un linguaggio può essere entrambi allo stesso tempo.
Contenuti
· 1 Programmazione imperativa
· 2 Programmazione dichiarativa
· 3 Altri paradigmi
· 4 Panoramica
· 5 Problemi con i paradigmi
· 6 Storia
o 6.1 Codice macchina
o 6.2 Lingue procedurali
o 6.3 Programmazione orientata agli oggetti
o 6.4 I paradigmi dichiarativi
· 7 Pagine correlate
· 8 Riferimenti
· 9 Altri siti web
Programmazione imperativa
Nei programmi imperativi, i programmatori danno al computer una serie di passi ordinati che devono essere fatti per poter fare qualcosa. Se qualcuno volesse che il computer disegnasse una faccia da gatto, potrebbe dare indicazioni come "disegnare un cerchio qui, disegnare due cerchi più piccoli lì, disegnare due triangoli in cima" e così via. I programmi imperativi a volte hanno molti effetti collaterali.
Ci sono due grandi paradigmi imperativi, e molto spesso una lingua li avrà entrambi:
- Strutturato - Al computer vengono date indicazioni che sono sempre in un certo ordine. Non sono consentiti passaggi come "tornare al punto 3" (noti come goto statement).
- Procedurale - Il programma permette al programmatore di dare un nome ad una lista di ordini, che trasforma questi ordini in una "procedura" che può essere utilizzata in seguito. La maggior parte dei linguaggi strutturati sono anche procedurali.
- Object-Oriented - Le idee vengono spiegate al computer utilizzando oggetti, pezzi di codice che hanno una serie di ordini che possono essere dati e alcune informazioni su di essi.
Programmazione dichiarativa
Nei paradigmi dichiarativi, il programmatore dice al computer cosa fare invece di come farlo. Se volessero che il computer disegnasse una faccia da gatto, potrebbero dare indicazioni come "Disegna una faccia, disegna due occhi, due orecchie e una bocca".
I paradigmi dichiarativi più noti sono i seguenti:
- Funzionale - La maggior parte del lavoro è svolto da funzioni senza effetti collaterali.
- Logica - Si afferma un insieme di fatti e poi si pone una o più "domande".
- Event-driven - I pezzi di codice sono impostati per funzionare quando accadono certe cose (come l'accensione del computer).
Altri paradigmi
Alcuni paradigmi si possono trovare sia nei linguaggi imperativi che in quelli dichiarativi. Questi paradigmi si trovano di solito con uno dei suddetti paradigmi invece di andare da soli.
Panoramica
I linguaggi di programmazione sono raggruppati per paradigmi nello stesso modo in cui le macchine potrebbero essere raggruppate in base a ciò per cui sono utilizzate.
Alcune lingue rientrano in un unico paradigma principale, come ad esempio:
- Smalltalk (orientato agli oggetti)
- Montaggio (imperativo, ma non strutturato o orientato agli oggetti)
- Haskell (funzionale)
- Prolog (logica)
La maggior parte delle lingue, tuttavia, sono in più di un paradigma. Alcune di quelle che si distinguono per averne più di una lo sono:
- Scala (orientata agli oggetti, funzionale, parallela)
- Visual Basic (guidato dagli eventi, orientato agli oggetti)
- Lisp comune (procedurale, funzionale, orientato agli oggetti, meta)
- Schema (funzionale, procedurale, meta)
- Perl (funzionale, procedurale, meta, orientato agli oggetti, guidato dagli eventi)
- Pitone (funzionale, orientato agli oggetti, procedurale)
- Rubino (funzionale, orientato agli oggetti, procedurale)
- Wolfram Language (funzionale, procedurale, generalmente dichiarativo)
- Oz (logica, funzionale, imperativo, orientato agli oggetti)
- F# (funzionale, imperativo, orientato agli oggetti, meta)
Avere più paradigmi non è sempre un bene. Una volta che avere meno paradigmi può essere una buona cosa è quando c'è un linguaggio che è solo funzionale. Una funzione in uno di questi linguaggi a volte funziona meno (come se riguardasse solo le parti di un gruppo di cose di cui ha effettivamente bisogno) di quanto potrebbe essere necessario se il linguaggio fosse anche procedurale.
Molti paradigmi di programmazione sono noti sia per le cose che non lasciano fare alle persone, sia per quelle che lasciano fare alle persone. Una volta questo è vero per i linguaggi funzionali. Quando un linguaggio funzionale è solo o prevalentemente funzionale, di solito non permette effetti collaterali. Un'altra volta in cui questo è vero è la programmazione strutturata: è diversa dai normali linguaggi imperativi perché non permette ai programmatori di usare "goto statements" (dichiarazioni che dicono al programma di andare ad un passo precedente). A causa di questo e di altri motivi, la gente a volte pensa che i nuovi paradigmi non permettano abbastanza cose. A volte va bene che il computer non permetta alle persone di fare cose, però: può aiutare le persone ad evitare problemi con il loro codice, e lasciare che il computer faccia supposizioni in modo da poter eseguire il codice più velocemente, o anche controllare il codice per verificare la presenza di problemi prima che il codice funzioni!
![Panoramica dei vari paradigmi di programmazione secondo Peter Van Roy](https://alegsaonline.com/image/250px-Programming_paradigms.svg.png)
![Zoom](https://www.alegsaonline.com/zoom.png)
Panoramica dei vari paradigmi di programmazione secondo Peter Van Roy
Problemi con i paradigmi
Ad alcune persone che studiano i linguaggi di programmazione non piace che i paradigmi siano usati per raggruppare i linguaggi di programmazione, come Harper e Krishnamurthi. Queste persone dicono che molti linguaggi di programmazione non possono essere raggruppati in paradigmi perché i linguaggi prendono in prestito cose e idee da molti paradigmi.
Storia
Nel corso del tempo sono stati creati nuovi paradigmi, e la gente li ha indicati in quel momento, o guardando indietro. Uno dei primi paradigmi che è stato riconosciuto come un nuovo modo di programmare è stata la programmazione strutturata degli anni Sessanta. L'idea di un "paradigma di programmazione" è del 1978, se non prima, quando Robert W. Floyd lo usò durante l'insegnamento. La parola "paradigma", nel modo in cui Robert la intendeva, è stata usata per la prima volta da Thomas Kuhn nel suo libro La struttura delle rivoluzioni scientifiche (1962).
Codice macchina
Il più basso livello (il più vicino a come il computer ama capire le cose) e il più antico paradigma di programmazione è il codice macchina, un paradigma imperativo. Le direzioni nel codice macchina sono solo un insieme di numeri in un certo ordine. Il linguaggio di assemblaggio è un po' meno di basso livello (e un po' meno vecchio). Nel linguaggio assembly, le direzioni per il computer sono date in mnemotecnica (nomi più facili da ricordare), e gli indirizzi di memoria (direzioni per trovare un'informazione nel computer) possono essere dati dei nomi. Questi sono a volte chiamati lingue di prima e seconda generazione.
Negli anni '60, i linguaggi assembly sono stati migliorati aggiungendo nuove cose come la libreria COPY, le macro (bit di codice "speciale" che sono stati trasformati in codice normale prima che il programma iniziasse a funzionare), le procedure in esecuzione (insiemi di direzioni a cui è stato dato un nome e salvati per il futuro), e le variabili (elementi a cui sono stati dati nomi e salvati per il futuro) dall'esterno del programma. Questo permette alle persone di usare un po' di codice in più di un progetto, e di non doversi preoccupare di problemi specifici dell'hardware (problemi che accadono solo su un tipo di computer) grazie a comandi (nomi per le direzioni) come READ/WRITE/GET/PUT.
L'assemblaggio è stato, e a volte lo è ancora, utilizzato in sistemi in cui è importante che il codice sia veloce, ed è anche molto utilizzato nei sistemi embedded perché permette all'utente di avere il controllo esatto di ciò che la macchina fa.
Lingue procedurali
Alla fine degli anni Sessanta, la gente ha iniziato a inventare i linguaggi procedurali. Queste lingue di terza generazione (le prime di quelle che oggi chiamiamo lingue di alto livello) avevano parole legate a ciò che cercavano di risolvere. Per esempio,
- COmmon Business Oriented Language (COBOL) - utilizza parole come file, spostare e copiare.
- FORmula TRANslation (FORTRAN) - utilizza parole e simboli matematici (forme utilizzate nella scrittura e nella battitura). È stata sviluppata principalmente per la scienza e l'ingegneria.
- ALGOrithmic Language (ALGOL) - fatto per gli algoritmi di scrittura (serie di passi che dicono al computer cosa fare). Utilizza parole e simboli matematici, proprio come FORTRAN.
- Linguaggio di programmazione uno (PL/I) - doveva essere utile a tutti.
- Principianti Codice d'istruzione simbolico per tutti gli scopi (BASIC) - fatto per aiutare i programmi per principianti.
- C - un linguaggio di programmazione destinato a fare molte cose. Dennis Ritchie ci ha lavorato dal 1969 al 1973 alla AT&T Bell Labs.
Programmazione orientata agli oggetti
Dopo che molte persone hanno iniziato ad usare i linguaggi procedurali, hanno inventato i linguaggi di programmazione orientati agli oggetti. In questi linguaggi, i dati e i loro "metodi" (modi di manipolare i dati) sono messi in un unico "oggetto". Alcuni programmatori, come Richard Stallman, non sono d'accordo sul fatto che i linguaggi orientati agli oggetti siano migliori per spiegare le idee a un computer rispetto ai linguaggi procedurali.
Poiché la programmazione orientata agli oggetti è un paradigma, non un linguaggio, le persone hanno realizzato linguaggi di assemblaggio orientati agli oggetti come HLA (High Level Assembly).
Paradigmi dichiarativi
Allo stesso tempo, alcune persone stavano realizzando linguaggi di programmazione dichiarativi. Un linguaggio noto per essere dichiarativo è l'SQL (un linguaggio per aggiungere e rimuovere cose dalle tabelle).
Pagine correlate
- Mindset
- Tipo di sistema
- Completezza di Turing
Domande e risposte
D: Che cos'è un paradigma di programmazione?
R: Un paradigma di programmazione è un modo di raggruppare i linguaggi di programmazione in base al loro funzionamento.
D: Quali sono i due gruppi principali di paradigmi?
R: I due gruppi principali di paradigmi sono imperativo e dichiarativo.
D: In che cosa differiscono i paradigmi imperativi e dichiarativi?
R: I paradigmi imperativi guardano al modo in cui il codice viene eseguito, ad esempio consentendo effetti collaterali o dovendo fare le cose in un certo ordine, mentre i paradigmi dichiarativi guardano al modo in cui il codice viene raggruppato, ad esempio inserendo il codice in uno o due pezzi (o invece in molti piccoli pezzi).
D: Un linguaggio può essere sia un paradigma imperativo che dichiarativo?
R: Sì, un linguaggio può essere un paradigma imperativo e dichiarativo allo stesso tempo.
D: In che modo un paradigma di programmazione raggruppa i linguaggi?
R: I paradigmi di programmazione raggruppano i linguaggi in base a ciò che fanno. Osservano il modo in cui il codice viene eseguito, il modo in cui è raggruppato e l'ordine e i pezzi che compongono il programma.
D: Esistono altri tipi di paradigmi di programmazione oltre a quello imperativo e dichiarativo?
R: Sì, ci sono altri tipi di paradigmi di programmazione oltre a quello imperativo e dichiarativo. Ad esempio, alcuni guardano al modo in cui il codice viene eseguito (ad esempio, permettendo gli effetti collaterali), mentre altri guardano al modo in cui il codice viene raggruppato (ad esempio, mettendo il codice in uno o due pezzi).
D: Ogni linguaggio appartiene a un solo tipo di paradigma di programmazione?
R: No, non tutti i linguaggi appartengono ad un solo tipo di paradigma di programmazione; alcuni linguaggi possono appartenere a più di un tipo di paradigma.