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
- Comando A
- Comando B
- 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.
Metodologia TOP-DOWN
Da dove si parte?
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
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
Concorrente | Processi | |
Funzionale | Valutazione di funzioni | AutoLISP, Common Lisp, Haskell, LISP, LOGO, Mathematica, Scala, Scheme |
Genetico | Apprendimento automatico | |
Imperativo | Variabili Comandi Istruzioni per il controllo del flusso | Assembly, BASIC … |
Logico | Clausole Unificazione | PROLOG |
Modulare | Moduli Interfacce | |
Orientato agli oggetti | Classi Incapsulamento Ereditarietà Polimorfismo | C++, Eiffel Delphi, Java Simula, Smalltalk TurboPascal 5.5, VisualBasic 4 |
Orientato agli eventi | Eventi Gestori degli eventi | |
Parallelo | Concorrenza | |
Procedurale | Sottoprogrammi Procedure Funzioni | |
Script | Shell Interpretato | ActionScript, AppleScript ASP, Bash Javascript, JSP Perl, PHP Python, Ruby Tcl, VBScript |
Strutturato | Sequenza Cicli Alternative | ALGOL, Pascal, … |
Visuale | Blocchi Frecce | Alice, Blockly mBlock, Scratch |
Molti linguaggi si presentano come multiparadigma, forniscono al programmatore una sintassi molto flessibile / completa
- Ada: programmazione modulare, orientata agli oggetti, concorrente, distribuita
- C#: … imperativa, dichiarativa, funzionale, generica, object-oriented, component-oriented
- Common Lisp: procedurale, imperativa, funzionale, object-oriented
- F#: … imperativa, funzionale, object-oriented
- Scala: … funzionale, object-oriented