Bases de Datos Orientadas a objetos
Visión general
Las aplicaciones tradicionales de las bases de
datos consisten en tareas de procesamiento de datos, como la gestión bancaria o
de nóminas, con tipos de datos relativamente sencillos que se adaptan bien al
modelo relacional.
A medida que los sistemas de datos se fueron usando en un rango más amplio de aplicaciones, como el diseño asistido por computadora y los sistemas de información geográfica, las limitaciones impuestas por el modelo relacional se convirtieron en un obstáculo. La solución fue la introducción de bases de datos basadas en objetos que permiten trabajar con tipos de datos complejos. El primer obstáculo es el limitado sistema de tipos soportado por el modelo relacional. Los dominios de aplicaciones complejos necesitan tipos de datos del mismo nivel de complejidad como los atributos multivaluados y la herencia, que los lenguajes de programación tradicional soportan. El modelo de datos relacional orientado a objetos extiende el modelo de datos relacional ofreciendo un sistema de tipos más rico que incluye tipos de datos complejos y orientados a objetos. Hay que extender de manera acorde los lenguajes de consultas relacionales, para que puedan trabajar con este sistema de tipos más rico. Estas extensiones intentan conservar los fundamentos relacionales mientras extienden la potencia del modelo.
El segundo obstáculo es la dificultad de acceso a los datos de la base de datos desde los programas escritos en lenguajes como C++ o Java. Las diferencias entre el sistema de tipos de las bases de datos y el de los lenguajes de programación hace más complicado el almacenamiento y la recuperación de los datos. Tener que expresar el acceso a las bases de datos mediante un lenguaje (SQL) que es diferente al lenguaje de programación también hace más difícil el trabajo del programador. Es deseable, para muchas aplicaciones, contar con estructuras o extensiones del lenguaje de programación que permitan el acceso directo a los datos de la base de datos, sin tener que pasar por un lenguaje intermedio como SQL.
El término de lenguajes de programación persistentes hace referencia a las extensiones de los lenguajes de programación existentes que añaden persistencia y otras características de las bases de datos usando el sistema de tipos nativo del lenguaje de programación. El término sistemas de bases de datos orientadas a objetos se usa para hacer referencia a los sistemas de bases de datos que soportan sistemas de tipos orientados a objetos y permiten el acceso directo a los datos desde los lenguajes de programación orientados a objetos usando el sistema de tipos nativo del lenguaje.
A medida que los sistemas de datos se fueron usando en un rango más amplio de aplicaciones, como el diseño asistido por computadora y los sistemas de información geográfica, las limitaciones impuestas por el modelo relacional se convirtieron en un obstáculo. La solución fue la introducción de bases de datos basadas en objetos que permiten trabajar con tipos de datos complejos. El primer obstáculo es el limitado sistema de tipos soportado por el modelo relacional. Los dominios de aplicaciones complejos necesitan tipos de datos del mismo nivel de complejidad como los atributos multivaluados y la herencia, que los lenguajes de programación tradicional soportan. El modelo de datos relacional orientado a objetos extiende el modelo de datos relacional ofreciendo un sistema de tipos más rico que incluye tipos de datos complejos y orientados a objetos. Hay que extender de manera acorde los lenguajes de consultas relacionales, para que puedan trabajar con este sistema de tipos más rico. Estas extensiones intentan conservar los fundamentos relacionales mientras extienden la potencia del modelo.
El segundo obstáculo es la dificultad de acceso a los datos de la base de datos desde los programas escritos en lenguajes como C++ o Java. Las diferencias entre el sistema de tipos de las bases de datos y el de los lenguajes de programación hace más complicado el almacenamiento y la recuperación de los datos. Tener que expresar el acceso a las bases de datos mediante un lenguaje (SQL) que es diferente al lenguaje de programación también hace más difícil el trabajo del programador. Es deseable, para muchas aplicaciones, contar con estructuras o extensiones del lenguaje de programación que permitan el acceso directo a los datos de la base de datos, sin tener que pasar por un lenguaje intermedio como SQL.
El término de lenguajes de programación persistentes hace referencia a las extensiones de los lenguajes de programación existentes que añaden persistencia y otras características de las bases de datos usando el sistema de tipos nativo del lenguaje de programación. El término sistemas de bases de datos orientadas a objetos se usa para hacer referencia a los sistemas de bases de datos que soportan sistemas de tipos orientados a objetos y permiten el acceso directo a los datos desde los lenguajes de programación orientados a objetos usando el sistema de tipos nativo del lenguaje.
Tipos de datos complejos
Todos los valores de
tipos de datos pueden agruparse en dos categorías principales: simples o complejos.
Un valor simple (o
tipo de dato simple) es un valor que ActionScript almacena en el nivel más bajo
de abstracción, lo que significa que las operaciones con tipos de datos simples
son generalmente más rápidas y eficientes que las operaciones realizadas con
tipos de datos complejos. Los siguientes tipos de datos definen un conjunto de
uno o varios valores simples: Boolean (booleano), null (nulo), Number (número),
String (cadena) y undefined (no definido).
Un valor
complejo (o tipo de datos complejo) es un valor que no es simple y que
hace referencia a los valores simples. Estos se denominan con frecuencia tipos
de datos de referencia. Los valores complejos pertenecen al tipo de
datos Object (objeto) o a un tipo de datos basado en el tipo de datos Object.
Entre los tipos de datos que definen conjuntos de valores complejos se
encuentran Array (matriz), Date (fecha), Error, Function (función) y XML.
Las variables que
contienen datos de tipo simple se comportan en ciertas situaciones de modo
diferente a las que contienen tipos complejos.
ActionScript dispone de
los siguientes tipos básicos de datos que puede utilizar en sus aplicaciones:
Tipo
de datos
|
Descripción
|
Boolean
|
Simple. El tipo de
datos Boolean (booleano) consta de dos valores: true y false. Ningún
otro valor es válido para variables de este tipo. El valor predeterminado de
una variable booleana declarada pero no inicializada es false. Para más
información, consulte Tipo de datos Boolean (booleano).
|
MovieClip
|
Complejo. El tipo de
datos MovieClip permite controlar los símbolos de clips de película mediante
los métodos de la clase MovieClip. Para más información, consulte Tipo de datos MovieClip (clip de película).
|
null
|
Simple. El tipo de
datos null (nulo) contiene el valor null. Este valor significa
"ningún valor", es decir, no hay datos. Puede asignar el valor null en
distintas situaciones para indicar que una propiedad o variable no tiene
ningún valor asignado. El tipo de datos null es el tipo de datos predeterminado
para todas las clases que definen tipos de datos complejos. Una excepción a
esta regla es la clase Object, que adopta de manera predeterminada el valor undefined.
Para más información, consulte Tipo de datos null (nulo).
|
Number
|
Simple. Este tipo de
datos representa enteros, enteros sin signo y números de coma flotante. Para
almacenar un número de coma flotante, debe incluir una coma decimal en el
número. Sin la coma decimal, el número se almacena como un entero. El tipo de
datos Number puede almacenar valores entre Number.MAX_VALUE (muy
alto) y Number.MIN_VALUE (muy bajo). Para más información, consulte Referencia
del lenguaje ActionScript 2.0 y Tipo de datos Number (número)
|
Object
|
Complejo. El tipo de
datos Object (objeto) se define mediante la clase Object. La clase Object
sirve de base para todas las definiciones de clases en ActionScript y le
permite organizar unos objetos dentro de otros (objetos anidados). Para más
información, consulte Tipo de datos Object (objeto).
|
String
|
Simple. El tipo de
datos String (cadena) representa una secuencia de caracteres de 16 bits que
puede incluir letras, números y signos de puntuación. Las cadenas se
almacenan como caracteres Unicode empleando el formato UTF-16. Una operación
sobre un valor de cadena (String) devuelve una nueva instancia de la cadena.
Para más información, consulte Tipo de datos String (cadena).
|
undefined
|
Simple. El tipo de
datos undefined (no definido) contiene un valor: undefined. Este es el
valor predeterminado de las instancias de la clase Object. Sólo puede asignar
el valor undefined a variables que pertenezcan a la clase Object.
Para más información, consulteTipo de datos undefined (no definido).
|
Void
|
Complejo. El tipo de
datos Void (vacío) sólo contiene un valor: void. Este tipo de datos se
usa para designar funciones que no devuelven un valor. Void es un tipo de
datos complejo que hace referencia al tipo de datos Void simple. Para más
información, consulteTipo de datos Void (vacío).
|
Tipos estructurados y herencia SQL
Antes de SQL: 1999 el sistema de tipos de SQL consistía en un conjunto bastante
sencillo de tipos predefinidos. SQL: 1999 añadió un sistema de tipos extenso a
SQL, lo que permite los tipos estructurados y la herencia de tipos.
Los tipos estructurados permiten representar directamente los atributos
compuestos de los diagramas E-R. Por ejemplo, se puede definir el siguiente
tipo estructurado para representar el atributo compuesto nombre con los
atributos componentes nombre_pila y apellidos:
create
type Nombre as
(nombre_pila varchar(20),
apellidos varchar(20))
final
De manera parecida, el tipo estructurado siguiente puede usarse para
representar el atributo compuesto dirección:
create
type Direccion as
(calle varchar(20),
ciudad varchar(20),
codigo_postal varchar(9))
not
final
En SQL estos tipos se denominan tipos definidos por el usuario. La
especificación final indica que no se puede crear subtipos de nombre,
mientras que la especificación not final de dirección indica que se
pueden crear subtipos de dirección. Ahora se pueden usar estos tipos
para crear atributos compuestos en las relaciones, con sólo declarar que un
atributo es de uno de estos tipos. Por ejemplo, se puede crear una tabla cliente
de la siguiente manera.
create
table cliente (
nombre Nombre,
direccion Direccion,
fecha_nacimiento date)
O bien, realizando una estructura más del tipo Cliente y generar la tabla a
partir de ella:
create
type TipoCliente as
(nombre Nombre,
direccion Direccion,
fecha_nacimiento date)
not final
create table cliente of TipoCliente
Se puede tener acceso a los componentes de los atributos compuestos usando la
notación “punto”; por ejemplo, nombre.nombre_pila devuelve el
componente nombre de pila del atributo nombre. El acceso al atributo nombre
devolvería un valor del tipo estructurado Nombre.
La siguiente consulta ilustra la manera de tener acceso a los atributos
componentes de los atributos compuestos. La consulta busca el apellido y la
ciudad de cada cliente.
select nombre.apellido,
direccion.ciudad
from cliente
En SQL: 1999 se usan funciones constructoras para crear valores de los tipos
estructurados. Las funciones con el mismo nombre que un tipo estructurado son
funciones constructoras de ese tipo estructurado. Por ejemplo, se puede
declarar una función constructora para el tipo Nombre de esta manera:
create
function Nombre(nombre_pila varchar(20),
apellidos varchar(20))
returns Nombre
begin
set
self.nombre_pila = nombre_pila;
set
self.apellidos = apellidos;
end
De manera predeterminada, cada tipo estructurado tiene una función sin
argumentos que configura los atributos con sus valores predeterminados.
Cualquier otra función constructora hay que crearla de manera específica.
La instrucción siguiente ilustra la manera de crear una nueva tupla de la
relación Cliente. Se da por supuesto que se ha definido una función
constructora para Dirección, igual que la función constructora que se
definió para Nombre.
insert
into Cliente
values
(new Nombre(‘Martín’,
‘Gómez’),
new Direccion(‘Calle
Mayor 20’, ‘Madrid’, ‘28045’),
date
‘22-8-1960’)
Herencia de tablas
Las subtablas de SQL se corresponden con el concepto de especialización /
generalización de E-R Por ejemplo, supóngase que se define la tabla personas
de la siguiente manera:
create
table personas of Persona
A continuación se puede definir las tablas estudiantes y profesores
como subtablas de personas, de la manera siguiente:
create
table estudiantes of Estudiante
under personas
create
table profesores of Profesor
under personas
Los tipos de las subtablas deben ser subtipos del tipo de la tabla madre. Por
tanto, todos los atributos presentes en personas también están presentes en las
subtablas.
Además, cuando se declaran estudiantes y profesores como
subtablas de personas, todas las tuplas presentes en estudiantes
y profesores pasan a estar también presentes de manera implícita en personas.
Por tanto, si una consulta usa la tabla personas, no sólo encuentra
tuplas directamente insertadas en esa tabla, sino también tuplas insertadas en
sus subtablas, es decir, estudiantes y profesores. No obstante,
esa consulta sólo puede tener acceso a los atributos que están presentes en personas.
SQL permite hallar tuplas que se encuentran en personas pero no en sus
subtablas usando en las consultas “only personas” en lugar de personas.
La palabra clave only también puede usarse en las sentencias delete
y update. Sin la palabra clave only, la instrucción delete
aplicada a una supertabla, como personas, también borra las tuplas
que se insertaron originalmente en las subtablas (como estudiantes);
por ejemplo, la instrucción
delate
from personas where P
Borrará todas las tuplas de la tabla personas, así como de sus subtablas
estudiantes y profesores, que satisfagan P. Si se añade la
palabra clave only a la instrucción anterior, las tuplas que se
insertaron en las subtablas no se ven afectadas, aunque satisfagan las
condiciones de la cláusula where.
SQL soporta dos tipos de conjuntos: arrays y multiconjuntos; los
tipos array se añadieron en SQL: 1999, mientras que los tipos multiconjuntos se
agregaron en SQL: 2003. Un multiconjunto es un conjunto no ordenado, en
el que cada elemento puede aparecer varias veces.
Supóngase que se desea registrar información sobre libros, incluido un conjunto
de palabras clave para cada libro. Supóngase también que se deseara almacenar
almacenar el nombre de los autores de un libro en forma de array; a diferencia
de los elementos de los multiconjuntos, los elementos de los arrays están
ordenados, de modo que se puede distinguir el primer autor del segundo autor,
etc. El ejemplo siguiente ilustra la manera en que se puede definir en SQL
estos atributos como arrays y como multiconjuntos.
create type Editor as
(nombre varchar(20),
sucursal varchar(20))
create
type Libro as
(titulo varchar(20),
array_autores varchar(20)
array[10],
fecha_publicacion date,
editor
Editor,
conjunto_palabras_clave varchar(20)
multiset)
create
table libros of Libro
Tipos de arreglo multiconjunto en SQL
SQL soporta dos tipos de conjuntos
arrays y multiconjuntos. Un multiconjunto es un conjunto no ordenado, en el que
cada elemento puede aparecer varias veces. Los multiconjuntos son como los
conjuntos, salvo que los conjuntos permiten que cada elemento aparezca,
como mucho una vez.
Estos se pueden definir como arrays
y como multiconjuntos:
Créate type Editor as(nombre
varchar(20),
sucursal varchar(20))
créate type Libro as
(titulo varchar(20),
array_autores varchar (20) array [10],
fecha_publicacion date,
editor Editor,
conjunto_palabras_clave
varchar(20)multiset)
create table libro of Libro
La
primera instrucción define el tipo denominado Editor, que tiene dos componentes:
nombre y sucursal. La segunda instrucción define el tipo estructurado Libro,
que contiene titulo, unarray_autores, que es un array de hasta de diez nombres
de autor, una fecha de publicación, un editor y un multiconjunto de
palabras clave. Finamente se crea la tabla libros, que contiene las tuplas del
tipo libro.
Identidad De Los Objetos Y Tipos De Referencia En SQL
Bases
de datos a menudo se mantienen mensualmente como un resumen de muchas cosas
como compras de negocios, ventas, gastos y a menudo con raciones útiles. Puede
solicitarse con columnas para diferentes rúbricas con las figuras de un libro u
otra fuente de información pertinente. Muchas veces esta base de datos es
necesaria para mantener en forma mensual para que las cifras que se han
registrado puedan dar rápidamente una suma o incluso un total al final del año.
Implementación de las características O-R
La orientación a objetos constituye una nueva
forma de pensar acerca de problemas empleando modelos que se han organizado
tomando como base conceptos del mundo real.
Los modelos orientados a objetos son útiles para comprender problemas, comunicarse con expertos en esa aplicación, modelar empresas, preparar documentación y diseñar programas y bases de datos. Las bases de datos orientadas a objetos unen dos tecnologías:
Los modelos orientados a objetos son útiles para comprender problemas, comunicarse con expertos en esa aplicación, modelar empresas, preparar documentación y diseñar programas y bases de datos. Las bases de datos orientadas a objetos unen dos tecnologías:
La de las bases de datos y la
de los lenguajes orientados a objetos. Los LPOO aportan gran capacidad en la
manipulación de datos, pero no implementan el almacenamiento y consulta de
grandes volúmenes de datos.
Por el contrario, las bases de
datos convencionales aportan un dominio de las técnicas de almacenamiento y
consulta de grandes volúmenes de datos, aunque su capacidad de manipulación es
limitada.
Las bases de datos orientadas
a objetos pretenden unir la capacidad de manipulación de datos de los LPOO con
la capacidad de almacenamiento y consulta de los SGBD.
Ø Crear objetos
Ø Crear clases para
organizar objetos
Ø Llamar métodos para
acceder objetos específicos
Ø Estructuras jerárquicas
de herencia para organizar clases y sub-clases
No hay comentarios:
Publicar un comentario