I RDBMS e gli Oggetti - Boma Software · I DBMS di tipo relazionale puro mostrano sempre più una...
Transcript of I RDBMS e gli Oggetti - Boma Software · I DBMS di tipo relazionale puro mostrano sempre più una...
Capitolo quinto
I RDBMS e gli Oggetti
Capitolo quinto I RDBMS e gli oggetti
5.1.Introduzione
I DBMS di tipo relazionale puro mostrano sempre più una certa limitatezza
rispetto a quelle che sono le nuove esigenze che si fanno avanti nelle
aziende. I DBMS hanno forse risentito troppo dell’influenza delle aree in cui
per primi trovarono applicazione, vale a dire quella gestionale ed
amministrativa. La grande limitatezza deriva dalla possibilità di trattare
solo dati di carattere strutturato come numeri e testi brevi, quindi dati di
carattere semplice. Ma la maggior parte delle informazioni aziendali è in
forma non strutturata. Appunti, rapporti, lettere, ed articoli di giornali sono
solo alcuni esempi che mal si adattano alla struttura di un RDBMS puro. Il
problema, ad esempio, con questo genere di materiali è che gli elementi
d'interesse dono dispersi all’interno dei documenti e i DBMS sono
organizzati solo per dati strutturati in cui i requisiti di ricerca sono stati
definiti in anticipo. Inoltre, altre informazioni di carattere multimediale
stanno acquistando sempre più peso nell’ambito delle aziende, ma non
solo in queste1.
1 “A chi serve un DBMS multimediale ? Probabilmente non sono molte le realtà aziendali che possono avvantaggiarsi dall’avere un database completamente multimediale. Tra queste rientrano le aziende per le quali il prodotto aziendale “è multimediale” o è descritto prevalentemente in modo multimediale. (ad esempio società di distribuzione di audiovisivi, produttori cinematografici, gallerie d’arte e così via). La situazione cambia se invece pensiamo ad un database classico dove alle informazioni tipiche dell’ambiente gestionale (codice, descrizione, importo...) vengono aggiunte informazioni multimediali, come una foto del prodotto, un filmato che ne descrive le caratteristiche peculiari, un audiovisivo che descrive le modalità di impiego e così via.....questo DBMS può essere un valido strumento per il manager. Facciamo un esempio pratico, supponendo d’essere alla guida di una azienda che opera sia a livello nazionale che internazionale e vende prodotti per il mercato finale di livello medio-alto. Uno degli aspetti che potrebbe incidere sui fattori critici di successo sarebbe la possibilità di rilevare una correlazione statistica significativa tra l’andamento dei margini di contribuzione dei vari prodotti nelle varie aree geografiche o nei vari canali distributivi ed alcuni aspetti caratterizzanti, tipo di colore o la forma predominante di quegli articoli. Ad esempio, sarebbe molto interessante scoprire che l’incremento delle vendite sul mercato USA (cultura anglosassone) è fortemente correlato ad articoli, supponiamo, di colore blu e forme squadrate, mentre gli stessi colori e tipologia di forma ha avuto risultati esattamente contrari sul mercato brasiliano (cultura latino-americana), dove, invece, un incremento analogo si è verificato per colori predominanti sul rosso e forme tondeggianti. Ovviamente, questo tipo di correlazione senza la possibilità di elaborare la semantica delle informazioni
235
Capitolo quinto I RDBMS e gli oggetti
Cresce, di conseguenza, l’esigenza di gestire e al meglio i dati di carattere
complesso, siano questi intere tabelle, testi, immagini, filmati ecc.. Questa
esigenza ha spostato l’attenzione sugli oggetti, capaci di inglobare in se sia
dati che operazioni che questi devono svolgere. Avremo, perciò, un oggetto
tabella, uno testo, uno immagine ecc..
Si cerca sempre più da parte dei produttori di DBMS di avvicinare il mondo
degli oggetti a quello relazionale, sia cercando di realizzare un vero e
proprio “matrimonio” fra la struttura del modello relazionale con quello ad
oggetti, sia realizzando delle interfacce ad oggetti in modo tale che il DBMS
relazionale si presenti esternamente come un DBMS ad oggetti. Questa serie
d'interfacce o più propriamente di strumenti, proprio perché utilizzano il
comune concetto d'oggetto, risultano essere alla portata anche di una
utenza non prettamente specializzata. Tale utenza, infatti, può così ricorrere
ad un accesso ai diti aziendali senza l’ausilio di uno specialista.
5.2. Il modello orientato agli oggetti
Il modello orientato agli oggetti2 è stato elaborato nell’ambito delle ricerche
effettuate nel laboratorio di Palo Alto di Xerox in California negli anni ’70 e
nasce innanzi tutto come metodo di programmazione. Il modello orientato
agli oggetti e la progettazione orientate agli oggetti introducono un modo
diverso di realizzare software e di pensare le basi di dati che si avvicina di
multimediali non sarebbe possibile. E se questo semplice esempio lo immaginiamo calato nella realtà di una multinazionale, quale potrebbe essere una azienda produttrice di automobili, articoli di alta moda, si può immaginare quali scenari si possono dischiudere.”M. Del Corto :Interrogazioni non strutturate, Zerouno 1/1995 2 Non esiste un vero e proprio modello ad oggetti come può esserlo tanto per fare un esempio quello relazionale in campo database ma più propriamente si parla di “un insieme di tecniche e di idee che, riunite assieme realizzano un particolare modo di progettare software e basi di tati” S.Polini Introduzione alla programmazione orientata all’oggetto, Mcmicrocomputer 11/90. In modo particolare per quanto riguarda le basi di dati “....le basi di dati hanno bisogno di un opportuno modello dei dati, e, malgrado l’assenza di uno standard, è possibile raggruppare alcuni concetti del paradigma ad oggetti comunemente accettati in un insieme detto core model o modello di base” E.Bertino - L.D. Martino :Sistemi di basi di dati orientate ali oggetti”
236
Capitolo quinto I RDBMS e gli oggetti
più alla realtà come la percepisce una persona comune3. L’elemento
centrale di questo modello sono gli oggetti che raccolgono in una sola entità
la struttura dei dati ed il loro comportamento. Questi oggetti possono
“vivere di vita propria” potendo essere combinati in un programma.
L’oggetto è una entità “schermata” che non può essere utilizzato in modo
diverso da quello voluto da chi lo ha progettato e verrà a costituire oggetti
più complessi combinandosi con altri oggetti. Infatti, con questo modello si
realizza quella che viene chiamata la modularità del software e il riutilizzo
del codice, cosa che nei linguaggi di tipo tradizionale non veniva permesso,
in quanto un programma tradizionale può essere visto come un insieme di
blocchi annidati in cui dati e procedure sono separati4. L’oggetto può definirsi come una entità astratta che gode di certe proprietà che
può essere manipolata in modi diversi definiti a priori5.I programmi eseguono i loro
calcoli trasferendo messaggi fra gli oggetti attivi, che corrispondono, nel computer,
alle entità nel mondo reale6.
Concetti significativi all’interno di questo modello sono quelli di
? astrazione
? oggetto
? incapsulamento
? classe
? ereditarietà
? polimorfismo.
3 Questo modo di concepire i software conduce sia ad un più diretto coinvolgimento dell’utente alla fase di progettazione del software stesso poiché i problemi si riconducono a concetti che sono di più facile comprensione per lo stesso sia a ad un più facile ed immediato utilizzo del software. Mahesh, Dodani, Hughes, Moshell : La programmazione OO parte 3, Byte 9/1989 4“Nei sistemi di programmazione tradizionali, dati e procedure sono entità separate ; il programmatore ha la responsabilità di applicare procedure attive a strutture dati passive e, spesso, di accertare che una procedura lavori correttamente con i tipi di dati a cui è applicata. Al contrario un sistema di programmazione orientata ali oggetti non vede un oggetto semplicemente come un dato passivo, ma come una combinazione del suo stato privato e dei metodi che lo manipolano.” D. Thomas :La programmazione OO parte 1 Byte 6/1989 5 C. Giustozzi Cos’è la OOP Mcmicrocomputer 11/1990 6 D. Thomas :La programmazione OO parte 1 Byte 6/1989.
237
Capitolo quinto I RDBMS e gli oggetti
Tutti questi concetti fondendosi insieme danno luogo ad un nuovo modo
di concepire la realizzazione del software e delle basi di dati che ha come
vantaggi quello di permettere una realizzazione modulare del software
tramite la composizione d'oggetti complessi a partire da oggetti più
semplici “discreti” (cioè che hanno vita propria) e di realizzare una
migliore riutilizzazione del codice. Tutto questo ha portato, ad esempio,
alla realizzazione d'ambienti caratterizzati da una grafica molto sviluppata
che ha permesso di realizzare un approccio più semplificato alle risorse
software ed hardware proprio per la presenza, anche visiva, d'oggetti che
sintetizzano in maniera più naturale i concetti, come l'uomo li percepisce
dalla realtà. Esempio lampante di questo nuovo modello è il grande
successo che hanno avuto le varie versioni di Windows e tutti i prodotti ad
esse legati, basati sulla realizzazione di un ambiente grafico estremamente
sviluppato che fanno degli oggetti l’elemento cardine del loro
funzionamento.
5.2.1. L’astrazione
L’astrazione è il concetto “principe” di tutti i modelli compreso quello ad
oggetti. Dell’astrazione abbiamo discusso diffusamente nel capitolo
dedicato alla progettazione concettuale affermando che si tratta di un
processo mentale attraverso il quale si evidenziano alcune proprietà e
caratteristiche in un insieme d'oggetti che si ritiene importante
escludendone altre che sono ritenute irrilevanti arrivando, poi, a definire
un nuovo oggetto che contiene in se tutte le proprietà considerate. Quindi,
tramite l’astrazione si determinano le caratteristiche di un oggetto e la sua
aggregazione in classi che, nel modello ad oggetti, hanno carattere
gerarchico.
238
Capitolo quinto I RDBMS e gli oggetti
5.2.2. Oggetti ed incapsulamento
Uno degli elementi fondamentali del modello ad oggetti è quello che
riguarda la definizione di un oggetto. Questi oggetti sono costruiti per
avvicinarsi il più possibile a quella che è la concezione umana d'oggetto e,
quindi, per rendere i sistemi informatici più adatti a rappresentare il
mondo reale.
Negli oggetti che incontriamo tutti i giorni, non facciamo mai distinzione
fra gli elementi fisici di cui l’oggetto è costituito ed il loro comportamento7.
Elementi essenziali per la composizione di un oggetto sono i dati e i
metodi. I dati possono essere variabili o costanti o in generale informazioni,
mentre i metodi sono rappresentati dalle procedure, funzioni di
manipolazione e in generale operazioni che si possono compiere su di esso.
Nella programmazione tradizionale le strutture dei dati, che dovranno
contenere le informazioni, saranno inserite da una parte mentre le
procedure e le funzioni di manipolazione dall’altra. I programmi OO non
vengono organizzati in procedure che condivideranno dei dati “globali”,
cioè accorpati tutti insieme. Al contrario i dati vengono incapsulati con le
procedure che possono accedervi. Questo concetto è spesso chiamato astrazione dei
dati o programmazione modulare8.
Nome :Maurizio Cognome :Boghetto Via :Lavagnini n.23 matricola 14545...... ....... Cammina Mangia dorme studia ..........
Dati dello oggetto
Metodi (o operazioni) Dello Oggetto
Figura 5.1 Esempio di rappresentazione di un oggetto (istanza di una classe)
7 Si può pensare l’oggetto come un “tipo di dato astratto”. “Per tipo di dato astratto si intende, un tipo di dato che non venga caratterizzato semplicemente da valori che possono assumere variabili ad esso appartenenti ma anche da un insieme di operazioni”. Questo concetto espresso da Polini trova applicazione nell’inserire in strutture relazionali tipi di dati che non siano semplicemente alfanumerici ma anche dati di carattere più complesso come quelli, ad esempio di carattere multimediale. 8 D. Thomas, La programmazione OO - Bit 6/1989
239
Capitolo quinto I RDBMS e gli oggetti
Un oggetto è composto da una rappresentazione incapsulata delle caratteristiche fisiche di una entità ,cioè i dati, che viene definita stato
dell’oggetto e dei metodi (operazioni), applicabili allo stesso oggetto che ne
descrivono il comportamento. L’oggetto si presenta come un qualcosa che
ha una sua precisa identità autonoma dal resto del programma al quale si può accedere solo attraverso i metodi che questo permette di realizzare su
se stesso9. Non si può generalmente compiere una azione esplicita su di un
oggetto : si deve, invece, chiedere all’oggetto di eseguire su se stesso una
azione fra quelle che questo oggetto può fare. Incapsulamento è il termine
tecnico che esprime questa nuova situazione. Non è possibile usare
l’oggetto in modo diverso da quello voluto da chi lo ha progettato la cui
attività risulta schermata rispetto al programmatore che lo usa. L’obiettivo è
quello di separare l’utente dell’oggetto da chi lo realizza. L’utente
programmatore che usa l’oggetto non ha più conoscenza di come l’oggetto è
stato realizzato ma opera su di esso solo tramite delle operazioni messe a
disposizione da chi lo ha realizzato.
E’ possibile, in questo modo, modificare anche lo stato di un oggetto senza
che le applicazioni subiscano modifiche, poiché queste agiscono solo sui
metodi.
Tramite l’incapsulamento, quindi, si da un nome comune ad un insieme di
dati e di metodi per cui l’oggetto, che in questo modo viene definito
tramite un opportuno identificatore dello stesso, potrà porre a disposizione
sia i metodi che i suoi dati.
5.2.3. Le classi e l’ereditarietà
Una classe d'oggetti descrive un gruppo d'oggetti con la stessa struttura di
dati (attributi) e lo stesso comportamento (metodi). Persona, azienda,
9 “Incapsulare i dati significa, quindi, nasconderli, proteggerli, isolarli. In altre parole, le strutture dei dati anziché essere pubbliche e direttamente accessibili sono disponibili solo dai metodi predefiniti per quell’oggetto.”A. Comai, G. Marras : I relazionali e gli oggetti, Zerouno ,10/1995
240
Capitolo quinto I RDBMS e gli oggetti
automobile sono esempi di classi d'oggetti. La determinazione delle classi è
una astrazione di classificazione che descrive le proprietà importanti
rispetto ad una applicazione ed ignora il resto.
Ogni classe definisce un insieme, che può essere anche infinito, di singoli
oggetti. Ogni oggetto è considerato una istanza della classe a cui
appartiene. Questa ha i propri valori per ogni attributo ma condivide con le
altre istanze della classe i nomi degli attributi e i metodi. Quindi, le
definizioni comuni come il nome della classe e il nome degli attributi sono
memorizzati una volta sola per classe così come i metodi sono scritti una
sola volta in modo che gli oggetti riutilizzino tutti lo stesso codice. Persona
Nome : Cognome : Età : Indirizzo : ....... Cammina Mangia dorme ..........
Classe Dati dello oggetto
Metodi (o operazioni) Dello Oggetto
Figura 5.2. esempio di rappresentazione di una classe.
Altri concetti importanti sono quelli d'aggregazione, generalizzazione ed
ereditarietà.
Le astrazioni d'aggregazione e generalizzazione permettono di organizzare
le classi in una struttura gerarchica in base a similitudini e differenze e
l’ereditarietà permette il riutilizzo del codice. In effetti, una classe può
ereditare metodi ed attributi da “superclassi” (cioè classi superiori ad essa),
aggiungendone altri che specificano meglio le peculiarità della propria
classe. Allo stesso modo metodi ed attributi possono essere ereditati da
“sottoclassi” (cioè classi inferiori a quella presa in considerazione).
241
Capitolo quinto I RDBMS e gli oggetti Persona Nome : Cognome : Età : Indirizzo : ....... Cammina Mangia dorme ..........
.......
Studente matricola 14545...... Anno di iscrizione in corso Fuori corso ....... studia ..........
Commerciante n. di partita IVA tipo di attività svolta ....... lavora ..........
Figura 5.3. Esempio di struttura gerarchica delle classi e d'ereditarietà. Le classi studenti
e Commerciante ereditano dalla loro superclasse Persona attributi e metodi che nella
loro rappresentazione non vengono citati. Invece, vengono evidenziati attributi e metodi
che sono caratteristici solo della specifica classe.
Nell’ambito della struttura gerarchica che si è creata vedremo che più si sale
verso il vertice di questa gerarchia e più le classi avranno un livello
d'astrazione maggiore. Per cui la classe al vertice avrà attributi e metodi che
sono comuni a tutte le classi sottostanti, le quali erediteranno questi
attributi e metodi aggiungendone di nuovi o “mascherandone” alcuni,
differenziandosi, così, dalle altre classi. Questo procedimento si ripeterà, in
questo modo, fra ogni classe e la sua superclasse fino al fondo della
gerarchia.
Si può anche definisce la superclasse come antenata e la sottoclase come
discendente. L’ereditarietà è, quindi, transitiva per un numero qualunque di
livelli, per cui una istanza di una sottoclasse è contemporaneamente
un’istanza di tutte le classi antenate10. L’eredità da una singola superclasse
10 “Nel modo di pensare comune noi tutti utilizziamo in modo intuitivo il concetto di astrazione ed ereditarietà : da una definizione base integriamo, ovvero ereditiamo le
242
Capitolo quinto I RDBMS e gli oggetti
si chiama eredità singola, mentre l’eredità da più sottoclassi si chiama
eredità multiple11.
Mammiferi
Esseri umani Elefanti
Studenti Commercianti
Maurizio Paola DumboGiulio Piero
Figura 5.4. Esempio di gerarchia ereditaria. Esseri umani ed elefanti sono definiti come sottoclassi dei mammiferi, mentre studenti e commercianti sono sottoclassi degli esseri umani. I casi (cioè le istanze) sotto la linea tratteggiata sono raggruppati in classi, mentre le classi sopra la linea tratteggiata sono classificate in base alla loro superclasse.
5.2.4. Il polimorfismo
Il polimorfismo permette di definire in maniera diversa all’interno delle
classi discendenti i metodi utilizzati nelle classi antenate. Questa
operazione, detta anche mascheramento, serve, in generale, per mascherare
informazioni utili, dati e metodi, e aggiungiamo pio altri dati e funzioni.”L. Napolitano : OOP Perché , Bit 12/92. 11 “Per esempio supponiamo di dover rendere conto all’interno del sistema informativo dell’entità Assistenti che sono gli studenti senior più meritevoli a cui vengono affidate alcune docenze remunerate, sono quindi un po’ studenti e un po’ docenti. Possiamo definire la classe Assistenti facendole ereditare dati e metodi da entrambe le classi che devono essere già definite, Docenti e Studenti.” Guidi Dorbolò :Guida a SQL.
243
Capitolo quinto I RDBMS e gli oggetti
in una classe una caratteristica di una sua superclasse definendo una
caratteristica con lo stesso nome la quale raffina, cioè modifica in parte, o
sostituisce la caratteristica della superclasse stessa che viene così
“mascherata”.
Figura 5.5 Ereditarietà e polimirfismo tra figure grafiche. Il metodo visualizza che viene
definito al vertice della gerarchia viene ripetuto anche nelle classi discendenti così come
ruota nella classe cerchio perché evidentemente le modalità del metodo implementato
nelle classi discendenti è diverso da quello della loro antenata (figura tratta da Modelli e
progetti Object Oriented di J. Rumbaugh M. Blama).
5.3. Messaggi e metodi
Solo i metodi di un oggetto hanno accesso al suo stato ed un metodo può
essere richiamato solo inviando un messaggio all’oggetto stesso. Un
messaggio descrive un’operazione che può essere applicata o subita dagli
oggetti di una classe, per cui avremo che un oggetto, tramite la definizione
dei metodi, tiene in se la capacità di effettuare una certa operazione (ad
esempio muoversi) ma deve essere richiamata all’esterno da un messaggio. 244
Capitolo quinto I RDBMS e gli oggetti
La stessa operazione può essere applicata a classi diverse. Tale operazione si dice polimorfa poiché richiede forme diverse d'attuazione per classi
diverse12.
Quando un oggetto t riceve un messaggio m il metodo da seguire è
ricercato innanzitutto nella classe cui appartiene t. Se non esiste, il metodo
viene ricercato fra le superclassi a partire da quella immediatamente
superiore a t risalendo così la gerarchia fino a che il metodo non viene
trovato13.
5.4. Identificatori di oggetti OID (Object IDentificator)
L’importanza di un identificatore unico di un oggetto lo si ha soprattutto
nell’ambito delle basi di dati ad oggetti. In questo ambito ogni oggetto
(istanza) è identificato univocamente da un OID, il quale esplicita il fatto
che ogni oggetto ha una propria unica identità. L’uso degli OID permette
agli oggetti di condividere altri oggetti, e quindi rende possibile la
costruzione d'oggetti tra loro interconnessi. L’OID si differenzia dal
concetto relazionale di chiave. Una chiave è costituita da uno o più attributi
con la quale si identifica univocamente una tupla di una relazione. Molto spesso una relazione può avere più chiavi (chiavi candidate) e fra queste si
sceglierà una chiave come chiave della relazione detta chiave primaria. Per
mantenere correlazioni (o join) fra tuple di relazioni diverse vengono usate
chiavi esterne . Le chiavi esterne non sono, quindi, che attributi di una
relazione che vengono inseriti in un’altra per poter creare delle correlazioni.
Maggiore è il numero di questi attributi che costituiscono la chiave, e più il
sistema viene appesantito, risultando in questo modo inefficiente. Spesso si
12 “Se si invia il messaggio “disegno” ad un oggetto “Linea” se ne richiama il metodo di disegno ; inviando lo stesso messaggio ad un “Cerchio” si richiama un metodo diverso. Pertanto, per l’operazione disegno si ottiene sempre il corretto comportamento.” D. Thomas :La programmazione OO parte 1 Byte 6/1989 13 “Ad esempio l’istanza Andrea della classe Studente risponde al messaggio presentati usasndo il metodo definito nella classe Studente , mentre l’istanza Maria della classe Persona risponde allo stesso messaggio con il metodo definito nella classe Persona.” Albano :Sistemi per basi di dati a oggetti. FrancoAngeli 1995
245
Capitolo quinto I RDBMS e gli oggetti
usano, proprio nel modello relazionale, chiavi brevi (come ad esempio il
codice fiscale, il numero del cliente) le quali non hanno un particolare
significato semantico ma risultano essere semplici identificatori di una
relazione e sono più efficienti proprio perché appesantiscono il sistema di
un minor numero d'attributi.
Gli OID del modello ad oggetti sono semplici identificatori di un oggetto
che non coincidono con uno o più attributi dello stesso ed in più l ’ OID è
unico nella intera base dei dati mentre una chiave è unica solo all’interno di
una relazione.
5.5. Eventi e stati
Un oggetto passa da uno stato ad un altro per mezzo d'eventi. Lo stato è un
intervallo di tempo e rappresenta l’insieme dei valori dei suoi attributi e dei
legami fra gli oggetti. L’effetto di un evento dipende dallo stato in cui si
trovava l’oggetto prima che quell’evento si verificasse14.
L’evento è un qualcosa che accade in un certo istante di tempo. Un evento
può precedere o seguire un altro evento oppure i due eventi possono non essere correlati. Due eventi non correlati si dicono concorrenti : essi non si
influenzano l’un con l’altro.
Un evento è una trasmissione d'informazioni, quindi un messaggio, inviato
ad un oggetto. Ad esempio, un tipo d'evento può essere quello generato da
un mouse o da una tastiera con il quale si arriva in un campo oppure si
modifica il valore di una tabella di una base di dati (un altro esempio può
essere una chiamata telefonica)15.
14 “....un oggetto ha una serie di operazioni e uno stato locale condiviso che “ricorda” l’effetto delle operazioni. Il valore risultante da una operazione su di un oggetto può dipendere sia dallo stato dell’oggetto, sia dagli argomenti dell’operazione stessa. Lo stato di un oggetto serve da memoria locale, condivisa dalle operazioni svolte su di esso. In particolare, altre operazioni eseguite in precedenza possono avere effetti sul valore reso da una certa operazione. Un oggetto può apprendere dall’esperienza, memorizzando nel suo stato l’effetto cumulativo della sua esperienza - la sua storia di invocazioni.” P. Wegner La programmazione OO parte 2 , Byte 7/8 - 1989 15 “L’input che genera un evento, di qualsiasi tipo, viene controllato da un sistema di gestione dell’interfaccia (Ad esempio Windows) e tradotto in una serie di eventi. Il tipo di
246
Capitolo quinto I RDBMS e gli oggetti
Le operazioni che possono compiere gli oggetti sono di due tipi : 1. Attività. Con attività si indica una operazione che impegna un oggetto
per un certo tempo. Un’attività è associata ad uno stato. Le attività
comprendono operazioni continue (visualizzare una immagine in uno
schermo) o di tipo sequenziale (esecuzione di un calcolo) che implicano
l’impiego di tempo. 2. Azione. Un’azione è una operazione istantanea che viene quindi
associata ad un evento. Ad esempio, il cliccare col mouse su di una icona
dello schermo.
Figura 5.6 Esempio di serie concatenata di Stati ed eventi relativi ad una conversazione
telefonica (figura tratta da Modelli e progetti Object Oriented di J. Rumbaugh M. Blama).
evento generato dipende dall’oggetto visivo che lo riceve e quindi se si tratta di un campo di una tabella potremmo ipotizzare eventi del tipo : arrivo in un campo, uscita da un campo, selezione del testo, modifica del valore.” P. Ciccone : Programmazione guidata ad eventi, Mcmicrocomputer 6/1992
247
Capitolo quinto I RDBMS e gli oggetti
5.6. Verso gli Object - Relational DBMS
Le prime applicazioni della tecnologia DBMS sono state realizzate in aree di
tipo gestionale ed amministrativo. Questo fatto ha influenzato moltissimo i
principi d'organizzazione dei DBMS che sono stati caratterizzati da modelli,
fra cui anche il relazionale, dotati di una limitata capacità espressiva. Le
attuali strutture dei DBMS relazionali ( i quali dominano il mercato) sono
messe in crisi dalla loro limitata capacità di trattare un nuovo tipo di dato
come quello multimediale, cioè da tipi di dati di carattere complesso.
Questi dati non sono direttamente riconducibili a strutture tabellari del
modello relazionale. Ad esempio, se si vuole rappresentare un oggetto
complesso nel modello relazionale occorre suddividere lo stesso in un
ampio numero di tuple per poi dover eseguire numerose operazioni di join
per poter ricostruire l’oggetto quando si rende necessario accedere ad esso.
Un altro esempio ci viene offerto da M. Del Corto nella rivista informativa
Zerouno : Nel caso d'informazioni multimediali (per esempio immagini o insiemi di
fotogrammi di una sequenza video) non è possibile effettuare l’interrogazione con i
sistemi query tradizionali. Sarebbe infatti facile e comunque non agevole formulare
una interrogazione del tipo :
SELECT *
FROM Tabella1
WHERE (colore R/G/B =(164/255/073) AND (forma circle (xxx,yyy,rrr) AND...).
e ancora meno una interrogazione come :
SELECT *
FROM Tabella1
WHERE (colore = (verde - giallo) AND (forma = cerchio con centro in xxx, yyy e
con raggio rrr) AND ...).
che peraltro è semanticamente uguale alla precedente.
248
Capitolo quinto I RDBMS e gli oggetti
Si immagini la difficoltà di proseguire questo tipo d'approccio quando la figura da
cercare non è un cerchio ma un ingranaggio, un cilindro, un edificio, un volto
umano, un quadro, un modello di un componente e così via.
Il modello dei dati, contenente questi oggetti di carattere estremamente
complesso, deve essere capace di esprimere quelle che vengono dette
relazioni statiche ( cioè le struttura dei dati oppure, per usare un termine
legato all’ambiente Object Oriented, il suo stato), ma anche il
comportamento che gli oggetti hanno e i vincoli cui essi devono obbedire.
Inoltre,occorre che questi oggetti si evolvano nel tempo.
Infine, il modello dovrebbe permettere all’applicazione di poter definire i
propri tipi di dati, con le relative operazioni e di utilizzarli nella definizione
di altri tipi di dati. Non è pensabile che il DBMS preveda tutti i possibili tipi
di dati che saranno necessari ad ogni possibile applicazione.
Questo particolare modo di concepire l’oggetto pone, quindi, in crisi la
concezione tradizionale del RDBMS basata sulla indipendenza della base
dei dati dagli applicativi.
L’oggetto complesso è, in pratica, un oggetto che tiene in se le
caratteristiche dell’incapsulamento, della ereditarietà e del polimorfismo
tipici della filosofia OO.
Per cui, si potrebbe pensare che il futuro dei DBMS possa essere dominato
dagli OODBMS (Object Oriented DBMS) e dal modello orientato agli
oggetti.
Ma la loro affermazione deve fare i conti con alcuni problemi fra cui :
1. La stragrande massa delle applicazioni delle aziende poggia su
architetture di dati strutturate in modo relazionale (e in misura minore
gerarchico)
2. Il modello OO (Object Oriented) nel campo dei DBMS non poggia
ancora su fondamenti teorici rigorosi come quelli del modello
relazionale di Codd.
249
Capitolo quinto I RDBMS e gli oggetti
Nell’immediato futuro una strada praticabile potrebbe essere quella di
arricchire il modello relazionale incorporandovi alcune idee provenienti
dal mondo degli oggetti.
Si conserverebbero, così, i patrimoni aziendali relazionali realizzando una
struttura capace sia di contenere in se tipi di dati (cioè oggetti) di carattere
complesso sia di mantenere una certa rigorosità e linearità dal punto di
vista teorico.
Questa tendenza viene confermata dall’interessamento dimostrato da
alcuni teorici del modello relazionale come C. Date e H. Darwen che hanno
pubblicato in tal senso un documento (The third Manifesto) in cui si cerca
di realizzare questo incontro.
Questi studiosi stanno lavorando per estendere il loro modello,
incorporandovi i principi essenziali dell’orientamento ad oggetti e più
precisamente sulla (come affermano A.Comai e G. Marras in un articolo su
Zerouno) :
? integrazione fra dati e operazioni
? gestione di tipi di dato complessi
? ereditarietà e polimorfismo.
Nel modello OO l’oggetto è una rappresentazione incapsulata di dati ed
operazioni. Questo fatto mette in crisi la distinzione tradizionale tra
DBMS da un lato e programmi dall’altro. In effetti, la teoria relazionale
classica non prevede la definizione d'operazioni a livello di DBMS ma solo
di dati.
L’elemento centrale della possibile unione, secondo quanto affermano Date e Darwen, fra relazionale e l’OO sembra essere il concetto di dominio.
Fondamentalmente il dominio identifica un insieme di valori ammissibili
dai quali uno o più attributi traggono i loro valori concreti nelle tuple di
una relazione. Un esempio di dominio può essere quello (dato da
Zerouno) relativo alle provincie italiane :questo dominio identifica tutte le
provincie legalmente esistenti a tutt’oggi in Italia. Ogni attributo che faccia
250
Capitolo quinto I RDBMS e gli oggetti
riferimento a quel dominio accetterà esclusivamente solo uno dei valori
ammissibili. Legare un attributo ad uno specifico dominio significa definire un criterio
d'accettabilità sui valori che esso può assumere, e definire anche a quali operazioni
possano essere sottoposti quei valori (non è possibile utilizzare una provincia
italiana come fattore di moltiplicazione)16.
Il concetto di dominio è assimilabile a quello di tipi di dati nei linguaggi di
programmazione. Stessa cosa si può dire per il linguaggio SQL (nel
capitolo dedicati all’ SQL si è visto, ad esempio, come i domini possono
coincidere con i tipi di dati CHARACTER, NUMERIC, DATE, ecc..).
Il modello relazionale prevede una definizione esplicita dei domini, e
l’associazione di ciascun attributo ad uno di tali domini.
I valori inclusi in un dominio (che possono essere assunti a livello
d'attributo, di colonna o di tabella) devono essere atomici. Devono, cioè,
costituire una unità non decomponibile per il DBMS. Pero, al loro interno
possono essere di complessità arbitraria (es. documenti, immagini). Il
dominio, quindi, non è altro che un tipo di dato come ad esempio
NUMERIC in SQL che si presenta esteriormente come un tutt’uno.
L’idea chiave del manifesto (di Date e Darwen) è la seguente :I domini del mondo
relazionale e le classi degli oggetti nel mondo OO sono la stessa cosa. Per essere
precisi sono entrambi “tipi di dato”......17 . I tipi di dati vengono definiti in
sette punti (riportati in nota a fondo pagina) i quali non fanno altro che
16 A. Comai G. Marras : I relazionali e gli oggetti, Zerouno 10/1995 17 “.....dove con il termine tipi di dato intendiamo tutto quello che segue : 1. Sia tipi di dato definiti a livello di sistema che tipi di dato definibili dall’utente. 2. una parte della definizione di ogni singolo tipo di dato consiste nella specifica
dell’insieme di tutti i valori ammissibili per quel tipo di dato. 3. Tali valori possono essere di complessità arbitraria. 4. La rappresentazione interna di tali valori è nascosta all’utente. 5. Tali valori sono modificabili unicamente tramite operatori definiti per il tipo di dato in
questione. 6. Alcuni tipi di dato possono essere sottotipi di altri supertipi. 7. Se B è un sottotipo di A, allora tutti gli operatori che si applicano ad A si applicano
anche a B (ereditarietà), ma B può avere propri operatori che non si applicano ad A.” C. Date H. Darwen : Il terzo manifesto, traduzione integrale di “The third Manifesto” di Zerouno del 10/1995
251
Capitolo quinto I RDBMS e gli oggetti
delineare le caratteristiche di un oggetto che possiede i tre requisiti
dell’incapsulamento, ereditarietà e polimorfismo.
Attualmente, però, quasi nessun DBMS fornisce una precisa definizione
dei domini. I prodotti attuali (punto N.2 del Manifesto) gestiscono i tipi di
dati definiti dal sistema e non è possibile per l’utente definirne di propri e
più sofisticati.
5.7. Esempio di ORDBMS (Realtional Object DBMS)
Un gestore di database OR già presente sul mercato è l’UniSQL con un
proprio linguaggio SQL detto UniSQL/X. Occorre preliminarmente
indicare che i termini del mondo relazionale e di quello ad oggetti possono
essere usati in maniera intercambiabile in questo particolare contesto :
Relazionale Object Relational
tabella Classe vista classe virtuale
colonna attributo
riga istanza procedura metodo
gerarchia di tavole gerarchia di classi
Si considera una ipotetica tabella Articoli, la quale può essere considerata
come una classe . Il tipo di dato di una colonna della classe (tabella)
Articoli può essere una classe.
Per esempio potrebbe avere un attributo chiamato Di_categoria il cui tipo
è la classe Categoria.
CREATE TABLE Articoli
(Cod CHAR (4)
Descrizione CHAR (40)
Aspetto CHAR (50)
Prezzo NUMERIC,
IVA NUMERIC 252
Capitolo quinto I RDBMS e gli oggetti
Spese di trasporto NUMERIC
Di__categoria Categorie
Cod Descrizione Aspetto Prezzo IVA Spese di trasporto Di_categoria
Cod Descrizione
OID
OID
Articoli
Categorie
Le due tabelle sono state composte in classi ed ogni istanza della classe è
identificata da un OID, il quale è unico in tutta la base dei dati eliminando
la necessità di introdurre chiavi esterne e di realizzare, quindi, delle join.
Nella classe Articoli l’OID identifica con certezza la riga, ovvero l’istanza
correlata della classe Categorie, poiché i rispettivi OID della classe
Categorie sono inseriti nell’attributo Di_categoria. In questo modo per
ottenere la descrizione di ogni articolo e la rispettiva categoria si può
scrivere.
SELECT Descrizione, Di_categoria. Descrizione
FROM Articoli
invece lo stesso risultato con una query tradizionale si sarebbe ottenuto
così :
SELECT Articoli. Descrizione, Categorie. Descrizione
FROM Articoli, Categorie
WHERE Articoli. Cod =Categorie. Cod
5.7.1. Collezione
Ad un stesso attributo possono essere assegnati più valori (insiemi, gruppi
ripetuti). Le collezioni sono utili per ridurre la necessità di ulteriori tabelle
di descrizione e delle relative join. Ad esempio, nella classe Articoli un
articolo potrebbe avere aspetti diversi :
253
Capitolo quinto I RDBMS e gli oggetti
rosso, bianco, verde, ecc.
Descrizione Aspetto
Birra Scura Bionda Rossa
Cod Descrizione Aspetto Prezzo IVA Spese di trasporto Di_categoria
Cod Descrizione
OID
OID
Articoli
Categorie
5.7.2. Incapsulamento
Una classe/tabella può contenere metodi con cui interrogare e manipolare
le istanze di una classe. Ad esempio :
CREATE TABLE Articoli
(Cod CHAR (4)
Descrizione CHAR (40)
Aspetto CHAR (50)
Prezzo NUMERIC,
IVA NUMERIC
Spese di trasporto NUMERIC
Di__categoria Categorie)
METHOD Calcolo_prezzo
Il metodo Calcolo_prezzo determina il prezzo dell’articolo considerando il
prezzo, l’IVA e le spese di trasporto. Una possibile query può essere :
SELECT Descrizione, Calcolo_prezzo
FROM Articoli
In questo caso la query darà il prezzo totale insieme alla descrizione
dell’articolo. Questo in verità l’avrei potuto ottenere nella query anche
254
Capitolo quinto I RDBMS e gli oggetti
tramite una normale espressioni di addizione fra le colonne coinvolte nel
calcolo del prezzo totale. Esistono però delle operazioni più complesse in
cui solo inserendo metodi si sarebbero potute realizzare.
5.7.3. Ereditarietà e polimorfismo.
Ad una classe tabella può essere applicata l’ereditarietà. Ad esempio una
classe Articoli_estero può essere discendente della classe Articoli. Può,
quindi, ereditarne gli attributi e i metodi ed aggiungerci un attributo
specifico che la specializza. Ad esempio :
CREATE TABLE Articoli_estero
(tassa_import NUMERIC (3))
MEHOD Calcolo_prezzo
AS CHILD OF Articoli
Avremo in questo caso che la nuova classe Articoli esteri erediterà tutti gli
attributi della classe articoli, inserirà un nuovo attributo che è quello
relativo alla tassa di importazione e dovrà anche per questo ridefinire il
metodo di calcolo del prezzo.
In caso di eredità multipla una tabella figlio erediterà i metodi e gli
attributi delle classi antenate inserendo attributi loro specifici e
ridefinendo i metodi che sono diversi.
5.8. RDBMS orientati agli oggetti
Nell’attesa che i sistemi orientati agli oggetti e quelli relazionali si fondino
per realizzare un unico modello di database che possa integrare
efficacemente i dati di tipo multimediale, sul mercato sono apparsi da
qualche anno dei prodotti relazionali che utilizzano quella che alcuni
chiamano una “tecnologia di copertina”.
255
Capitolo quinto I RDBMS e gli oggetti
Questi prodotti, destinati a PC o a server, si presentano esternamente come
DBMS ad oggetti mentre il “motore”, cioè il database, è sempre un
relazionale con capacità di contenere non solo campi alfanumerici, cioè tipi
di dati semplici, ma anche di carattere più complesso (BLOb, Memo, ecc..).
Inoltre, tramite le stored procedure e i trigger s'inseriscono nel DBMS
delle istruzioni, e quindi delle operazioni, che realizzano un'integrazione
di componenti funzionali nel DBMS . Queste, per molti versi, sono
analoghe ai metodi del modello OO18.
Per rappresentare tali prodotti si può pensare ad uno schema a tre livelli :
nel più basso risiede un database relazionale, progettato con le consuete
tecniche di normalizzazione. Nel livello intermedio risiede, invece, un
insieme d'oggetti.
Questi vedono il database relazionale come un oggetto base di conoscenza da
cui prelevano informazioni e le mettono a disposizione dei vari applicativi,
i quali risiedono in un livello più alto. Quindi, chi opera con questi
particolari prodotti RDBMS lo fa attraverso un insieme di tools, i quali
rappresentano un'interfaccia e fanno vedere la base dei dati come un
“oggetto base di conoscenza”. Tutto questo è possibile tramite
l’implementazione di una libreria d'oggetti realizzati con un particolare
linguaggio ad oggetti.
In questo modo una tabella può essere vista come un oggetto al quale
possono essere applicate tutta una serie d'operazioni previste nel modello
relazionale.
Questi strumenti, che costituiscono delle interfaccia rispetto al motore
relazionale , possono essere utilizzati per la creazione di tabelle e di
database oppure possono facilitare la manipolazione dei dati e la
realizzazione delle query tramite l’utilizzo del QBE grafico.
18 Le stored procedure sono un insieme di istruzioni che vengono eseguite soltanto su diretta richiesta dell’utente, il quale al momento del suo richiamo, può passare tutta una serie di parametri. I triggers, invece, possono essere considerate delle stored procedure che vengono attivate in modo autonomo dal DBMS al verificarsi di un evento, per esempio l’inserimento di una riga in una tabella.
256
Capitolo quinto I RDBMS e gli oggetti
Inoltre viene data la possibilità di costruire delle schede e dei report,
ponendo a disposizione dell’utilizzatore tutta una libreria di oggetti che
questi può comporre a suo piacimento secondo quelle che sono le sue
necessità.
5.8.1. I tipi di dato di un RDBMS orientato agli oggetti.
In aggiunta ai tradizionali campi numerici, alfanumerici, e datari i vari
prodotti DBMS come Paradox, Access e Dbase, ad esempio, dispongono di campi memo, grafici, BLOb ed OLE.
Questi tipi di campo supportati permettono, praticamente, la
memorizzazione di qualsiasi informazione sia essa grafica, multimediale,
sonora o binaria fino ad un numero elevato di MB (ad esempio, per Access
e Paradox un massimo di 256 MB per campo). Generalmente, però, questi
dati vengono trattati come un tutt’uno senz’altra possibilità se non quella
di memorizzarli e di leggerli, ma non di interrogarli.
I campi memo sono campi di lunghezza variabile contenente testo, mentre
i campi grafici contengono immagini in diversi formati file (BMP, PCX,
JPEG, ecc..). I campi BLOb (Binary Large Object) permettono la
memorizzazione di qualsiasi informazione come audio, immagini in
movimento e documenti. Un particolare tipo di campi BLOb sono i campi
OLE in quanto, oltre che all’informazione, memorizzano anche le
informazioni relative all’ applicazione OLE server che ha generato il file.
Queste informazioni prendono il nome di OLE (Object Linking and
Embedding)19.
19 OLE permette la creazione di documenti composti che integrano oggetti provenienti da applicazioni differenti. OLE prevede una applicazione (OLE client) che incorpora o si collega ai dati e alle informazioni di un’altra informazione (OLE server). Incorporando i dati di un OLE server in un OLE client, il documento composto che ne deriva contiene una copia dei dati. In questo modo è possibile effettuare modifiche sui dati incorporati lasciando inalterato l’originale e rilasciare applicazioni o documenti composti senza preoccuparsi di agganciare file esterni. Collegando le informazioni , il documento composto contiene esclusivamente i riferimenti relativi all’applicazione server e non ai dati mentre le modifiche apportate alle applicazioni si riflettono su tutti i collegamenti. Una
257
Capitolo quinto I RDBMS e gli oggetti
5.8.2. Gli strumenti
Questi strumenti si basano su di una tecnologia ad oggetti per semplificare
alcune operazioni che rientrano in ambito relazionale e offrono al tempo
stesso un insieme di applicativi che fanno leva sempre sull’utilizzo della
base dei dati. La finalità ultima di questi strumenti è quella di avvicinare il
più possibile l’utenza non specializzata, composta soprattutto da chi
all’interno di una impresa ha necessità di modellare i dati. Si potrà in
questo modo ottenere le informazioni volute senza ricorrere
all’intermediazione di uno specialista. Una di queste categorie è senz’altro
quella del manager che attraverso questi semplici strumenti può ricorrere
ad una interrogazione della base dei dati aziendali in maniera semplice ed
in completa autonomia. Un DBMS può contenere tutto un pacchetto di
strumenti i quali hanno gli scopi più svariati. Fra gli strumenti senz’altro
presenti in questi tipi di DBMS ci sono quelli per la creazione delle basi di
dati e di tabelle, definendo i campi e le regole di integrità e di sicurezza
che le caratterizzano.
applicazione, quindi, in grado di lavorare come client OLE può incapsulare qualsiasi tipo di dato senza sapere tutto sui formati dati degli oggetti da incapsulare. Per maggiori informazioni al riguardo consultare : ? Bit del gennaio e febbraio 1993 :OLE, teoria e pratica parte I e parte II ? R. Jennings : Access 2 per Windows, Jackson ? Guida di Windows 3.11 di Microsoft
258
Capitolo quinto I RDBMS e gli oggetti
Figura 5.7. Finestra di struttura tabella di Access 2. Attraverso questo strumento viene definita la struttura di una tabella, indicando i campi che la formano, i tipi di dati che contengono, la chiave primaria della tabella ecc..
Figura 5.8. Finestra Relazioni di Access 2. Attraverso questo strumento si semplifica la creazione delle relazioni fra le tabelle considerandole come degli oggetti. Si possono stabilire le relazioni tra le tabelle collegandole fra loro tramite una linea, naturalmente nel rispetto della presenza di chiavi esterne che permettano ciò. Inoltre, quando si definiscono le relazioni si può specificare se rafforzare l’integrità referenziale e se consentire gli aggiornamenti o le cancellazioni a cascata.
259
Capitolo quinto I RDBMS e gli oggetti
Altri strumenti sono quelli per la visualizzazione delle tabelle che vengono
viste come oggetti in cui si possono manipolare i dati inserendoli
direttamente nei campi (la cui struttura, evidentemente è già stata definita
precedentemente).
Le query by Example sono uno strumento utile per la definizione dei dati
da estrarre da una o più tabelle senza far uso, ad esempio, del linguaggio
SQL. Tutto questo avviene tramite la selezione di oggetti tabelle e di
oggetti colonne che vengono selezionati tramite tastiera o mouse.
Verranno specificati in appositi campi le varie condizioni che in SQL sono
specificate dalla clausola WHERE. Queste query grafiche verranno
trasformate in una interrogazione SQL per avere accesso ai dati (Access).
Figura 5.9. Access2. QBE grafiche.
Altri importanti strumenti sono quelli delle form (ovvero le “Schede”) e i
report. Questi strumenti permettono sia di inserire i dati, sia di
260
Capitolo quinto I RDBMS e gli oggetti
rappresentarli in maniera più significativa per l’utilizzatore, recuperando i
dati che servono dalle tabelle e dalle query, corredandoli, nel caso dei
report, di grafici a due o tre dimensioni.
Tali strumenti, per mezzo di un apposito linguaggio di programmazione
ad oggetti, mettono a disposizione tutta una libreria di oggetti (bottoni,
menu a tendina ecc..) che possono essere “composti” dall’utilizzatore su di
uno schermo per realizzare una particolare struttura delle form o dei
report. Per questi oggetti è possibile scegliere uno dei metodi previsti per
quell’oggetto. I metodi sono piccole porzioni di codice che determinano il
comportamento di un oggetto i quali sono legati o meno all’avverarsi di un
particolare evento ( ad esempio quando viene premuto un bottone sullo
schermo con il mouse viene eseguito il codice legato al metodo
“premibottone”).
Nell’ambito della creazione delle tabelle, delle schede o dei report l’utente
meno esperto può essere guidato da particolari sistemi di
autocomposizione che facilitane la realizzazione delle stesse limitandone,
però, il un certo qual modo il raggio d’azione.
261
Capitolo quinto I RDBMS e gli oggetti
Figura 5.10. Access 2. Struttura e visualizzazione di una scheda. Attraverso questa scheda
è possibile inserire i dati tramite bottoni, menù a tendina e visualizzarli. Ogni scheda è
una tupla. Come si vede nella finestra proprietà si può scegliere quale metodo applicare.
262
Capitolo quinto I RDBMS e gli oggetti
Figura 5.11. Access 2. Struttura e visualizzazione di un report.
263