Introduzione al Progetto
In questa lezione esploreremo la Programmazione Orientata agli Oggetti (OOP), uno dei paradigmi più importanti nella programmazione moderna. Impareremo a creare classi e oggetti, a utilizzare attributi e metodi e a lavorare con concetti fondamentali come ereditarietà e polimorfismo.
Sommario
Soluzioni esercizi lezione 06
#esercizio 1
try:
a = int(input("Inserisci il primo numero: "))
b = int(input("Inserisci il secondo numero: "))
print("Risultato:", a / b)
except ZeroDivisionError:
print("Errore: Divisione per zero!")
except ValueError:
print("Errore: Inserisci solo numeri!")
#esercizio 2
# Scrittura
with open("nomi.txt", "w") as file:
file.write("Alice\nLuca\nMarco\nAnna\n")
# Lettura
with open("nomi.txt", "r") as file:
for riga in file:
print(riga.strip())
#esercizio 3
with open("testo.txt", "r") as file:
contenuto = file.read()
parole = contenuto.split()
print("Numero di parole:", len(parole))
#esercizio 4
try:
numero = int(input("Inserisci un numero: "))
risultato = 10 / numero
except Exception as e:
with open("log_errori.txt", "a") as log:
log.write(f"Errore: {str(e)}\n")
print("Si è verificato un errore. Controlla il file di log.")
Obiettivi della lezione 07
- Comprendere il concetto di programmazione orientata agli oggetti.
- Creare e utilizzare classi e oggetti in Python.
- Gestire attributi e metodi di una classe.
- Apprendere i concetti di incapsulamento, ereditarietà e polimorfismo.
Cosa è la programmazione a oggetti?
La OOP è un paradigma di programmazione che organizza il codice attorno a oggetti e classi. Ogni oggetto rappresenta un’entità del mondo reale (ad esempio, una persona, un’auto, un prodotto), con:
- Attributi: Le proprietà dell’oggetto (es. nome, età, colore).
- Metodi: Le azioni o i comportamenti dell’oggetto (es. camminare, accelerare).
I principi fondamentali della OOP sono:
- Incapsulamento: Racchiudere dati e metodi all’interno di un oggetto.
- Ereditarietà: Permettere a una classe di derivare da un’altra e di ereditarne i comportamenti.
- Polimorfismo: Definire metodi con lo stesso nome ma comportamenti diversi.
- Astrazione: Nascondere i dettagli complessi e fornire un’interfaccia semplice.
Classi e Oggetti
Definizione di una classe
#Una classe è uno schema (o blueprint) per creare oggetti.
class NomeClasse:
# Metodo speciale per inizializzare l'oggetto
def __init__(self, attributi):
# Inizializzazione degli attributi
self.attributo = valore
# Metodi della classe
def metodo(self):
# Azione dell'oggetto
pass
Creazione di un oggetto
#Un oggetto è un’istanza della classe.
class Persona:
def __init__(self, nome, eta):
self.nome = nome # Attributo nome
self.eta = eta # Attributo età
def saluta(self):
print(f"Ciao, mi chiamo {self.nome} e ho {self.eta} anni.")
# Creazione di un oggetto
persona1 = Persona("Alice", 30)
persona1.saluta() # Output: Ciao, mi chiamo Alice e ho 30 anni.
Attributi e Metodi
Attributi
Gli attributi rappresentano le proprietà di un oggetto.
- Attributi di istanza: Definiti all’interno di
__init__e specifici per ogni oggetto. - Attributi di classe: Condivisi da tutti gli oggetti della classe.
class Auto:
# Attributo di classe
tipo = "Veicolo"
def __init__(self, marca, modello):
# Attributi di istanza
self.marca = marca
self.modello = modello
print(Auto.tipo) # Output: Veicolo
auto1 = Auto("Toyota", "Yaris")
print(auto1.marca) # Output: Toyota
Metodi
I metodi sono funzioni definite all’interno di una classe e descrivono il comportamento degli oggetti.
- Metodo speciale
__init__: Chiamato automaticamente quando si crea un oggetto. - Metodi personalizzati: Definiti dall’utente.
class Rettangolo:
def __init__(self, base, altezza):
self.base = base
self.altezza = altezza
def area(self):
return self.base * self.altezza
rettangolo = Rettangolo(5, 10)
print(rettangolo.area()) # Output: 50
Incapsulamento
L’incapsulamento consente di nascondere i dettagli interni di un oggetto. In Python, puoi indicare che un attributo o metodo è privato utilizzando un doppio underscore (__).
class ContoBancario:
def __init__(self, saldo):
self.__saldo = saldo # Attributo privato
def deposita(self, importo):
self.__saldo += importo
def mostra_saldo(self):
print(f"Saldo: {self.__saldo}")
conto = ContoBancario(100)
conto.deposita(50)
conto.mostra_saldo() # Output: Saldo: 150
Ereditarietà
L’ereditarietà permette a una classe di derivare da un’altra classe.
class Animale:
def __init__(self, nome):
self.nome = nome
def saluta(self):
print(f"{self.nome} fa un saluto.")
class Cane(Animale): # Classe Cane eredita da Animale
def abbaia(self):
print(f"{self.nome} dice: Bau!")
cane = Cane("Fido")
cane.saluta() # Output: Fido fa un saluto.
cane.abbaia() # Output: Fido dice: Bau!
Polimorfismo
Il polimorfismo consente di usare metodi con lo stesso nome ma comportamenti diversi, basati sulla classe a cui appartengono.
class Animale:
def fa_suono(self):
print("L'animale fa un suono.")
class Gatto(Animale):
def fa_suono(self):
print("Il gatto dice: Miao!")
class Cane(Animale):
def fa_suono(self):
print("Il cane dice: Bau!")
animali = [Gatto(), Cane(), Animale()]
for animale in animali:
animale.fa_suono()
# Output:
# Il gatto dice: Miao!
# Il cane dice: Bau!
# L'animale fa un suono.
Esercizi pratici
- Esercizio 1: Calcolo dell’area di un rettangolo
Crea una classeRettangolocon attributibaseealtezzae un metodo per calcolare l’area. - Esercizio 2: Classe ereditaria
Crea una classe baseVeicolocon un metodomuoviti()e una classe derivataAutoche aggiunge un metodoaccelerazione(). - Esercizio 3: Conto bancario con incapsulamento
Crea una classeContoBancariocon un attributo privato per il saldo, metodi per depositare e prelevare denaro e un metodo per mostrare il saldo.
Conclusioni e anticipazioni
In questa lezione abbiamo:
- Capito il concetto di programmazione orientata agli oggetti.
- Imparato a creare e utilizzare classi e oggetti.
- Esplorato concetti fondamentali come incapsulamento, ereditarietà e polimorfismo.
Nella prossima lezione inizieremo a esplorare librerie per l’analisi dei dati come NumPy e Pandas, entrando nel mondo dell’analisi strutturata dei dati.
Homepage del Corso Introduttivo
Sei curioso di scoprire il mondo della programmazione?
Con il mio corso gratuito di Python potrai infatti scoprire gli aspetti del linguaggio.
Ogni lezione è spiegata in modo chiaro e pratico.
Inoltre, grazie a esercizi e materiali di supporto, potrai quindi mettere subito in pratica ciò che impari.
