sabato 21 febbraio 2026

Corso di Programmazione Strutturata e OOP: 2 introduzione alla programmazione ad oggetti (OOP)

👩‍💻 2 Oggetti, classi e metodi
 introduzione alla programmazione ad oggetti (OOP)

📌 Concetti chiave

🔹 Il paradigma a oggetti

La programmazione a oggetti (OOP, Object-Oriented Programming) è un paradigma che organizza il codice attorno a entità chiamate oggetti.
Un oggetto è un’astrazione del mondo reale che racchiude dati (stato) e comportamenti (azioni) in un’unica unità coerente.

👉 In altre parole, un oggetto può essere visto come una “cosa” autonoma capace di interagire con altre cose.

🔹 Perché la OOP

Rispetto al modello procedurale, in cui i dati e le funzioni sono separati, la OOP presenta diversi vantaggi:

  • Organizzazione → il codice è più leggibile e strutturato.
  • Riusabilità → le classi possono essere riutilizzate in più progetti.
  • Manutenibilità → è più facile aggiornare o correggere una parte del sistema senza stravolgere tutto il resto.
  • Astrazione → permette di modellare problemi complessi in modo naturale.

🔹 Procedurale vs OOP

Paradigma Procedurale Paradigma a Oggetti (OOP)
Dati e funzioni separati Dati e metodi integrati in oggetti
Programma come sequenza di istruzioni Programma come interazione tra oggetti
Riutilizzo limitato Elevato riutilizzo grazie a classi e ereditarietà

🔹 Classi e istanze

  • Una classe è un modello, una sorta di “stampo” per creare oggetti.
  • Un’istanza è un oggetto concreto creato da una classe.

Esempio:

class Animale:
    pass

cane = Animale()  # istanza della classe Animale

🔹 Attributi e metodi

  • Attributi → variabili che descrivono le caratteristiche di un oggetto.
  • Metodi → funzioni definite all’interno della classe, che descrivono i comportamenti dell’oggetto.

Esempio:

class Animale:
    def __init__(self, nome, specie, suono):
        self.nome = nome        # attributo
        self.specie = specie    # attributo
        self.suono = suono      # attributo

    def faiVerso(self):         # metodo
        return f"{self.nome} dice {self.suono}"

🧪 Attività pratiche

1️⃣ Classe Animale

Definisci una classe con attributi e metodi, poi crea diverse istanze.

class Animale:
    def __init__(self, nome, specie, suono):
        self.nome = nome
        self.specie = specie
        self.suono = suono

    def faiVerso(self):
        return f"{self.nome} ({self.specie}) dice: {self.suono}"

# istanze
cane = Animale("Fido", "Cane", "bau")
gatto = Animale("Micio", "Gatto", "miao")
mucca = Animale("Bianchina", "Mucca", "muu")

print(cane.faiVerso())
print(gatto.faiVerso())
print(mucca.faiVerso())

2️⃣ Interazione tra oggetti

Facciamo interagire due classi: Animale e Giocattolo.

class Giocattolo:
    def __init__(self, nome):
        self.nome = nome

    def usatoDa(self, animale):
        return f"{animale.nome} gioca con {self.nome}"

palla = Giocattolo("palla")
print(palla.usatoDa(cane))  # Fido gioca con palla

3️⃣ Mondo reale

Modelliamo un concetto più vicino alla vita quotidiana: Studente.

class Studente:
    def __init__(self, nome, eta, classe):
        self.nome = nome
        self.eta = eta
        self.classe = classe

    def studia(self, materia):
        return f"{self.nome} sta studiando {materia}"

    def sostieneEsame(self, materia):
        return f"{self.nome} ha sostenuto l’esame di {materia}"

alunno = Studente("Luca", 20, "3A")
print(alunno.studia("matematica"))
print(alunno.sostieneEsame("fisica"))

Altri esempi possibili:

  • Libro con titolo, autore, numero di pagine, metodo leggi().
  • ContoBancario con saldo, metodi deposita(), preleva().

🔍 Riflessione critica

La OOP non è solo una tecnica, ma un modo di pensare.
Modellare un sistema in termini di oggetti significa avvicinare la logica del software a quella del mondo reale. Tuttavia:

  • Non sempre è il paradigma migliore (per esempio, nei programmi molto semplici la OOP può risultare eccessiva).
  • Richiede disciplina e progettazione: una cattiva modellazione porta a codice complesso e difficile da mantenere.
  • È stata rivoluzionaria, ma oggi si combina con altri paradigmi (funzionale, reattivo, declarativo) per rispondere alla complessità crescente del software moderno.


📋 Test di verifica
1. Cosa rappresenta una classe nella OOP?
A) Una funzione specifica
B) Un tipo di dato primitivo
C) Un modello per creare oggetti 

