Paradigmi di programmazione.

Python logo
Python logo

Nel Laboratorio di Scienze e Tecnologie Informatiche (LSTI) è fondamentale avere una conoscenza dei paradigmi di programmazione, perché questi rappresentano i diversi modi di pensare e strutturare un programma. Vediamo una panoramica chiara dei principali paradigmi e di cosa è importante conoscere per ciascuno:

1. Paradigma Imperativo.

  • Descrizione: Si basa su istruzioni che modificano lo stato del programma tramite variabili e assegnazioni.
  • Caratteristiche principali:
    • Sequenza di comandi che il computer esegue passo passo.
    • Uso di variabili, cicli (for, while) e strutture condizionali (if).
  • Linguaggi tipici: C, Pascal, Python (anche multi-paradigma).
  • Cosa devi sapere: come scrivere procedure e funzioni, manipolare variabili, gestire il flusso del programma.

2. Paradigma Orientato agli Oggetti (OO).

  • Descrizione: Organizza il codice attorno a oggetti, che combinano dati e comportamenti (metodi).
  • Caratteristiche principali:
    • Classi e oggetti.
    • Incapsulamento, ereditarietà, polimorfismo.
  • Linguaggi tipici: Java, C++, Python.
  • Cosa devi sapere: creare classi e oggetti, definire metodi, comprendere i concetti di ereditarietà e polimorfismo.

3. Paradigma Funzionale.

  • Descrizione: Si concentra sulle funzioni matematiche pure, evitando stati modificabili ed effetti collaterali.
  • Caratteristiche principali:
    • Funzioni come cittadini di prima classe.
    • Composizione di funzioni.
    • Ricorsione al posto di cicli.
  • Linguaggi tipici: Haskell, Lisp, F#, anche Python o JavaScript supportano funzioni di ordine superiore.
  • Cosa devi sapere: scrivere funzioni pure, usare map/filter/reduce, comprendere concetti come immutabilità.

4. Paradigma Logico/Dichiarativo.

  • Descrizione: Si concentra sul cosa fare, non sul come farlo.
  • Caratteristiche principali:
    • Basato su regole e fatti logici.
    • Esempio tipico: risolvere problemi tramite inferenze.
  • Linguaggi tipici: Prolog.
  • Cosa devi sapere: formulare problemi come relazioni logiche e query.

5. Paradigma Event-Driven (o a eventi).

  • Descrizione: Il flusso del programma è determinato da eventi esterni (clic, messaggi, input).
  • Caratteristiche principali:
    • Gestione di eventi tramite listener o callback.
    • Spesso usato nello sviluppo GUI e web.
  • Linguaggi tipici: JavaScript, C# (GUI)
  • Cosa devi sapere: capire come associare eventi a funzioni e gestire il flusso asincrono.

Consiglio pratico per il laboratorio: non serve diventare esperti di tutti i linguaggi, ma saper distinguere i paradigmi e riconoscere il loro approccio al problema è fondamentale. Molti esercizi del laboratorio richiedono di:

  • scrivere codice in stile imperativo,
  • progettare una classe (OO),
  • usare funzioni in modo funzionale.

Ecco una tabella sintetica dei principali paradigmi di programmazione, con esempi pratici che puoi usare come ripasso rapido per il laboratorio di Scienze e Tecnologie Informatiche:

ParadigmaDescrizione sinteticamenteStruttura principale / concettiEsempio pratico (Python)
ImperativoIstruzioni sequenziali che modificano lo statoVariabili, cicli, condizionalipython\nsomma = 0\nfor i in range(1, 6):\n somma += i\nprint(somma)
Orientato agli oggetti (OO)Organizza codice in oggetti con dati e comportamentiClassi, oggetti, metodi, ereditarietà, polimorfismopython\nclass Persona:\n def __init__(self, nome):\n self.nome = nome\n def saluta(self):\n print(“Ciao, sono ” + self.nome)\np = Persona(“Anna”)\np.saluta()
FunzionaleFunzioni pure, immutabilità, composizioneFunzioni di ordine superiore, map/filter/reduce, ricorsionepython\nnumeri = [1,2,3,4]\nsquared = list(map(lambda x: x**2, numeri))\nprint(squared)
Dichiarativo / LogicoSi specifica cosa fare, non comeFatti, regole, queryprolog\ngenitore(anna, maria).\ngenitore(maria, luca).\nantenato(X,Y):- genitore(X,Y).\nantenato(X,Y):- genitore(X,Z), antenato(Z,Y).
Event-driven / a eventiFlusso determinato da eventi esterniEvent listener, callback, gestione asincronapython\n# esempio concettuale\ndef on_click():\n print(“Bottone cliccato”)\n# in una GUI: bottone.bind(“<Button-1>”, on_click)
** Se puoi sostenere il mio lavoro, comprami un libro | Buy me a book! **
** ISCRIVITI ALLA NEWSLETTER ! **

About the Author

Sergio Mauri
Blogger, autore. Perito in Sistemi Informativi Aziendali, musicista e compositore, Laurea in Discipline storiche e filosofiche e in Filosofia. Premio speciale al Concorso Claudia Ruggeri nel 2007; terzo posto al Premio Igor Slavich nel 2020. Ha pubblicato con Terra d'Ulivi nel 2007 e nel 2011, con Hammerle Editori nel 2013 e 2014, con PGreco nel 2015 con Historica Edizioni e Alcova Letteraria nel 2022 con Silele Edizioni (La Tela Nera) nel 2023 e con Amazon Kdp nel 2024 e 2025.