Cos’è la programmazione orientata agli oggetti (OOP)

Cos’è la programmazione orientata agli oggetti (OOP)

Ogni programma di un linguaggio a oggetti (chiamata anche programmazione orientata agli oggetti) è strutturato intorno a un elemento del dominio applicativo. Sia il codice sia i dati relativi a un particolare oggetto sono raggruppati attorno a un unico elemento di programma, che definisce compiutamente l’oggetto stesso. Il paradigma di programmazione orientato agli oggetti (OOP) si basa principalmente su una struttura fondamentale: la classe. Gli oggetti vengono definiti a partire da queste strutture, le classi, che possono essere associati in gerarchie classe/superclasse (classe/sottoclasse), in cui ogni sottoclasse eredita dalla superclasse comportamento e/o struttura. Ogni oggetto è poi un’istanza di una classe, e la sua struttura e il suo comportamento sono determinati dalla gerarchia di cui la sua classe fa parte. I meccanismi di ereditarietà possono mutare (e in generale mutano) da un linguaggio all’altro. Vi sono poi una serie di caratteristiche tipiche del modello a oggetti, che ne fanno un formidabile strumento per lo sviluppo del software. Innanzitutto, la capacità di costruire astrazioni di dato, nascondendo la rappresentazione dei dati nonché l’implementazione delle operazioni che su di essi possono essere compiute (information hiding). A tali astrazioni può essere associato un sistema di tipi forte, che impone vincoli statici all’applicabilità delle operazioni. L’identità degli oggetti, poi, può persistere da un’applicazione all’altra, indipendentemente dai valori o dalle chiavi utilizzate per accedere agli oggetti stessi.

Cos'è la programmazione orientata agli oggetti (OOP)

Più in generale, le caratteristiche di un linguaggio orientato agli oggetti possono essere definite in un ideale spazio multidimensionale, le cui dimensioni sono costituite dalla capacità del singolo linguaggio di definire e realizzare concetti come oggetto, classe, tipo, delegazione, e astrazione. La letteratura definisce tali concetti, e ne mostra l’ortogonalità e consistenza globale, ossia l’indipendenza reciproca e la possibilità di coesistenza in un unico linguaggio. Altre categorie ortogonali sono concorrenza e persistenza.

In breve, un oggetto è caratterizzato da un insieme di operazioni, e da uno stato, che tiene traccia degli effetti delle operazioni. Lo stato è dunque ciò che distingue un oggetto da una funzione: la sua reazione a un’operazione dipende dalla successione dei messaggi che l’oggetto scambia con gli altri oggetti.
Ogni linguaggio che consenta di definire entità computazionali indipendenti di questo tipo è un linguaggio a oggetti. Il tipo è ciò caratterizza ogni espressione del linguaggio che denoti un oggetto. I concetti di classe e di sistema di tipi forte possono essere visti come particolari specializzazioni del concetto di tipo.

D’altra parte, il meccanismo di delegazione è quello che consente a ogni oggetto di demandare la responsabilità di effettuare un’operazione o restituire un valore ad altri oggetti di una gerarchia (sia essa fissa o mutabile, sia essa determinata staticamente o dinamicamente) cui l’oggetto appartiene. Si vede come tale nozione comprenda in sè quella di ereditarietà come caso particolare, e che tutte le molteplici varietà di meccanismi che possono realizzare le diverse forme di ereditarietà implementate da vari linguaggi sono tutti riconducibili a diverse forme di delegazione. L’astrazione, infine, è il meccanismo che consente la specifica delle interfacce. L’astrazione di dato è il principale uso del meccanismo di astrazione in un linguaggio a oggetti.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *