Il modello di database orientato all’oggetto prevede l’archiviazione dei dati come oggetti. La modulazione degli oggetti rassomiglia alla programmazione orientata agli oggetti. Un oggetto definisce un’entità e contiene:
- Le proprietà necessarie a descrivere l’entità (attributi)
- Il rinvio ad altri oggetti (relazione)
- Le funzioni che consentono l’accesso ai dati archiviati (metodi)
In questo modo un oggetto è una combinazione di dati; nei quali viene definita anche l’interfaccia tramite la quale si accede a questi dati. Gli oggetti sono contati tra i tipi di dati astratti.
Il sistema di gestione del database orientato agli oggetti (ODBMS) assegna un ID ad ogni oggetto, consentendo di identificare univocamente l’oggetto e di interrogarlo attraverso formule. Questo ID dell’oggetto è indipendente dallo stato, cioè non accoppiato ai valori dell’oggetto. In questo modo è possibile dare a due oggetti con gli stessi dati (cioè con lo stesso stato) due ID diversi. Il modello di database orientato agli oggetti è chiaramente diverso dal modello relazionale in cui ciascuna tupla può essere identificata dai suoi dati (ad esempio, da una chiave primaria).
Un’altra caratteristica del modello di database orientato agli oggetti è l’incapsulamento dei dati. È possibile accedere ai dati memorizzati solo tramite i metodi precedentemente definiti. I dati incapsulati nell’oggetto sono perciò protetti contro le modifiche tramite interfacce non definite.
Le strutture del database sono definite nel modello di database orientato agli oggetti tramite un sistema di classi gerarchico. Una classe nella programmazione orientata agli oggetti è un insieme di oggetti che hanno le stesse caratteristiche. Ogni classe di oggetti è basata su una definizione di classe. Questo schema specifica gli attributi e i metodi di tutti gli oggetti della classe e così determina in che modo vengono generati e modificati.
Gli utenti interagiscono con l’ODMBS con un linguaggio di query basato su SQL per i database degli oggetti: l’Object Query Language (OQL); il risultato di una query OQL non e un set di risultati come con SQL, ma un elenco di oggetti che soddisfano le condizioni dello statement OQL.
Implementazioni note del modello di database orientato agli oggetti sono Realm, ZODB e Perst.
I database orientati agli oggetti sono stati sviluppati come soluzione a un problema nello sviluppo di applicazioni indicato come object-relational impedence mismatch (in italiano si può tradurre come “incompatibilità oggetto relazione” che fondamentalmente implica l’incompatibilità tra un sistema di gestione del database relazionale e una o piò applicazioni scritte in un linguaggio di programmazione orientato all’oggetto).
Se gli oggetti scritti in un linguaggio di programmazione orientato all’oggetto (come ad esempio C#, C++ o Java) vengono salvati in un database relazionale, infatti, ciò porta immancabilmente a incompatibilità che affondano nelle diversità di base tra i due paradigmi di programmazione:
- i database relazionali non supportano i concetti orientati all’oggetto, come classi ed ereditarietà;
- nel modello di database relazionale non si può effettuare l’identificazione dell’oggetto indipendentemente dallo stato;
- nel modello di database relazionale non è disponibile il meccanismo di protezione dell’incapsulamento dei dati.
Un approccio per evitare i menzionati problemi di incompatibilità è quello di evitare i database relazionali e di collocare la programmazione di applicazioni orientate agli oggetti su un database di oggetti; un approccio che ha però l’inevitabile svantaggio che i dati incapsulati negli oggetti non sono disponibili indipendentemente dall’applicazione associata. A ciò si aggiunge la bassa distribuzione dei database a oggetto: la maggior parte degli strumenti e delle interfacce per l’analisi di dati sono ancora basate su database relazionali e non supportano il modello orientato agli oggetti.
Gli sviluppatori di applicazioni che non vogliono rinunciare ai vantaggi dell’archiviazione dei dati relazionali hanno la possibilità di compensare le incompatibilità utilizzando il mapper relazionale a oggetti (O/R mapper). Le funzionalità per l’object-relational mapping (ORM, in italiano mappatura relazionale a oggetti) sono implementate tramite le librerie, che creano un livello un livello di astrazione tra l’applicazione orientata agli oggetti e i dati memorizzati nelle tabelle.
Molti produttori di sistemi di database relazionali forniscono i propri prodotti con funzionalità che compensano anche le incompatibilità di programmazione orientata agli oggetti. I sistemi di database di questo tipo sono chiamati “relazionali a oggetto”.
I database orientati all’oggetto trasferiscono i principi di base dell’orientamento agli oggetti alle tecnologie di database e sono quindi particolarmente adatti per la programmazione di applicazioni orientate agli oggetti. I sistemi di database corrispondenti, tuttavia, sono scarsi e in alcuni casi non ancora pronti per il mercato.