> For the complete documentation index, see [llms.txt](https://mirkorap16.gitbook.io/clean-architecture/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mirkorap16.gitbook.io/clean-architecture/panoramica-sui-paradigmi.md).

# Panoramica sui paradigmi

I paradigmi sono metodi di programmazione, pertanto non sono correlati ai linguaggi. Essi ci dicono quali strutture di programmazione usare e quando usarle. I paradigmi più conosciuti sono tre: la programmazione strutturata, la programmazione ad oggetti e la programmazione funzionale.

### La programmazione strutturata

Questo paradigma fu scoperto da Edsger Wybe Dijkstra nel 1968. Egli capì il problema costituito dall'utilizzo dei *goto*, i quali rendevano il codice difficile da leggere, e li sostituì con i più familiari costrutti *if/else/then* e *do/while/until*. Possiamo riassumere questo paradigma dicendo che:

> La programmazione strutturata impone la disciplina sul trasferimento diretto del controllo

### La programmazione ad oggetti

Questo paradigma fu scoperto due anni prima, nel 1966. La sua scoperta condusse alla nascita di concetti quali: **l'incapsulazione**, **l'ereditarietà** e il **polimorfismo**. Possiamo riassumere questo paradigma dicendo che:

> La programmazione ad oggetti impone la disciplina sul trasferimento indiretto del controllo

### La programmazione funzionale

Questo paradigma è il risultato del lavoro svolto da Alonzo Church, che nel 1936 inventò il lambda-calcolo. Da qui nacque uno dei primi linguaggi funzionali, il LISP. Uno dei concetti fondamentali dei linguaggi funzionali è **l'immutabilità**, dove i valori non vengono calcolati cambiando lo stato del programma attraverso le assegnazioni, ma vengono costruiti attraverso i valori iniziali. Possiamo riassumere questo paradigma dicendo che:

> La programmazione funzionale impone la disciplina sull'assegnamento
