lettura facile

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.




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin