Guida Didattica · Percorso Python

Programmazione Orientata agli Oggetti

Organizza il codice come il mondo reale: classi, oggetti, ereditarietà e incapsulamento.

0 di 5 passaggi completati

01Fondamenti

Cos'è una classe?

Finora abbiamo usato variabili e funzioni separate. La programmazione orientata agli oggetti (OOP) permette di raggruppare dati e comportamenti insieme, in un'unica entità chiamata "oggetto". Una classe è lo stampo, l'oggetto è il prodotto creato da quello stampo.

class Studente:
    def __init__(self, nome, età):
        self.nome = nome
        self.età = età

    def presentati(self):
        print(f"Ciao, sono {self.nome} e ho {self.età} anni")

anna = Studente("Anna", 22)
anna.presentati()  # Ciao, sono Anna e ho 22 anni

__init__ è il "costruttore": si esegue automaticamente quando crei un nuovo oggetto, e self rappresenta l'oggetto stesso, permettendo di accedere ai suoi dati.

02Concetti Chiave dell'OOP

🏗️ Classi e oggetti▶

La classe è la definizione generale (es. "Automobile"), l'oggetto è un'istanza concreta (es. "la mia Fiat 500 rossa"). Da una classe puoi creare quanti oggetti vuoi.

🧬 Ereditarietà▶

Una classe (figlia) può "ereditare" attributi e metodi da un'altra classe (madre), evitando di riscrivere codice comune e aggiungendo solo ciò che è specifico.

class Veicolo: def __init__(self, marca): self.marca = marca class Auto(Veicolo): def clacson(self): print("Beep beep!")
🔒 Incapsulamento▶

Consiste nel proteggere i dati interni di un oggetto, esponendo solo ciò che è necessario. In Python si usa la convenzione di anteporre un underscore (_saldo) o doppio underscore per indicare attributi "privati".

class ContoBancario: def __init__(self, saldo): self.__saldo = saldo # privato def preleva(self, importo): if importo <= self.__saldo: self.__saldo -= importo
🎭 Polimorfismo▶

Classi diverse possono avere metodi con lo stesso nome, ma comportamenti diversi: ogni oggetto risponde "a modo suo" alla stessa chiamata.

class Gatto: def verso(self): print("Miao") class Cane: def verso(self): print("Bau") for animale in [Gatto(), Cane()]: animale.verso() # ognuno risponde a modo suo
🔑 self e __init__▶

__init__ è il metodo speciale eseguito alla creazione dell'oggetto (costruttore). self rappresenta l'oggetto stesso ed è sempre il primo parametro di ogni metodo di una classe.

03Checklist Pratica

Spunta ogni passaggio man mano che lo completi: sbloccherai l'attestato di questa guida al termine.

Esempio per il punto 1

class Animale:
    def __init__(self, nome, specie):
        self.nome = nome
        self.specie = specie
1. Crea una classe con __init__Una classe "Animale" con attributi nome e specie, come nell'esempio sopra.

Esempio per il punto 2

    def presentati(self):
        print(f"Sono {self.nome}, un {self.specie}")
2. Aggiungi un metodoAggiungi alla classe Animale il metodo presentati() dell'esempio sopra, che usa gli attributi dell'oggetto.

Esempio per il punto 3

gatto = Animale("Micio", "gatto")
cane = Animale("Fido", "cane")
gatto.presentati()
cane.presentati()
3. Crea due oggetti dalla stessa classeIstanzia due animali diversi e richiama il loro metodo, come nell'esempio sopra.

Esempio per il punto 4

class Cane(Animale):  # Cane eredita da Animale
    def abbaia(self):
        print(f"{self.nome} dice: Bau!")

fido = Cane("Fido", "cane")
fido.presentati()  # ereditato da Animale
fido.abbaia()       # proprio di Cane
4. Crea una sottoclasse con ereditarietàUna classe "Cane" che eredita da "Animale" e aggiunge un metodo proprio, come nell'esempio sopra.
5. Completa il quiz di verificaScendi in fondo alla guida e rispondi correttamente ad almeno l'80% delle domande.

04Glossario Interattivo

Tocca ogni termine per vederne la definizione.

05Quiz di Verifica

06Esercitazioni Pratiche

Esercizio 1

La classe Libro

Crea una classe "Libro" con attributi titolo, autore, anno. Aggiungi un metodo scheda() che stampa una descrizione completa del libro. Crea 2 oggetti Libro diversi.

⏱ 20 minuti📦 Classe + 2 oggetti testati🖥️ Individuale
Esercizio 2

Ereditarietà: Veicoli

Crea una classe "Veicolo" (marca, velocità_max) e una sottoclasse "Moto" che eredita da Veicolo e aggiunge un metodo impenna() specifico.

⏱ 20 minuti📦 Classe madre + sottoclasse testata🖥️ Individuale
Esercizio 3

Trova l'errore: self dimenticato

Questo codice dà errore: def presentati(): print(self.nome) dentro una classe, senza self tra i parametri del metodo. Spiega perché non funziona e correggilo.

⏱ 10 minuti📦 Spiegazione scritta + codice corretto🖥️ Individuale o in coppia

🎓 Attestato di completamento

Completa tutti i 5 passaggi della checklist per sbloccare il tuo attestato in PDF.

0 / 5 passaggi completati