Python: Basi di programmazione ad oggetti

Cerca nel sito

Altri risultati..

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

Cerca nelle Categorie

Python- le variabili

Basi di programmazione ad oggetti

Python supporta molti paradigmi di programamazione, che caratterizzano lo stile del codice. Il paradigma basato sulle funzioni è conosciuto come Programmazione Procedurale (Procedural Programming) (le funzioni vengono anche chiamate procedure). Un’altro paradigma di programmazione molto utilizzato è la Programmazione Orientata agli Oggetti (Object Oriented Programming – OOP).
L’elemento centrale della programmazione ad oggetti sono (sorpresa sorpresa) gli oggetti, che ci permettono di racchiudere funzioni e variabili all’interno di un’unica entità e rendono il codice maggiormente riutilizzabile e più semplice da mantenere.

Per creare un oggetto dobbiamo definire una classe che lo rappresenterà, le funzioni definite all’interno della classe sono chiamati metodi della classe.
Ad esempio, creiamo una classe che rappresenterà un triangolo, i cui metodi ci permettono di calcolarne area e perimetro.

class Triangle:
  
    def area(self, b, h):
        return b*h/2.
  
    def perimeter(self, a, b, c):
        return a+b+c
  
# istanziamo la classe (creiamo l'oggetto)
triangle = Triangle()

print("Area del triangolo: %2.f" % triangle.area(3.,4.))
print("Perimetro del triangolo: %2.f" % triangle.perimeter(5.,3.,5.))

Come puoi vedere ogni metodo della classe ha come primo parametro self, questo ci permette di identificare attributi e metodi all’interno della classe stessa. Alla riga 10 creiamo l’oggetto, che a livello concettuale è un’istanza della classe triangolo. Per calcolare area e perimetro dobbiamo passare di volta in volta le informazioni sulle misure di base, altezze e lati del triangolo, che funziona ma è concettualmente sbagliato, un’oggetto deve contenere le proprie informazioni al suo interno, in apposite variabili chiamate attributi.
Possiamo definire gli attributi della classe all’interno di un metodo costruttore che in Python è l‘init.

Class Triangle:
  
  
    def __init__(self, a, b, c, h):
    
        # Questa istruzione è equivalente a quella sotto
        #self.a, self.b, self.c, self.h = a, b, c ,h

        self.a = a
        self.b = b
        self.c = c
        self.h = h

    
    def area(self):
            return self.b*self.h/2
    
    
    def perimeter(self):
        return self.a+self.b+self.c
  
triangle = Triangle(5.,3.,5.,4.)
print("Area del triangolo: %2.f" % triangle.area())
print("Perimetro del triangolo: %2.f" % triangle.perimeter())

Ogni metodo può accedere agli attributi della classe utilizzando self, lo stesso discorso vale per l’utilizzo di metodi all’interno di altri metodi.

class Triangle:
  
  
    def __init__(self, a, b, c, h):
        self.a, self.b, self.c, self.h = a, b, c ,h

    
    def area(self):
        return float(self.b)*float(self.h)/2.
  
  
    def perimeter(self):
        return self.a+self.b+self.c
  
  
    def print_info(self):
        print("Area del triangolo: %2.f" % self.area())
        print("Perimetro del triangolo: %2.f" % self.perimeter())


triangle = Triangle(5.,3.,5.,4.)
triangle.print_info()

Le classi possono essere organizzate in moduli, cioè file python esterni a quello sulla quale stiamo lavorando (parleremo di questo argomento sotto), in ogni caso possiamo vedere metodi e attributi di una classe usando la funzione help.

class Triangle:
  
  
    def __init__(self, a, b, c, h):
        self.a, self.b, self.c, self.h = a, b, c ,h

    
    def area(self):
        return float(self.b)*float(self.h)/2.
  
  
    def perimeter(self):
        return self.a+self.b+self.c
  
  
    def print_info(self):
        print("Area del triangolo: %2.f" % self.area())
        print("Perimetro del triangolo: %2.f" % self.perimeter())


triangle = Triangle(5.,3.,5.,4.)
help(triangle)

Una classe può contenere molti metodi differenti, possiamo utilizzare le Docstrings per documentare a cosa serve una classe e cosa fanno ognuno dei suoi metodi:

class Triangle:
  
  
    """
    Questa classe rappresenta un triangolo
    """
    
    def __init__(self, a, b, c, h):
        self.a, self.b, self.c, self.h = a, b, c ,h

    
    def area(self):
        
        """
        Calcolo dell'area del triangolo
        """
        
        return float(self.b)*float(self.h)/2.
  
  
    def perimeter(self):
        
        """
        Calcolo del perimetro del triangolo
        """
        
        return self.a+self.b+self.c
  
  
    def print_info(self):
        
        """
        Stampiamo area e perimetro del triangolo
        """
        
        print("Area del triangolo: %2.f" % self.area())
        print("Perimetro del triangolo: %2.f" % self.perimeter())


triangle = Triangle(5.,3.,5.,4.)
help(triangle)

I moduli

I moduli ci permettono di organizzare il codice dei nostri programmi in più file, separandone le parti e garantendo una riutilizzabilità ottimale del codice.
Nella pratica, un modulo non è altro che uno script python (.py), con dentro definite delle classi o delle funzioni, possiamo utilizzare tali classi o tali funzioni all’interno di un’altro script python utilizzando import

NOTA BENE i due script devono trovarsi all’interno della stessa directory.

import script

print(type(script))

script.hello_world()

Come vedi possiamo eseguire una funzione contenuta in un modulo possiamo usare una sintassi del tipo nome_modulo.nome_funzione()
Il discorso è uguale per le classi

import geometry

triangle = geometry.Triangle(3., 5., 4., 6.)
print("L'area del triangolo è %.2f" % triangle.area())

square = geometry.Square(5.)
print("L'area del quadrato è %.2f" % square.area())

rectangle = geometry.Rectangle(5.,4.)
print("L'area del rettangolo è %.2f" % rectangle.area())

Possiamo anche decidere di importare solo le funzioni o classi che ci servono utilizzando una sintessi del tipo from modulo import function se vogliamo importare più classi o funzioni basta separarle da una virgola.

from geometry import Triangle

triangle = Triangle(3., 5., 4., 6.)
print("L'area del triangolo è %.2f" % triangle.area())

from geometry import Square, Rectangle

square = Square(5.)
print("L'area del quadrato è %.2f" % square.area())

rectangle = Rectangle(5.,4.)
print("L'area del rettangolo è %.2f" % rectangle.area())

Python: Gli operatori logici e le funzioni

 

Ti potrebbe interessare anche:  Statistica. Verifica d'ipotesi. Esercizi svolti

(455)

PubblicitàPubblicità