2. Quale tra questi è un esempio di attributo?
A) studia()
B) nome 
C) return

3. Quale tra queste è una differenza tra OOP e programmazione procedurale?
A) Nella OOP non esistono funzioni
B) La OOP separa dati e comportamenti
C) La OOP racchiude dati e metodi negli oggetti 

4. Se creo un oggetto “pippo = Animale('Pippo', 'Pappagallo', 'ciao')”, cosa rappresenta “pippo”?
A) Una classe
B) Un metodo
C) Un’istanza 

5. Cosa fa il metodo __init__?
A) È un costruttore, inizializza gli oggetti 
B) Elimina una classe
C) Chiude il programma

🔎 Risposte corrette: 1C – 2B – 3C – 4C – 5A 🎯 Obiettivo didattico:
Acquisire i concetti base della programmazione orientata agli oggetti attraverso esempi concreti, simulazioni ed esercizi. 💬 Suggerimento:
Per stimolare la riflessione, chiedi agli studenti di inventare una propria classe originale (es. Videogioco, Pianeta, Ingrediente) e mostrarne attributi e metodi in un disegno o schema.

venerdì 20 febbraio 2026

Corso di Programmazione Strutturata e OOP: 1 modelli e applicazioni

📖 1 Programmazione strutturata:
modelli e applicazioni

🎯 Obiettivo generale

La programmazione strutturata è una delle basi fondamentali dell’informatica. Il suo obiettivo è fornire un insieme di regole e buone pratiche che permettano di scrivere programmi chiari, leggibili e manutenibili nel tempo. Comprendere questo approccio significa imparare a progettare software che non solo funzioni, ma che possa essere facilmente compreso, corretto ed esteso anche da altri programmatori.

📚 Contenuti

🔹 Cos’è la programmazione strutturata

Negli anni ’60 e ’70, quando i programmi diventavano sempre più grandi e complessi, nacque l’esigenza di imporre ordine e rigore alla scrittura del codice. La programmazione strutturata è stata la risposta a questo bisogno: un paradigma che riduce la complessità tramite regole semplici e universali.

I tre costrutti fondamentali sono:

  1. Sequenza

    • Le istruzioni vengono eseguite una dopo l’altra, in ordine cronologico.
    • È il flusso “naturale” del programma, come leggere una ricetta passo dopo passo.
    • Esempio in C:
      int a = 5;
      int b = 10;
      int somma = a + b; // eseguito dopo le due assegnazioni
      
  2. Selezione

    • Permette di scegliere un percorso alternativo in base a una condizione.
    • Tipici costrutti: if/else, switch.
    • Esempio in Python:
      x = 7
      if x > 0:
          print("Positivo")
      else:
          print("Negativo o zero")
      
  3. Iterazione

    • Ripete un blocco di istruzioni fino al verificarsi di una condizione.
    • Tipici costrutti: for, while, do while.
    • Esempio in Java:
      for(int i=0; i<5; i++){
          System.out.println("Ciclo numero " + i);
      }
      

👉 Con questi soli tre strumenti, qualsiasi algoritmo può essere espresso senza bisogno di salti arbitrari (goto), che rendono il codice difficile da leggere e mantenere.

🔹 Suddivisione del programma in moduli e sottoprogrammi

Un programma complesso non dovrebbe mai essere affrontato come un unico blocco monolitico. La decomposizione è il principio guida:

  • Modulo: parte indipendente del programma con un compito preciso. Può essere pensato come un “pezzo di macchina” che svolge una funzione specifica (es. gestione file, calcolo matematico).
  • Sottoprogramma: una funzione o procedura che realizza un’operazione riutilizzabile.

Esempio in C (uso di funzione come sottoprogramma):

int somma(int a, int b){
    return a + b;
}

int main(){
    int risultato = somma(5, 7);
    printf("%d", risultato);
}

Vantaggi:

  • Riutilizzabilità: lo stesso sottoprogramma può essere richiamato più volte.
  • Manutenibilità: se serve una modifica, basta agire nel punto centrale.
  • Chiarezza logica: ogni parte ha un compito ben definito.

🔹 Buone pratiche di scrittura del codice

Scrivere codice “che funziona” non basta: deve anche essere leggibile e mantenibile. Alcune regole fondamentali:

  1. Indentazione coerente
    Aiuta a visualizzare immediatamente le strutture logiche (cicli, condizioni).

    for i in range(5):
        if i % 2 == 0:
            print(i, "pari")
    
  2. Commenti chiari
    Non servono a ripetere ovvietà, ma a spiegare perché si fa qualcosa.

    // Calcola la media dei voti inseriti
    double media = somma / numeroVoti;
    
  3. Nomenclatura significativa
    Variabili e funzioni devono avere nomi parlanti:

    double calcolaMedia(double somma, int numero){
        return somma / numero;
    }
    
  4. Principio DRY (Don’t Repeat Yourself)
    Evitare duplicazioni di codice, creando funzioni riutilizzabili. La ridondanza aumenta il rischio di errori e rende il software più difficile da mantenere.

