I paradigmi di programmazione

Negli anni sono stati codificati diversi modi per passare dal problema all’algoritmo

Programmazione imperativa

Un programma è costituito da una sequenza di comandi che l’esecutore eseguirà ordinatamente

  1. Comando A
  2. Comando B
  3. Comando C

Il controllo dell’esecuzione si realizza tramite delle istruzioni di salto

  • condizionato (JGT, JLT, …)
  • incondizionato (JUMP…)
  • GOTO, …

I linguaggi di basso livello e i primi linguaggi di programmazione avevano questo approccio (oggi è da evitare).

Programmazione strutturata

Il controllo dell’esecuzione non si realizza con le istruzioni di salto ma con

  • selezioni (per i salti in avanti)
    • singola
    • doppia
    • multipla
  • ripetizioni (per i salti indietro)
    • indefinita
    • predefinita

Paradigma procedurale

Divido il problema in sotto-problemi e li risolvo singolarmente (con dei sotto-programmi) fino a risolvere tutto il problema.

PARA3

Metodologia TOP-DOWN

Da dove si parte?

PARA1

Affronto qualsiasi problema partendo dall’aspetto più alla superficie.
Continuo strato dopo strato fino ad arrivare alla radice.
Ad ogni passo risolvo l’aspetto più immediato/semplice fino ad arrivare a risolvere completamente il problema.

Metodologia BOTTOM-UP

PARA2

Affronto subito la risoluzione del nucleo del problema.
Risalgo strato dopo strato fino alla superficie esterna.
Inizio risolvendo l’aspetto più caratteristico (significativo / difficile) del problema e poi aggiungo strato dopo strato il codice necessario.

Paradigma

I linguaggi possono essere classificati a seconda del paradigma di programmazione che realizzano

ConcorrenteProcessi
FunzionaleValutazione di funzioniAutoLISP, Common Lisp,
Haskell, LISP,
LOGO, Mathematica,
Scala, Scheme
GeneticoApprendimento automatico
ImperativoVariabili
Comandi
Istruzioni per il controllo del flusso
Assembly, BASIC
LogicoClausole
Unificazione
PROLOG
ModulareModuli
Interfacce
Orientato agli oggettiClassi
Incapsulamento
Ereditarietà
Polimorfismo
C++, Eiffel
Delphi, Java
Simula, Smalltalk
TurboPascal 5.5, VisualBasic 4
Orientato agli eventiEventi
Gestori degli eventi
ParalleloConcorrenza
ProceduraleSottoprogrammi
Procedure
Funzioni
ScriptShell
Interpretato
ActionScript, AppleScript
ASP, Bash
Javascript, JSP
Perl, PHP
Python, Ruby
Tcl, VBScript
StrutturatoSequenza
Cicli
Alternative
ALGOL, Pascal,
VisualeBlocchi
Frecce
Alice, Blockly
mBlock, Scratch

Molti linguaggi si presentano come multiparadigma, forniscono al programmatore una sintassi molto flessibile / completa

  • Adaprogrammazione modulare, orientata agli oggetti, concorrente, distribuita
  • C#: … imperativa, dichiarativa, funzionale, generica, object-oriented, component-oriented
  • Common Lispprocedurale, imperativa, funzionale, object-oriented
  • F#: … imperativa, funzionale, object-oriented
  • Scala… funzionale, object-oriented