Documente Academic
Documente Profesional
Documente Cultură
Identidad
de
objeto,
constructores de tipos
estructura
de
objeto
Identidad de objeto
Un sistema de bases de datos orientado a objetos proporciona una
identidad nica a cada objeto independiente almacenado en la base de
datos. Esta identidad, normalmente se implementa mediante un
identificador de objeto nico (OID), generado por el sistema. El valor de
este identificador no es visible al usuario externo, pero se usa
internamente por el sistema para identificar a cada objeto y poder crear
y manejar referencias entre objetos.
La principal propiedad de un OID es que debe ser inmutable; es decir, el
valor del OID de un determinado objeto no debe cambiar nunca. Esto
preserva la identidad del objeto del mundo real que se representa. Por lo
tanto, una BDOO debe tener algn mecanismo para generar
identificadores nicos y que permita preservar la propiedad de
inmutabilidad de los mismos. Tambin sera deseable que cada
identificador se usara una sola vez, o sea, que incluso si un objeto se
elimina de la BD, su identificador no sea asignado a otro objeto. Estas
propiedades implican que el OID no depende de ninguno de los atributos
del objeto, ya que stos pueden cambiarse o corregirse. Tambin se
considera como inapropiado basar el OID del objeto en la direccin fsica
del objeto almacenado, porque la misma direccin puede cambiar
cuando se efecte una reorganizacin fsica de la BD. Sin embargo,
algunos sistemas utilizan la direccin fsica para aumentar la eficiencia
al obtener un objeto. Si la direccin cambiase, se utilizara un apuntador
indirecto, que dara la nueva direccin.
Algunos modelos de datos orientados a objetos antiguos requeran que
todo (desde un simple valor hasta un objeto complejo) deba
representarse como un objeto, lo que quiere decir que hasta el valor
ms simple tena su propio OID. Esto permita que dos valores iguales
tuvieran distintos OIDs, lo cual podra ser til en determinados casos. Por
ejemplo, el entero de valor 50 puede usarse a veces para representar un
peso en kilogramos y otras veces para representar la edad de una
persona. Aunque sea til en el plano terico, no es muy prctico ya que
lleva a la generacin de demasiados OIDs. As, la mayora de sistemas
Estructura de objeto
En las BDOO, los objetos complejos pueden construirse a partir de otros
objetos ms simples mediante constructores de tipos. Podemos
representar a estos objetos como una tupla (i, c, v) donde i es un
identificador de objeto (su OID), c es un constructor de tipo y v es el
estado (el valor) del objeto.
Los constructores ms utilizados son los de tomo, tupla y conjunto,
junto a los de lista, bolsa y array. El constructor de tomo es usado para
representar a los valores atmicos bsicos que puede tener un objeto
(como nmeros enteros, reales, booleanos...).
El estado de un objeto (v en la tupla) se interpreta a partir del
constructor (c). Si c es tomo, entonces v es un valor atmico de valores
bsicos que utiliza el sistema. Si c es conjunto, v es un conjunto de
identificadores de objetos ({i1, i2, i3...}). Con c siendo una tupla, v es
una tupla de la forma <a1:i1, a2:i2, a3:i3...> donde aj es un nombre de
atributo, y cada ij es un identificador de objeto. Con c siendo lista v es
una lista ordenada [i1, i2, i3...] de identificadores de objetos del mismo
tipo.
La lista es similar al conjunto salvo en que la lista est ordenada, por lo
que podemos hablar del i-simo elemento. Una lista puede tener un
nmero arbitrario de elementos. Pero si hablamos de un nmero
determinado, entonces c es un array.
Una bolsa se diferencia del conjunto en que en el conjunto todos los
elementos deben ser diferentes, mientras que en la bolsa puede haber
duplicados.
Ejemplos de estructuras:
o1 = (i1, tomo, Houston)
o2 = (i2, tomo, Bellaire)
o3 = (i3, tomo, Sugarland)
o4 = (i4, tomo, 5)
o5 = (i5, tomo, Investigacin)
o6 = (i6, tomo, 22-05-1988)
o7 = (i7, conjunto, {i1, i2, i3})
=
=
=
=
=
=
(i1,
(i2,
(i3,
(i4,
(i5,
(i6,
);
string;
integer;
tuple (
jefe:
Empleado;
fechainicio: Fecha;
);
localizaciones:
set (string);
empleados:
set (Empleado);
proyectos:
set (Proyecto);
);
operations num_de_emps: integer;
crear_dept:
Departamento;
borrar_dept:
boolean;
asignar_emp(e: Empleado): boolean;
(* aade un empleado al departamento *)
quitar_emp(e: Empleado):
bolean;
(* elimina un empleado del departamento *)
end Departamento;
al
conjunto
persistente