🛠️ Applicazioni pratiche

La programmazione strutturata è alla base di quasi tutti i linguaggi moderni (C, Java, Python, ecc.). Alcuni esempi di applicazione:

  • Calcolatori semplici (uso di sequenza, funzioni matematiche).
  • Gestione di dati (input da tastiera, selezione tramite condizioni).
  • Cicli di simulazione (iterazioni per testare scenari).
  • Progettazione modulare (programmi suddivisi in librerie e funzioni).

✅ In sintesi, la programmazione strutturata insegna a pensare in modo ordinato:

  • scomporre i problemi,
  • scegliere strutture logiche semplici,
  • scrivere codice leggibile e robusto.

È il primo passo verso lo sviluppo software professionale e costituisce la base su cui si innestano paradigmi più complessi, come la programmazione orientata agli oggetti o la programmazione funzionale.

🎯 Attività pratiche

✏️ Attività 1 – Ristruttura il codice

Consegna uno spezzone di codice scritto in modo confuso e chiedi di:

  1. Correggere l’indentazione.
  2. Rinominare variabili in modo più significativo.
  3. Inserire commenti esplicativi.

🔧 Esempio prima:

a=10
b=20
if a>b:
print("a maggiore")
else:
print("b maggiore")

Esempio dopo:

# Confronta due numeri e stampa il maggiore
num1 = 10
num2 = 20

if num1 > num2:
    print("num1 è maggiore")
else:
    print("num2 è maggiore")

🧩 Attività 2 – Costruzione di mini-programmi modulati

Progetta un semplice programma a scelta (es. calcolo media voti, convertitore di temperature, somma di numeri pari...) usando almeno:

  • 1 struttura di selezione
  • 1 ciclo
  • 1 funzione

Esempio:
Funzione che calcola se un numero è primo
(utilizza def, for, if, return)

🧠 Attività 3 – Decomposizione logica di un problema

Dai un problema reale (es. organizzare una giornata scolastica, cucinare una ricetta, prenotare un volo) e chiedi di:

  • Identificare le azioni in sequenza
  • Dove ci sono scelte
  • Dove ci sono ripetizioni

Esempio: “Organizza la giornata di scuola”

  • Sequenza: svegliarsi, fare colazione, vestirsi
  • Selezione: se piove, prendere l’ombrello
  • Iterazione: per ogni ora scolastica, seguire la lezione

Test di verifica finale

Domande a scelta multipla

  1. Quale delle seguenti NON è una struttura base della programmazione strutturata?
    a) Sequenza
    b) Ricorsione
    c) Iterazione
    d) Selezione

  2. Cosa si intende per "modulo" in un programma?
    a) Una parte casuale del codice
    b) Una sezione che stampa su schermo
    c) Un blocco indipendente con funzione specifica
    d) Una struttura ciclica

  3. Qual è lo scopo dei commenti in un programma?
    a) Velocizzare l’esecuzione
    b) Rendere il codice più leggibile
    c) Salvare il codice automaticamente
    d) Impedire errori di sintassi

  4. Cosa significa l'acronimo DRY?
    a) Don’t Repeat Yourself
    b) Do Repeat Yourself
    c) Don’t Run Yet
    d) Develop Recent YAML

  5. Quale tra questi è un buon esempio di nome di variabile?
    a) a1
    b) xz3
    c) contatoreStudenti
    d) 123nome


Esercizio aperto

Scrivi un semplice programma (in pseudocodice o Python) che:

  • Chieda all’utente tre numeri
  • Calcoli la media
  • Stabilisca se è maggiore di 10
  • Restituisca un messaggio coerente

📝 Soluzioni test

  1. b) Ricorsione
  2. c) Un blocco indipendente con funzione specifica
  3. b) Rendere il codice più leggibile
  4. a) Don’t Repeat Yourself
  5. c) contatoreStudenti



Corso Imparare a Programmare: 7 Il linguaggio Python

🐍 7. Il Linguaggio Python:
Dalla Logica alla Creazione

Python non è solo un linguaggio di programmazione; è lo "standard de facto" per l'intelligenza artificiale, la ricerca scientifica e lo sviluppo web moderno. La sua forza risiede nella leggibilità: scrivere in Python è quanto di più vicino ci sia allo scrivere in inglese (o italiano) tecnico.

