
La composizione di oggetti in Python
Oggi parliamo di composizione di oggetti nel linguaggio Python.
Cos'è la composizione? La composizione è un concetto fondamentale nella programmazione orientata agli oggetti (OOP), che ti permette di costruire oggetti complessi combinando oggetti più semplici. Questo concetto si applica perfettamente a Python, dove gli attributi di un oggetto possono essere riferimenti ad altri oggetti.
Si basa sull'idea di creare un oggetto composto che utilizza oggetti di altre classi per fornire la funzionalità richiesta.
Nella composizione ogni classe ha un singolo scopo e il codice è più facile da comprendere.
In questo modo puoi costruire una struttura dati complessa utilizzando delle componenti più semplici e riutilizzabili.
Quali sono i vantaggi? Puoi riutilizzare una classe per costruire altre classi, senza dover ripetere più volte lo stesso codice. In altre parole, puoi estendere una classe aggiungendo nuovi metodi o attributi senza modificare la classe.
Ti faccio un esempio pratico.
Immagina di dover studiare delle figure geometriche (es. cerchio, quadrato, rettangolo, ecc.).
Prima di creare le classi delle figure, ti conviene creare una classe base 'Punto' dedicata a rappresentare un generico punto del piano.
class Punto:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"({self.x}, {self.y})"
Questa classe è molto semplice e rappresenta un punto (x;y) con coordinate x e y.
Ora crea una classe `Cerchio` che utilizza un oggetto `Punto` per indicare il centro del cerchio.
class Cerchio:
def __init__(self, centro, raggio):
self.centro = centro
self.raggio = raggio
def area(self):
import math
return math.pi * (self.raggio ** 2)
def circonferenza(self):
import math
return 2 * math.pi * self.raggio
def __str__(self):
return f"Cerchio con centro in {self.centro} e raggio {self.raggio}"
In questa classe `centro` è un oggetto `Punto` che rappresenta il centro del cerchio mentre `raggio` è un numero.
La classe è composta da tre metodi che svolgono dei calcoli appositi:
- Il metodo `area` calcola l'area del cerchio.
- Il metodo `circonferenza` calcola la circonferenza del cerchio.
- Il metodo `__str__` fornisce una rappresentazione leggibile del cerchio.
Ora metti tutto insieme per vedere come funziona.
Crea l'istanza della classe 'Punto' indicando le coordinate (3,4) del piano ossia x=3 e y=4.
centro = Punto(3, 4)
Poi crea un'istanza della classe 'Cerchio' usando il punto come centro e un raggio di 5
cerchio = Cerchio(centro, 5)
Il nuovo oggetto 'cerchio' è un composto dall'oggetto 'centro' e da un numero che indica il raggio.
A questo punto puoi richiamare i metodi e ottenere tutte le informazioni che vuoi sulla figura geometrica.
Ad esempio, puoi visualizzare il contenuto del cerchio.
print(cerchio)
Cerchio con centro in (3, 4) e raggio 5
Puoi calcolare l'area del cerchio
print(cerchio.area())
78.53981633974483
Puoi anche calcolare la circonferenza
print(cerchio.circonferenza())
31.41592653589793
In questo esempio, hai visto come utilizzare la composizione per creare un cerchio partendo da un semplice punto nel piano cartesiano.
Questo approccio rende il tuo codice modulare e più facile da comprendere e manutenere.
Nota che puoi usare lo stesso oggetto 'Punto' anche per definire le classi di altre figure geometriche, come quella di un rettangolo, di un quadrato, ecc. La riutilizzabilità è uno dei principali vantaggi della composizione di oggetti nel codice Python.