classi-python.pdf
Document Details
Uploaded by InsightfulTimpani
Full Transcript
Prima di immergerci nella OOP, ripassiamo alcuni concetti base di Python: Variabili: Sono come contenitori che memorizzano dati, come numeri, testo o liste. Python nome = "Mario" eta = 30 Tipi di dato: Python ha diversi tipi di dato, inclusi interi (int), numeri in virgola mobile...
Prima di immergerci nella OOP, ripassiamo alcuni concetti base di Python: Variabili: Sono come contenitori che memorizzano dati, come numeri, testo o liste. Python nome = "Mario" eta = 30 Tipi di dato: Python ha diversi tipi di dato, inclusi interi (int), numeri in virgola mobile (float), stringhe (str), booleani (bool), liste (list), tuple (tuple), dizionari (dict). Operatori: Servono per eseguire operazioni sui dati, come addizione (+), sottrazione (-), moltiplicazione (*), divisione (/), confronto (==, !=, >, = 18: print("Sei maggiorenne") else: print("Sei minorenne") Funzioni: Blocchi di codice riutilizzabili che svolgono un compito specifico. Python def saluta(nome): print("Ciao", nome + "!") saluta("Mario") # Output: Ciao Mario! Introduzione alla Programmazione Orientata agli Oggetti (OOP) La OOP è un paradigma di programmazione che ci permette di modellare il mondo reale in termini di oggetti. Un oggetto è un'entità che ha attributi (caratteristiche) e metodi (azioni). Concetti chiave della OOP: Classe: Un modello o una "fabbrica" per creare oggetti. Definisce gli attributi e i metodi che gli oggetti di quella classe avranno. Oggetto: Un'istanza di una classe. È un'entità concreta creata a partire dal modello della classe. Incapsulamento: Gli attributi e i metodi sono racchiusi all'interno dell'oggetto, proteggendoli da accessi non autorizzati. Ereditarietà: Una classe può ereditare attributi e metodi da una classe "genitore", permettendo di riutilizzare il codice e creare gerarchie di classi. Polimorfismo: La capacità di oggetti di classi diverse di rispondere allo stesso metodo in modo diverso. Esempio: Classe "Cane" Python class Cane: def __init__(self, nome, razza): self.nome = nome self.razza = razza def abbaia(self): print("Woof!") def info(self): print(f"Nome: {self.nome}, Razza: {self.razza}") # Creazione di oggetti (istanze) della classe Cane fido = Cane("Fido", "Pastore Tedesco") pluto = Cane("Pluto", "Golden Retriever") # Accesso agli attributi e chiamata dei metodi print(fido.nome) # Output: Fido fido.abbaia() # Output: Woof! pluto.info() # Output: Nome: Pluto, Razza: Golden Retriever Spiegazione del codice: class Cane: Definisce la classe Cane. __init__(self, nome, razza): Questo è il costruttore della classe. Viene chiamato automaticamente quando si crea un nuovo oggetto Cane. Inizializza gli attributi nome e razza dell'oggetto con i valori passati come argomenti. self si riferisce all'oggetto stesso. abbaia(self): Un metodo che stampa "Woof!". info(self): Un metodo che stampa le informazioni del cane. fido = Cane("Fido", "Pastore Tedesco"): Crea un oggetto fido della classe Cane. pluto = Cane("Pluto", "Golden Retriever"): Crea un altro oggetto pluto. Esercizi: 1. Classe "Studente": Crea una classe Studente con attributi nome, cognome e voto_medio. Aggiungi metodi per stampa_info() e promuovi() (che stampa "Promosso" se voto_medio >= 6, altrimenti "Bocciato"). 2. Classe "Conto Corrente": Crea una classe ContoCorrente con attributi titolare e saldo. Aggiungi metodi per deposita(importo), preleva(importo) e stampa_saldo(). 3. Ereditarietà: Crea una classe Animale con attributi nome e eta e un metodo verso(). Crea poi due classi Gatto e Cane che ereditano da Animale e implementano il metodo verso() in modo specifico ("Miao" per il gatto, "Woof" per il cane). Programmazione Orientata agli Oggetti (OOP) in dettaglio La OOP è un paradigma di programmazione che organizza il codice in "oggetti", che combinano dati (attributi) e azioni (metodi). Pensate agli oggetti come a entità autonome con caratteristiche e comportamenti specifici. Classi e Oggetti Classe: Un progetto o una "fabbrica" per creare oggetti. Definisce la struttura generale degli oggetti, specificando i loro attributi e metodi. Oggetto: Un'istanza concreta di una classe. Ogni oggetto creato da una classe possiede le caratteristiche e i comportamenti definiti dalla classe, ma con i propri valori specifici. Metodi I metodi sono funzioni definite all'interno di una classe che operano sugli attributi dell'oggetto. Consentono agli oggetti di "fare" qualcosa o di eseguire azioni. Metodi di istanza: Sono i metodi più comuni. Agiscono su un'istanza specifica di una classe (un oggetto). Il primo parametro di un metodo di istanza è sempre self, che rappresenta l'oggetto stesso. Python class Cane: def __init__(self, nome, razza): self.nome = nome self.razza = razza def abbaia(self): # Metodo di istanza print("Woof!") fido = Cane("Fido", "Pastore Tedesco") fido.abbaia() # Output: Woof! Costruttori (__init__) Il costruttore è un metodo speciale che viene chiamato automaticamente quando si crea un nuovo oggetto. Si usa per inizializzare gli attributi dell'oggetto. In Python, il costruttore si chiama __init__. Python class Cane: def __init__(self, nome, razza): # Costruttore self.nome = nome self.razza = razza fido = Cane("Fido", "Pastore Tedesco") # __init__ viene chiamato qui Metodi di Classe (@classmethod) I metodi di classe sono metodi che agiscono sulla classe stessa, non su una specifica istanza. Sono definiti usando il decoratore @classmethod. Il primo parametro di un metodo di classe è cls, che rappresenta la classe. Python class Cane: razza = "Canide" # Attributo di classe def __init__(self, nome): self.nome = nome @classmethod def info_razza(cls): # Metodo di classe print(f"Questa è la classe {cls.__name__}, razza: {cls.razza}") Cane.info_razza() # Output: Questa è la classe Cane, razza: Canide Esempio Completo Python class Auto: def __init__(self, marca, modello, colore): self.marca = marca self.modello = modello self.colore = colore self.velocita = 0 def accelera(self, incremento): self.velocita += incremento def frena(self, decremento): self.velocita -= decremento @classmethod def crea_auto_rossa(cls, marca, modello): return cls(marca, modello, "rosso") # Creazione di oggetti mia_auto = Auto("Fiat", "Panda", "blu") tua_auto = Auto.crea_auto_rossa("Ferrari", "Testarossa") # Usando il metodo di classe # Accesso agli attributi e chiamata dei metodi print(mia_auto.colore) # Output: blu mia_auto.accelera(30) print(mia_auto.velocita) # Output: 30 tua_auto.frena(10) # Anche se è ferma, la velocità diminuirà print(tua_auto.velocita) # Output: -10 Esercizi 1. Classe "Rettangolo": Crea una classe Rettangolo con attributi base e altezza. Aggiungi metodi per calcolare l'area (calcola_area) e il perimetro (calcola_perimetro). 2. Classe "Libro": Crea una classe Libro con attributi titolo, autore e anno_pubblicazione. Aggiungi un metodo descrizione() che stampa le informazioni del libro. Crea un metodo di classe crea_libro_antico(titolo, autore) che crea un libro con anno_pubblicazione impostato a 1800.