🎯 Obiettivi Didattici

  • Padronanza della Sintassi: Passare dalla comprensione logica alla scrittura di codice funzionante.

  • Problem Solving Creativo: Imparare a scomporre un'idea complessa in istruzioni sequenziali.

  • Sviluppo di Software Interattivo: Creare programmi che dialogano con l'utente e reagiscono alle sue scelte.

📚 Contenuti Approfonditi del Modulo

1. 🔍 Perché Python? (Oltre la Semplicità)

Python è un linguaggio interpretato e multi-paradigma. È scelto dai principianti perché elimina le barriere sintattiche (come i punti e virgola ; obbligatori o le parentesi graffe {} per i blocchi di codice), ma è amato dai professionisti per la sua potenza:

  • Versatilità: Dalle automazioni semplici ai modelli di Deep Learning.

  • Comunità Gigantesca: Esistono "pacchetti" pronti per fare quasi tutto: analizzare dati, creare videogiochi o gestire domotica.

2. ✏️ Fondamenta: Variabili e Tipi di Dato

In Python, non devi dichiarare il tipo di variabile; lui "capisce" da solo cosa contiene:

  • Stringhe: Testo racchiuso tra virgolette ("Ciao").

  • Interi e Float: Numeri interi (5) o decimali (5.5).

  • Input Dinamico: La funzione input() trasforma il tuo computer in un interlocutore.

Python
# Esempio di calcolo dinamico
prezzo = float(input("Quanto costa l'oggetto? "))
sconto = prezzo * 0.20
print(f"Lo sconto del 20% è: {sconto}€")

3. 🔁 Flusso di Controllo: Il Cervello del Programma

Senza condizioni e cicli, un programma è solo una lista della spesa. Con essi, diventa un processo decisionale.

  • if / elif / else: Gestiscono i bivi logici.

  • for: Ideale per ripetere un'azione un numero noto di volte (es. inviare 100 email).

  • while: Ideale per ripetere un'azione finché una condizione rimane vera (es. un videogioco che gira finché non premi "Esc").

4. ⚙️ Funzioni: L'Efficienza del Riuso

Le funzioni permettono di impacchettare il codice. Se devi calcolare l'area di un cerchio dieci volte nel programma, non scriverai la formula dieci volte, ma richiamerai la tua funzione calcola_area().

🛠️ Attività Guidate e Laboratori Pratici

📄 1. Hello World 2.0: L'Interazione

Il classico "Ciao Mondo" è solo l'inizio. Rendiamolo vivo.

Python
nome = input("Scrivi il tuo nome: ")
print(f"Benvenuto nel futuro della programmazione, {nome}!")

Sfida: Prova a far dire al computer quanti anni avrai nel 2030 chiedendo all'utente il suo anno di nascita.

🎲 2. Progetto: Il Quiz Master Intelligente

Non limitarti a una domanda. Crea un sistema che tiene traccia del punteggio.

Python
punteggio = 0

print("--- Benvenuti al Geo-Quiz! ---")
risposta = input("Qual è la capitale della Francia? ").lower()

if risposta == "parigi":
print("Complimenti! +10 punti")
punteggio += 10
else:
print("Peccato, era Parigi.")

print(f"Il tuo punteggio finale è: {punteggio}")
  • Esercizio: Aggiungi un ciclo for per fare 5 domande diverse e usa una variabile per dare un premio finale se il punteggio supera i 40 punti.

🧠 3. Sfida Finale: Generatore di Narrazioni Interattive

Le "Avventure Testuali" erano i videogiochi degli anni '80. Creane una moderna.

Python
protagonista = input("Nome dell'eroe: ")
arma = input("Scegli un'arma (Spada o Magia): ").capitalize()

print(f"{protagonista} cammina nel bosco...")

scelta = input("Vedi una grotta. Entri o prosegui? (entrare/proseguire): ")

if scelta == "entrare":
if arma == "Spada":
print(f"Un drago ti attacca, ma lo sconfiggi con la tua {arma}!")
else:
print("La magia non illumina la grotta... ti sei perso!")
else:
print(f"{protagonista} decide di tornare a casa sano e salvo.")

🎯 Conclusione del Modulo

Al termine di questa sezione, avrai gli strumenti per smettere di "usare" i programmi creati da altri e iniziare a costruire i tuoi. Python è la tua penna digitale: cosa scriverai?


Corso di Programmazione Strutturata e OOP: 2 introduzione alla programmazione ad oggetti (OOP)

👩‍💻 2 Oggetti, classi e metodi  introduzione alla programmazione ad oggetti (OOP) 📌 Concetti chiave 🔹 Il paradigma a oggetti La p...