Programmazione a oggetti: che cos'è e quali sono i vantaggi

Photo by Olia Danilevich / Pexeles 

La programmazione a oggetti, o Object Oriented Programming (OOP) è una tecnica di programmazione molto diffusa nello sviluppo software. A differenza di altre, non è legata a un linguaggio specifico di programmazione, e per questo non servono competenze specifiche per comprenderla. I suoi principi fondamentali sono utilizzabili sia quando si parla di applicativi WEB, che per i software più complessi come i giochi 3D, e proprio per questo è così consolidata nel mondo tecnologico. Cerchiamo di capire, quindi, che cos’è e quali sono i suoi principi fondamentali.

Che cos’è la programmazione a oggetti

Formulata nei primi anni ’60, la programmazione a oggetti è stata sviluppata grazie al SIMULA I e SIMULA 67, due linguaggi creati da Ole-Johan Dahl e Kristen Nygaard con il supporto del Norwegian Computing Center.

Sostanzialmente, l’OOP è un paradigma di programmazione basato sul concetto di oggetti e specifiche strutture di dati all’interno di una classe. Gli oggetti in questione possono avere caratteristiche individuali (campi o attributi), anche all’interno di una struttura condivisa con altri oggetti della stessa classe. Inoltre, gli oggetti possono richiamare funzioni e procedure specifiche, chiamate metodi. Più in linea generale, quindi, si può dire che la programmazione orientata a oggetti favorisce alcune funzioni chiave come la prototipizzazione, la rifattorizzazione e la manutenzione del codice, poiché i singoli oggetti possono essere modificati senza influire su altri aspetti dell’applicazione. Tra i più noti linguaggi di programmazione a oggetti ci sono sicuramente C++, Java, Delphi, C# e il Visual Basic.NET.

La OOP, quindi, ha l’intento di raggruppare in un’unica entità, la classe, sia le strutture dei dati che le procedure operanti su di esse al fine di creare un oggetto software dotati di proprietà (dati) e metodi (procedure) che agiscono sui dati dell’oggetto. La modularizzazione del programma si concretizza progettando e realizzando il codice sotto forma di classi che interagiscono tra loro. La programmazione a oggetti, perciò, mira alla realizzazione di un programma ideale completamente costituito da oggetti software che interagiscono tra loro attraverso lo scambio di messaggi. Proprio per questo motivo è adatta a contesti in cui si possono definire delle relazioni di interdipendenza tra i concetti da modellare. Un ambito che più di altri riesce a sfruttare i vantaggi della programmazione ad oggetti è quello delle interfacce grafiche.

Le classi e gli oggetti

La classe può essere definita come un tipo di dato astratto in grado di individuare qualcosa. Si può dire che sia l’astrazione di un concetto, implementata all’interno di un software, che informa il compilatore in merito al modo in cui deve essere creato l’oggetto. Una classe, quindi, descrive un gruppo di oggetti con caratteristiche e comportamenti simili, ed è costituita da attributi e metodi. Gli attributi sono i campi che specificano le caratteristiche o le proprietà che tutti gli oggetti devono possedere, le cui realizzazioni in un certo momento determinano lo stato del singolo oggetto della classe. I metodi, invece, sono le funzioni che specificano le azioni o i comportamenti ammissibili che un oggetto della classe è in grado di compiere. Sono in grado di comunicare all’estero lo stato dell’oggetto o, eventualmente, di modificarlo operando sugli attributi.

Un oggetto, poi, è un’istanza della classe che possiede tutti gli attributi in essa definiti. Gli attributi assumono valori che possono modificarsi nel corse dell’esecuzione del programma alla pari di qualsiasi variabile. L’oggetto, quindi, occupa memoria, e i suoi dati sono allocati e organizzati in essa come stabilito dalla classe di appartenenza. Ogni oggetto di una classe viene creato invocando uno specifico metodo che si chiama costruttore, e che possiede lo stesso nome della classe. In alcuni linguaggi, come il VB.NET, il costruttore è definito dall’operatore New, e nel momento in cui viene eseguito alloca la memoria necessaria a contenere l’oggetto e ne inizializza gli attributi.

I vantaggi della programmazione a oggetti

I vantaggi più significativi della OOP sono principalmente cinque: astrazione, incapsulamento, ereditarietà, polimorfismo e riuso del codice.

Per astrazione si intende la semplificazione di un qualcosa di complesso: il programmatore può permettersi di utilizzare l’interfaccia fornita dalla classe senza doversi preoccupare della complessità nascosta dietro a essa.

L’incapsulamento, invece, raggruppa i dati e le funzioni che connotano la classe. Viene semplificato, dunque, il concetto di programmazione, poiché nella programmazione procedurale i dati e le funzioni sono separati tra loro e sussistono separazioni anche tra le funzioni stesse. Il legame tra dati e funzioni esiste, ma solo all’interno della testa del programmatore. Per cui tanto maggiore è la complessità del programma, tanto più risulta difficile comprendere quali dati vengono utilizzati da quali funzioni, quale sia la correlazione tra le funzioni e come collaborano tra loro. In questo senso, la OOP aiuta semplificando il tutto.

L’ereditarietà, poi, consente di creare legami di parentela tra le varie classi. Grazie a essa, ci si può limitare a scrivere nelle diverse classi i comportamenti specifici delle classi stesse. Le caratteristiche comuni ad entrambe, invece, saranno descritte dalla classe predominante, e saranno ereditate dalle altre.

C’è poi il polimorfismo, che è la capacità per un oggetto di comportarsi in modo diverso in base alle circostanze e, quindi, di assumere più forme.

Infine, la possibilità di riutilizzare il codice: tutte queste caratteristiche, infatti, fanno sì che il codice sia facilmente usufruibile per altri progetti. Invece di avere tante funzioni e variabili sparse o distaccate all’interno di un file sorgente, quindi, si avranno degli oggetti autonomi e autosufficienti, che non dipendono da uno specifico progetto e dunque possono essere riutilizzati tutte le volte che si vuole.

Saveria Spezzano

Saveria Spezzano

Product Marketing Manager @Develhope