👩💻 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:
Librocon titolo, autore, numero di pagine, metodoleggi().ContoBancariocon saldo, metodideposita(),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.
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)
return3. 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.

Nessun commento:
Posta un commento