7. Programmazione a Oggetti (OOP)
Obiettivi didattici:
-
Comprendere i concetti di classe e oggetto.
-
Imparare a definire attributi e metodi.
-
Approfondire ereditarietà e polimorfismo.
-
Applicare la OOP per simulazioni pratiche (es. conto bancario).
1. Cos’è la Programmazione a Oggetti (OOP)
La OOP è un paradigma che organizza il codice attorno a oggetti che rappresentano entità reali o concettuali.
Ogni oggetto ha:
-
Attributi: caratteristiche/variabili dello stato dell’oggetto.
-
Metodi: funzioni che descrivono i comportamenti dell’oggetto.
Vantaggi:
-
Incapsulamento (stato e comportamenti insieme).
-
Riutilizzabilità (ereditarietà).
-
Estendibilità e manutenzione più facile.
2. Classi e Oggetti
Definizione di classe: modello o blueprint per creare oggetti.
class Persona:
def __init__(self, nome, eta):
self.nome = nome
self.eta = eta
def saluta(self):
print(f"Ciao, mi chiamo {self.nome} e ho {self.eta} anni.")
Creazione di oggetti:
p1 = Persona("Mario", 30)
p2 = Persona("Luisa", 25)
p1.saluta() # Ciao, mi chiamo Mario e ho 30 anni.
p2.saluta() # Ciao, mi chiamo Luisa e ho 25 anni.
Spiegazione:
-
__init__è il costruttore, viene eseguito alla creazione dell’oggetto. -
selfrappresenta l’oggetto stesso. -
Attributi:
self.nome,self.eta. -
Metodi:
saluta().
3. Attributi e Metodi
-
Attributi di istanza: specifici per ogni oggetto (
self.nome). -
Attributi di classe: condivisi da tutti gli oggetti (
Classe.nome_attr).
Esempio attributo di classe:
class Studente:
universita = "Politecnico" # attributo di classe condiviso
def __init__(self, nome):
self.nome = nome # attributo di istanza
s1 = Studente("Anna")
s2 = Studente("Luca")
print(s1.universita) # Politecnico
print(s2.universita) # Politecnico
4. Ereditarietà
Permette di creare sottoclassi che ereditano attributi e metodi di una superclasse.
class Animale:
def __init__(self, nome):
self.nome = nome
def parla(self):
pass # metodo generico
class Cane(Animale):
def parla(self):
print(f"{self.nome} dice Bau!")
class Gatto(Animale):
def parla(self):
print(f"{self.nome} dice Miao!")
c = Cane("Fido")
g = Gatto("Micio")
c.parla() # Fido dice Bau!
g.parla() # Micio dice Miao!
Polimorfismo: oggetti di classi diverse rispondono allo stesso metodo (parla) in modi differenti.
5. Esercizio pratico: Simulazione di un conto bancario
Obiettivo: creare una classe ContoBancario con deposito, prelievo e saldo.
class ContoBancario:
def __init__(self, titolare, saldo_iniziale=0):
self.titolare = titolare
self.saldo = saldo_iniziale
def deposita(self, importo):
self.saldo += importo
print(f"Depositati {importo}€. Saldo attuale: {self.saldo}€")
def preleva(self, importo):
if importo <= self.saldo:
self.saldo -= importo
print(f"Prelevati {importo}€. Saldo attuale: {self.saldo}€")
else:
print("Fondi insufficienti!")
def mostra_saldo(self):
print(f"Saldo attuale di {self.titolare}: {self.saldo}€")
Utilizzo della classe:
conto1 = ContoBancario("Mario Rossi", 1000)
conto1.deposita(500) # Depositati 500€. Saldo attuale: 1500€
conto1.preleva(200) # Prelevati 200€. Saldo attuale: 1300€
conto1.mostra_saldo() # Saldo attuale di Mario Rossi: 1300€
6. Esercizio avanzato: ereditarietà nel conto bancario
class ContoRisparmio(ContoBancario):
def __init__(self, titolare, saldo_iniziale=0, interesse=0.02):
super().__init__(titolare, saldo_iniziale)
self.interesse = interesse
def applica_interesse(self):
self.saldo += self.saldo * self.interesse
print(f"Interesse applicato. Nuovo saldo: {self.saldo}€")
conto2 = ContoRisparmio("Luisa Bianchi", 1000)
conto2.applica_interesse() # Interesse applicato. Nuovo saldo: 1020.0€
Spiegazione:
-
super().__init__()richiama il costruttore della superclasse. -
La sottoclasse aggiunge nuovi attributi/metodi (
interesse,applica_interesse). -
Polimorfismo: possiamo trattare
ContoBancarioeContoRisparmioin modo simile per operazioni comuni.
7. Test rapido
-
Cos’è un oggetto?
Risposta: istanza di una classe, con attributi e metodi. -
Cos’è un metodo?
Risposta: funzione definita all’interno di una classe che opera sugli attributi dell’oggetto. -
Differenza tra attributo di istanza e di classe?
Risposta: Istanza → specifico per ogni oggetto; Classe → condiviso da tutti gli oggetti. -
Cosa permette l’ereditarietà?
Risposta: creare classi figlie che ereditano attributi e metodi di una classe genitore. -
Cos’è il polimorfismo?
Risposta: oggetti di classi diverse rispondono allo stesso metodo in modi differenti.
8. Attività pratica
-
Creare una classe
Veicolocon metodiacceleraefrena. -
Creare sottoclassi
AutoeBicicletta, implementando metodi specifici. -
Simulare il movimento e stampare lo stato di ogni veicolo.
-
Bonus: aggiungere attributi come
carburanteocambioe gestirli con metodi dedicati.
Nessun commento:
Posta un commento