Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ParteIII PDF
ParteIII PDF
Modelo
Orientado a
Objetos
77
Parte III Modelo orientado a objetos.
En estos momentos el MOO ha cobrado un reconocimiento internacional que se demuestra
con la expansión y utilización de productos de software que soportan éste modelo. El
paradigma de la OO es un nueva forma de pensar acerca del proceso de descomposición de
problemas y del desarrollo de soluciones, que es el resultado de la evolución de los
conceptos de la informática y que llevó a una revolución en éste campo. Esta tecnología
afecta al análisis, diseño y a la programación de sistemas y a la interfaz del usuario final
con el entorno de aplicación.
78
Capítulo 4
Introducción al
modelo orientado
a objetos.
79
Capítulo 4 Introducción.
Khoshafian, S. and Abnous, R. “Object-orientation: concepts, languages, databases, user interfaces. Jhon
Wiley & Sons, Inc.1990.
80
Tecnología Nueva filosofía
Orientada que permite
a Objetos representar más
semántica. Los usuarios
necesitan incorporar
persistencia a los
Tecnología Técnicas que lenguajes orientados a
de las han mostrado objeto
Bases de datos su eficacia en el
almacenamiento
y manipulación
de la información.
4.1.1 – Clase.
81
Independencia de los datos: Inmunidad de las aplicaciones a los cambios en la estructura
de almacenamiento y en la técnica de acceso.
Entonces, se puede cambiar la representación de los objetos y la forma de accesar la
información sin tener que volver a escribir ninguna de las aplicaciones que utilicen esos
objetos.
Mamífero Atributos
Perro León
Nombre
Cantidad de Patas
… Métodos
Mundo real
Implementación en un lenguaje
de programación orientado a
objetos.
Figura 4.1 Clase.
4.1.2 – Objeto.
Es un concepto del mundo real que puede ser modelado por una clase. Es una
abstracción del mundo real (Figura 4.2).
Tiene un tipo, es decir, es una variable de un tipo dado.
Tiene un valor, es decir, en cada momento está en un estado que depende del valor de
sus atributos.
Posee un identificador de objeto único generado por el sistema que nunca puede ser
modificado, no es una propiedad del objeto (como lo eran las llaves primarias) y el
programador no conoce su valor ni le interesa (puede considerarse como un atributo
oculto en el sentido de que por lo general no puede percibirse ni manipularse
directamente).
Los atributos pueden ser atómicos (los definidos por el sistema, por ejemplo, entero) y
complejos (otros objetos).
Perro León
Mundo real
Figura 4.2 Objetos.
82
4.1.3 – Encapsulamiento
Cada tipo de dato abstracto se puede ver como si tuviera dos caras. Desde el exterior, el
cliente (usuario) de un tipo de datos abstracto ve nada más un conjunto de operaciones,
que definen el comportamiento de la abstracción. En la otra cara el programador, que
define la abstracción, ve las propiedades que se usan para mantener el estado interno del
objeto y la implementación del comportamiento (Figura 4.3).
Lo anterior se basa en dos principios de David Parnas expuestos en “On the criteria to be
used in descomposing systems into modules”, en 1972:
Uno debe proporcionar al usuario toda la información necesaria para usar correctamente
el módulo, y “nada más”.
Uno debe proporcionar al implantador toda la información necesaria para completarlo,
y “nada más”.
Dicho de otra manera, si usted no necesita conocer determinada información, no debe tener
acceso a ella.
Este encubrimiento explícito e intencional de información es la “ocultación de
información” o “encapsulamiento”. El concepto de independencia de los datos está muy
relacionado con él, por esto al encapsulamiento de los objetos se le conoce como
abstracción de la información.
Valores:array[1..max] of integer
Meter TopeActual:0..max
Sacar Function Tope:Boolean
Tope Begin
Tope:=TopeActual=max
End;
…
Es la forma en que un objeto interactúa con otros objetos. Un objeto emisor (cliente)
envía un mensaje a otro receptor (servidor) (Figura 4.4).
83
Ignorar.
Acciones del Contestar.
receptor Ejecutar una acción que implique modificaciones
internas de su estado.
Enviar un mensaje a otro objeto.
Cada objeto será capaz de responder a diferentes peticiones de servicio. Esto no debe
confundirse con tradicionales llamadas de funciones de la programación tradicional. Las
llamadas a funciones son utilizadas para aplicar algún proceso estándar a los datos, que
se reciben como parámetros, como parte de la ejecución de otra función.
Cliente Mensaje
M4 M1 Servidor/cliente
Objeto 1 M2 M3
M3 M2 Objeto 2
Mensaje M1
M4 M3
Objeto 3
M1 M2
servidor
Figura 4.4 Comunicación a través de mensajes.
4.1.5 – Meronimias.
84
actividad/subactividad
lugar/área
componente/objeto integral (agregación)
miembro/colección (agrupamiento)
Agregación
Es un tipo de datos definido en términos de otros. Si tenemos tipos de objetos E1, E2, …,
En; se puede definir un objeto agregado E tal que E1, E2, …, En son componentes del
objeto tipo E si todos se relacionan para cumplir una función. E1, E2, …, En pueden ser
simples o complejos. De estos últimos se tiene el identificador.
Pueden distinguirse:
Agregación simple de atributos para construir un objeto.
E - tipo cover
M - Tipo miembro
Flota cover(barco)
Departamento Nombre
cover(Curso que imparte)
cover(Persona que trabaja en él)
85
Generalización
Sean Object1, Object2, …, Objectn tipos de objetos con propiedades comunes, entonces
se puede definir un tipo de objeto Object tal que sus atributos y comportamiento, son
los comunes para los Objecti/i= 1,2,…,n de forma que los Objecti son subtipos de
Object.
Trabajador
Nombre
CI
Dirección
Salario
Cambiar salario
Cambiar dirección
Docente Administrativo
Categoría Área
Departamento Labor
Cambiar categoría Cambiar área
Cambiar departamento Cambiar labor
Cambiar salario Cambiar salario
Pueden clasificarse, tal como se vio en la parte anterior, en:
Total sin solapamiento.
Total con solapamiento.
Parcial sin solapamiento.
Parcial con solapamiento.
El modelo relacional se basa en la teoría matemática de las relaciones por lo que una base
de datos relacional se ve como una tabla en la que se almacenan datos atómicos. Los
objetos del mundo real son más complejos al encerrar más semántica y una BDOO pretende
manipular ésta complejidad.
86
No obstante existen autores (entre ellos C. J. Date) que buscan similitudes entre ambos
modelo, pero aunque hay conceptos que coinciden, un objeto es algo más.
Soluciones
a. Ampliar el modelo relacional en forma apropiada. En este sentido han surgido
extensiones del modelo que agregan más semántica de manera que se pueden representar
otras abstracciones tal como se dan en le mundo real.
Ej.: • Los tipos de datos de una columna pueden ser otra tabla (para datos complejos).
• Métodos asociados con tablas.
• Tablas organizadas en jerarquías que heredan los esquemas de las tablas
ancestras.
87
b. Desechar por completo el modelo relacional y sustituirlo por algo nuevo. Los modelos
que han surgido a partir de aquí son:
• semántico
• deductivo
• orientado a objetos
1. Más allá de lo servicios tradicionales de gestión de datos, los SGBD de 3ra generación
proporcionarán apoyo a estructuras de objeto y reglas más ricas.
1.1 Deben tener un sistema rico de tipos, siendo deseable:
Un sistema de tipos de datos abstractos para construir nuevos tipos
básicos.
Un constructor de tipos de matrices.
Un constructor de tipos de secuencias.
Un constructor de tipos de registros.
Un constructor de tipos de conjuntos.
Funciones como tipos.
Un constructor de tipos de unión.
Composición recursiva de los constructores anteriores.
1.2 Permitir que los tipos se organicen en una jerarquía de herencia (simple y
múltiple).
1.3 Inclusión de funciones (métodos de las clases) en la BD y permitir que los
diseñadores de aplicación tengan a su alcance los beneficios de la
encapsulación.
1.4 Asignación automática de identificadores solo cuando no se disponga de una
clave primaria.
1.5 Inclusión de reglas (activaciones, restricciones) en la BD no asociadas con
los métodos.
2. Los SGBD de 3ra generación deben subsimir a los SGBD de 2da generación.
2.1 Todo el acceso a una BD debe hacerse a través de un lenguaje de consulta no
procedimental y de alto nivel.
88
2.2 Permitir realizar cambios sin afectar la aplicación a través del uso de vistas
actualizables o colecciones virtuales que en los SGBD de 2da generación
garantizan mejor que en los de 1ra encapsular el acceso a la BD, pero se
debe trabajar más en esto.
2.3 Debe quedar oculta la gestión interna que haga el sistema de gestión (los
detalles físicos) a los programadores de aplicaciones. No se puede renunciar
a la independencia de los datos.
2.4 Para especificar colecciones (tales como matrices, conjuntos, secuencias,
etc.) se debe usar alguna de las siguientes vías:
Extensional : la representación es una colección de
apuntadores en el que la condición de miembro de cada conjunto se
determina manualmente por el programador de la aplicación.
Ej.: Alumnos (nombre,edad,promedio)
Grupos (número, integrantes)
Apuntadores a los alumnos que
pertenecen al grupo
Intencional: la representación se especifica mediante expresiones
SQL, de manera que el establecimiento de la condición de miembros
se mantiene de forma automática.
Ej.: Supongamos que los alumnos se clasifican teniendo en
cuenta la edad.
Grupos (número, edad mínima, edad máxima, integrantes)
3. Deben estar abiertos a otros subsistemas.
3.1 Ser accesibles desde múltiples lenguajes de alto nivel.
3.2 Lenguaje común de definición y manipulación de datos.
3.3 SQL es la forma universal de expresar consultas por lo que es un candidato
razonable como lenguaje de consulta.
3.4 La relación entre el servidor y una estación de trabajo remota debe ser
usando expresiones de consultas.
Hay muchas propuestas de las anteriores que cumplen los SGBDOO, pero hay otras
donde hay profundos desacuerdos.
El modelo relacional se basa en fundamentos tan sólidos como el álgebra y el cálculo
relacionales por lo que resulta casi imposible desechar por completo el modelo
relacional y sustituirlo por algo nuevo, pero requiere de grandes cambios para
satisfacer las demandas.
Actualmente en el mercado:
89
Numerosos SGBDR
Más de 20 SGBDOO.
SGBDR que incluyen capacidades de la orientación a objetos y viceversa.
No existe un modelo de datos (de objetos) comúnmente aceptado y a la vez no existen
suficientes fundamentos formales que soporten un posible modelo.
Existe una fuerte actividad experimental y se están desarrollando sistemas al mismo
tiempo que se proponen modelos.
Una BDOO es una colección de clases e instancias de clases (objetos) que pueden ser
almacenados y recuperados por un SGBDOO. Es un sistema diseñado para almacenar y
recuperar objetos complejos en lugar de artículos contenidos en tipos de datos simples. No
90
existe una definición estándar de los que es un SGBDOO, no obstante se aceptan las reglas
propuestas en la 1ra Conferencia Internacional de BDOO y BDD.
Grady Booch plantea que es un programa de computación que combina la semántica de los
lenguajes de programación orientado a objetos con la manipulación de datos y facilidades
de consulta de un sistema de gestión de base de datos convencional.
91
Almacén de objetos: a cada clase se le asocia su extensión (conjunto de
objetos que son muestra de ella). El usuario puede manipularlos aplicando
operaciones sobre todos o algunos de los objetos que lo forman.
7. Sobrecarga, enlace tardío y redefinición (“No unirás prematuramente”).
Sobrecarga: utilización del mismo nombre para diferentes operaciones.
Enlace tardío: traducción de los nombres de las operaciones a direcciones de memoria
en tiempo de ejecución.
Redefinición: redefinición de la implementación de las operaciones con el mismo
nombre por cada objeto según su tipo.
8. Posibilidad de hacer cálculos complejos (“Harás cálculos complejos”).
Expresar cualquier función computable utilizando el DML de un sistema de BD sin
necesidad de diseñar nuevos lenguajes de programación. Los cálculos complejos
pueden introducirse a través de la conexión con los lenguajes de programación
existentes.
9. Persistencia (“Recordarás tus datos”).
Capacidad de un objeto de conservar su valor en el espacio y en el tiempo.
10. Gestión de almacenamiento secundario (“Manejarás bases de datos muy grandes”).
Incluye Indice
Agrupamiento de datos
Introducción de datos en memoria interna
Selección de la vía de acceso
Optimización de consulta
Estas características son invisibles para el usuario (el programador no debe escribir
código para mantenerlas), pero deben existir para garantizar el buen funcionamiento
de las aplicaciones.
11. Control de concurrencia (“Aceptarás a los usuarios concurrentes”).
Asegurar una coexistencia armoniosa entre los usuarios que trabajan simultáneamente
sobre la BD.
12. Recuperación (“Te recuperarás de los fallos de Hardware y Software”).
El sistema debe volver a algún estado coherente de los datos en caso de fallos,
cuando se realicen transacciones.
13. Facilidad de consulta Ad hoc (“Dispondrás de un mecanismo simple de consulta de
datos”).
No es necesario que se haga en la forma de un lenguaje de consulta sino que se
proporcione el servicio.
Debe satisfacer los siguientes criterios:
92
a. Consultas de alto nivel (declarativas) donde se enfatice en el qué y no en el
cómo.
b. La formulación debe permitir alguna forma de optimización de la consulta.
c. Independiente la consulta de la aplicación para que pueda funcionar en cualquier
BD.
Defensores de las BDOO Detractores de las BDOO
Plantean que no se necesita mucha Una de las grandes ventajas de los SGBDR
complejidad porque en la descripción es el lenguaje de consultas y los usuarios se
del comportamiento se especifica todo han acostumbrado al uso de SQL. Sería un
lo que se desea de él. error desechar estas ideas. Además los
SGBD de 3ra generación deben subsimir a
los de 2da generación.
OQL (Object Query Language)
Tiene una sintaxis parecida al SQL, pero
Situación actual es más rico porque provee de primitivas
de alto nivel para tratar estructuras como
arreglos, listas y conjuntos de forma
eficiente. Su gramática está
perfectamente definida, su
implementación total es un reto.
1. Herencia múltiple
2. Comprobación e inferencia de tipo
3. Distribución: objetos ubicados en diferentes procesadores.
4. Transacciones de diseño: soporte a transacciones largas y/o anidadas.
5. Versiones: Posibilidad de mantener las distintas versiones que de un objeto (como
objeto no como clase) puede haber.
BDR BDOO
La normalización convierte a los atributos en Los atributos de las clases no solo son tipos
no descomponibles y en la práctica tienden a de datos simples, sino que además pueden
ser tipo de datos simples (entero, real, ser referencias a otras clases.
cadena, fecha , etc.)
93
BDR BDOO
Las operaciones que se pueden hacer sobre Las clase encapsulan el comportamiento de
las relaciones se restringen a la actualización los objetos con las estructuras de datos. Se
y recuperación de tuplas. pueden acceder a facilidades
implementadas en otras clases a través de la
herencia.
Se necesitan muchas tablas normalizadas Los objetos están almacenados como un
para representar a un objeto del mundo real todo coherente por lo que la recuperación de
por lo que para recuperar objetos complejos, un objeto es una operación única, aunque
hay que hacer uniones de tablas. Esto es un puede ser grande. Esto se hace siguiendo los
proceso lento. identificadores.
Las propiedades de una entidad son Todos los objetos tienen un identificador
suficientes para identificar, es decir, uno o único que no tiene nada que ver con los
varias propiedades únicas y constantes atributos.
identifican a las tuplas de la entidad. Las
propiedades de unicidad y constancia no
siempre están presentes en el mundo real por
lo que a veces hay que introducir
identificadores artificiales.
Requieren que se fuerce la integridad Las clases son una abstracción que además
referencial. Algunos sistemas ofrecen de datos encapsulan a operaciones que
facilidades para especificarla, pero aún en pueden ser aplicadas sobre las instancias de
estos casos es responsabilidad del las clases. Además es posible cambiar la
programador asegurar que todas las implementación de estas operaciones sin
restricciones se cumplan. afectar otras clases ni las transacciones en
El modelo relacional es incapaz de que pueda aparecer (independencia) .
representar toda su semántica (por ej., no es Esto significa que las reglas de integridad
posible representar el hecho de que una pueden ser implementadas como métodos.
relación es de 1:1 ó 1:m). Como las aplicaciones comparten clases, no
Entre las aplicaciones no se comparte el solo comparten estructuras de datos sino
código, por lo que es muy difícil asegurar la también restricciones.
consistencia de los datos
Brindan pocas posibilidades para expandir o Están implementadas para permitir añadir
modificar la estructura de datos. Cambiar el más semántica.
dominio de los atributos, por ej., implica Ej.: ORION
reescribir las relaciones y cambiar las cambiar contenido de clases
aplicaciones que hacen uso de ellas. cambiar la jerarquía de clases
cambiar el esquema
94
BDR BDOO
Lenguajes de acceso no basados en Fundamentalmente basados en
procedimientos, es decir, son declarativos, procedimientos y no declarativos en el modo
basados en una lógica que está sometida a la de acceso, a través de relaciones declarativas
optimización de una consulta. explícitamente entre objetos y de estructuras
de clasificación. Por lo que requieren menos
optimizaciones y para las consultas de
objetos complejos pueden ser más
eficientes.
Existe un número fijo predefinido de eventos Cada método es un evento potencial, esto
primitivos (Insertar, Modificar, Eliminar). provoca que sea más difícil su detección.
1. La brecha semántica.
Elimina la llamada “brecha semántica” entre el dominio de la aplicación y su
representación en el medio de almacenamiento persistente. Esto es posible a través de
los conceptos de la OO que permiten representar las complejas entidades del mundo
real y manipularlas.
2. Requerimientos para aplicaciones ingenieriles y de automatización.
3. Errores de impedancia
Alivia los errores de impedancia entre los lenguajes de programación y los SGBD. En
aplicaciones complejas, los datos son recuperados de la BD usando un lenguaje de
consulta (Ej.: SQL) y entonces se manipularán a través de rutinas escritas en
lenguajes de programación convencionales, que son procedurales (Ej. : C, PL/1). Los
lenguajes de consulta son de alto nivel y más declarativos. Los lenguajes de la BD y
los lenguajes de programación son fuertes en alguno de los dos. Los LMD se una
BDOO típicamente incorporan:
estructuras de control,
variables e instrucciones de asignación,
rica colección de tipos de datos y clases, y
construcciones para definir métodos, funciones, tipos abstractos de datos (clases).
Algunas BD convencionales incorporan constructores de programación a través de
los Lenguajes de 4ta Generación (L4G).
95
4.3.6 – Limitaciones.
Los modelos relacional y OO tienen dos puntos comunes importantes. Por un lado resultan
una mejora significativa contra el almacenamiento en ficheros y, por otro lado, ambos
intentan modelar cosas reales del mundo real y las relaciones entre ellas. Su diferencia
radica en que lo que vemos del mundo se capta de diferente forma en dependencia del lente
que usemos.
El MR y el SQL son aceptados como estándares, pero tienen problemas para trabajar con
datos complejos. A las BDOO se les critica sus limitaciones en el apoyo a las capacidades
de las bases de datos, en particular lo referente al lenguaje de consulta.
96
Hay un conjunto de aplicaciones que requieren aprovechar lo bueno de ambos modelo, por
lo que en los últimos años ha ido cobrando una mayor fortaleza la necesidad de un modelo
híbrido u objeto-relacional que permita dar soporte a las exigencias de éstas aplicaciones.
Existen compañías, como la Petrotechnical Open Software que ya decidieron moverse hacía
éste modelo por la necesidad de manipular videos, imágenes en 2 y 3 dimensiones, etc.; y
seguir explotando las capacidades administrativas de la tecnología relacional.
Expertos de compañías productoras de gestores de BD que trabajan en ésta línea plantean
que las dos tecnologías son complementarias y pueden trabajar juntas en beneficio de los
usuarios, y que Internet abre un campo de aplicaciones donde éste modelo es factible de
aplicar.
4.4.1 Definición.
4.4.2 Características.
Judth R. Davis definió un conjunto de rasgos que debe cumplir un SGBDOR, no obstante
ninguno de los productos existentes apoya todos estos rasgos, y cada uno lo hace a su
manera. Estas características son:
1. Permitir tipos de datos extensibles como listas, tipos de datos definidos por el usuario,
series y jerarquías de objetos.
2. Permitir funciones extensibles como funciones definidas por el usuario.
3. Permitir métodos de acceso definidos por el usuario que puedan mejorar la actuación
de los tipos de datos definidos por el usuario.
4. Navegación entre objetos a través del identificador único, lo que ofrece una nueva
forma de definir índices y accesar a datos denormalizados eficientemente.
5. Habilidad para entender y manipular los volúmenes de tipo de datos complejos que
permitan hacer consultas como: encontrar todos los lugares con una textura
determinada en un álbum fotográfico.
6. Integridad lógica al nivel del modelo de objeto: cuando un objeto se elimina, todos los
objetos que dependen de él se eliminan.
7. Apoyo para SQL y tablas relacionales.
“Object-relational database managers (ORDBMD)”. Distributed computing monitor, Feb 1995 V10 n2
p3(27).
97
8. Funciones de manipulación de BD robustas (seguridad, integridad a través de la
manipulación de transacciones, facilidades para salva/restaura, capacidades de BD
distribuidas, replicación de datos, procesamiento paralelo, etc.).
9. Acceso a datos heterogéneos.
10. Herramientas para visualizar y manipular datos complejos.
Existen diferentes formas de manifestarse los sistemas híbridos: construir una solución
total, usar herramientas de desarrollo OO (front-end) con un back-end relacional, y
adicionar características OO a SGBDR.
Michael Stonebraker se considera el padre de la tecnología híbrida pues empezó a trabajar a
finales de los ’80, en la Universidad de California, con un grupo de estudiantes
universitarios y un programador a tiempo completo, en el desarrollo de una BD objeto-
relacional. Como resultado se obtuvo Postgres, que está basado en SQL en vez de en un
lenguaje de 3ra generación OO. La madurez de ésta tecnología la alcanzó con Illustra.
Illustra Information Technologies fue fundada en 1992 por Stonebraker y es la productora y
comercializadora de éste producto.
La primera versión de Illustra aparece en Agosto de 1993, en 1995 ya contaba con 180
clientes. Es más cercana al MR y se caracteriza por:
No siempre se almacenan datos en tablas, se pueden escribir objetos complejos, como
datos multimedios, en ficheros físicos que son manipulados por el SGBD aparte de los
datos tabla.
Una columna puede tener datos simples o tipos de datos declarados por el usuario a
través de sentencias de Illustra.
Una tabla puede heredar columnas de otra.
Con la sentencia SELECT se pueden recuperar todas las cosas, invocar métodos y usar
su retorno como columna.
El front-end es C++ o C, pero se ofrecen herramientas para Visual Basic y Excel.
Desde 1996 Illustra se integró al servidor Universal Informix, lo que provocó que Oracle
acelerar su paso en ésta tecnología para no quedarse atrás. Cuando todavía Oracle no había
incursionado en esto, Hewlett-Packard brindó Odapter que es una capa de software que
opera sobre un modelo relacional (la versión 7.0 de Oracle), brindando una vista OO,
aunque como Illustra está más cercana al MR. Odapter tiene más de 10 años y empezó
como un proyecto de BDOO (Iris).
Ya Oracle 8 incluye un soporte a objetos agregando una capa sobre la BD. Se permite
trabajar con datos que son videos, texto, Web y espaciales. Soporta SQL, PL/SQL y
extensiones de C++. Manipula imágenes, serie de tiempo y datos definidos por el usuario.
98
En 1992 aparece la primera versión de UniSQL desarrollado por el Dr. Won Kim que venía
trabajando desde hacía varios años en el campo de las BDOO tanto en el campo práctico
como en las investigaciones. UniSQL es un reflejo de estos esfuerzos pues, a diferencia de
otros productos, tiene más sabor OO por ,lo menos a nivel de sintaxis. Se caracteriza por:
Lenguaje de consulta conocido como SQL/X que es un SQL reforzado que agrega
nuevas cláusulas para apoyar colecciones, herencia, métodos, tipos de datos definidos
por el usuario y otras para facilitar la manipulación de objetos.
Hay una jerarquía para los datos multimedia.
Se pueden definir disparadores para clases que necesiten restricciones de integridad,
pero por lo general está dentro de los métodos.
Se usa SELECT y se puede invocar métodos excepto en la cláusula HAVING.
Interface con C++ y Smalltalk. Además hay una herramienta gráfica (Visual Editor),
un generador de reportes (Media Master) y una herramienta para el desarrollo rápido
de prototipos de aplicaciones (Object Master).
En estos momentos compañías como IBM, Informix, Oracle, Sybase y Microsoft continúan
trabajando en el desarrollo de éste tipo de productos.
Conclusiones.
El avance de los SGBDOO tiene un largo camino por delante, sobre todo porque éste nuevo
paradigma trata de acercarnos más a la realidad y ésta no es fácil de modelar. En estos
últimos año se ha avanzado algo en la fundamentación del modelo y los productos tienen
un soporte teórico más sólido.
Ante la situación actual de debilidad de los SGBDOO existentes en el mercado frente a los
SGBDR, se impone mezclar las técnicas OO con las relacionales y las últimas versiones de
SGBD fuertes en el MR (como Oracle con su versión 8.0) comienzan a implementar éste
modelo híbrido.
Las respuestas a las preguntas iniciales serían:
En qué se fundamenta la no compatibilidad del MR con las BDOO?.
99
¿Qué caracteriza al modelo híbrido?.
Referencias bibliográficas.
100
[Frank, 1995] Frank, M. “Object-relational hybrids: a look at technology and products that
blend object and relational”. DBMS July 1995 v8 n8 p46(7).
[Foley, 1996m] Foley, J. “Open the gates to object”. InformationWeek May 13m 1996
n579 p44(5).
[Foley, 1996a] Foley, J. “The race heats up”. InformationWeek August 19, 1996 n593
p14(2).
[Goddard, 1995] Goddard, D. “Object database technology: what’s ahead?”. DataBased
Advisor Nov. 1995 v13 n19 p64(5).
[Graham, 1994] Graham, I. “Object-oriented Databases”. 2da Edición. 1994.
[Hughes, 1991] Hughes, J.G. “Object-oriented Databases”. ”. Prentice Hall International
Group. 1991.
[Khoshafian, 1990] Khoshafian, S. and Abnous, R. “Object-orientation: concepts,
languages, databases, user interfaces. Jhon Wiley & Sons, Inc.1990.
[León, 1996] Leon, M. “Object database server up news”. InfoWorld Dec 9 1996 v18 n50
p14(1).
[Smith, 1995] Smith, t. “The objetct of VAR’S desires: vendors try to integrate DB,
relational DB”. Computer Reseller News, Oct 2 1995 n651 p59(1).
Stonebraker, 1991] Stonebraker, M. ; Lindsay, B. ; Gray, J. ; Carey, M. ; Brodie, M. ;
Bernstein, P. “Manifiesto del sistemas de BD de 3ra generación”. Novática, Vol. XVII
No. 91. 1991.
[Taschek, 1995] Taschek, J. “ODBMSs take on relational models”. PC Week Oct 9 1995
v12 n40 p89(2).
[Vowler, 1995] Vowler, J. “The business case for object database”. Computer Weekly
April 20, 1995 p16(1).
101
Capítulo 5
Capacidades de
las bases de datos
orientadas a
objeto.
102
Capítulo 5 Introducción.
Los diferentes sistemas que están apareciendo en respuesta a las demandas, no disponen
todavía de una base teórica consolidada, es decir, no hay un modelo común, por lo tanto
cada uno de ellos resuelve los problemas que se presentan de manera particular sin
considerar criterios de compatibilidad. Los SGBDR se desarrollaron sobre bases teóricas
tan sólidas como el álgebra y el cálculo relacional. En el caso de las BDOO el proceso ha
sido inverso, primero surgieron los productos.
A pesar de que la semántica que se representa en el MOO es más compleja que la reflejada
en el MR, la mayoría de los productos presentes en el mercado adaptan los algoritmos
tradicionales para el control de concurrencia, gestión de almacenamiento secundario, entre
otras capacidades de las BD. En estos momentos están apareciendo nuevos algoritmos que
explotan las potencialidades y características de éste enfoque. Sobre cómo se implementan
las capacidades de las BD en los SGBDOO trata éste capítulo.
Al finalizar debe conocer las respuestas a las siguientes preguntas:
¿Qué ventajas ofrece el uso del OID sobre la llave?.
¿Qué complejidad introduce para el control de concurrencia que se almacenen objetos?
¿Qué cambios presenta OQL respecto a SQL?.
¿Cómo se ha adaptado la definición de índices a las características del modelo?.
103
5.1.1 – Llave vs OID.
Llave
Es un atributo o conjunto de atributos que identifican unívocamente a una tupla en el
conjunto de tuplas que conforman una relación. Dos tuplas son diferentes si sus
identificadores (llave) son diferentes aunque el resto de sus atributos tengan el mismo
valor.
Diferencias:
Llave OID
Valores de uno o más atributos. Independiente del estado del objeto.
Requiere unicidad en la relación. Requiere unicidad en la BD.
Puede ser modificada No puede ser modificada
Tiene que ser definida por el diseñador a Son definidos a bajo nivel por el sistema.
partir del conocimiento que se tenga del
dominio de los atributos.
En ocasiones no tienen significado No es importante el valor que tenga, por
semántico porque es la sustitución de lo general no se brindan formas para
varios atributos llave. conocer su valor.
5.1.2 – Características.
Idénticamente iguales
Dos objetos son idénticos si ellos son los mismos objetos, es decir, si tienen el mismo
identificador.
Igualdad de valores
Dos objetos son iguales si los valores de todos sus atributos son iguales.
IDENTIDAD IGUALDAD
Igualdad superficial
Dos objetos son iguales superficialmente, aun cuando no son idénticos, si todos sus
atributos compartidos tienen valores y referencias iguales.
104
Físicos: contienen la dirección actual del objeto.
OID
Lógico: tiene la dirección actual que sirve para llegar a la
localización del objeto.
5.1.3 – Tipos de OIDs.
Tipos de OID:
1. Dirección:
Es la forma más simple de identificar un objeto por lo que es la forma tradicional que
usan los lenguajes de programación: dirección física. Las direcciones son generalmente
de 32 bits o menos y es la forma más eficiente para llegar a la información. Raramente
se usa por los sistemas de gestión porque ellos no permiten a un objeto ser movido o
eliminado si todas las referencias a ese objeto son encontradas o restablecidas.
2. Dirección estructurada:
Es la más usada por el modelo relacional, extensiones del relacional y el orientado a
objetos. Contiene componentes lógicos y físicos por lo tanto está formado por dos
partes:
# segmento y # página en el disco (físico)
# lógico del canal para poder determinar la posición dentro de la página.
Con ésta representación el objeto puede ser movido o eliminado relocalizando la
posición dentro de la página del canal.
3. Sustituto:
Un OID puramente lógico se genera usando cualquier algoritmo que garantice la
producción de identificadores únicos (por ejemplo, usar hora y fecha).
4. Sustituto tipado:
Es una variante del tipo anterior que contiene una identificación del tipo y una
identificación del objeto. La porción del objeto es generada para diferentes contadores
para cada tipo, segmentando el espacio de direcciones. Permite identificar el tipo de un
objeto con facilidad.
105
Producto Año Implementación
extraer el identificador de clase del objeto del identificador de
objeto especificado, y mirar la clase para determinar si el mensaje
es válido, y entonces puede buscar el objeto y enviar el método
correspondiente.
GemStone 1987 Es implementado físicamente con un puntero. Cuando un puntero a
1ra un objeto cesa de ser referenciado, entonces cesa de existir. No
existe una función “borrar un objeto” un objeto existe mientras lo
referencien.
Los métodos y las estructuras comunes de todas las instancias de
una clase son contenidas en un objeto conocido como definidor de
objetos de una clase (CDO- Class Defining Object) Todas las
instancias de una clase tienen una referencia a su CDO como parte
del identificador.
Permite a los usuarios asignar a los objetos nombres y crea con
ellos un diccionario de símbolos de manera que cada usuario tiene
su propio diccionario. Se puede llegar a un objeto a través de su
nombre.
5.2 – Persistencia.
Manipulación de los
objetos en un SGBDOO
Temporal Persistentes
Todo es persistente
106
Modelos de persistencia en SGBDOO
1. Por tipo: Es una característica implícita de todas las instancias de la clase. La creación
de una clase tiene el efecto de insertar la instancia en la BD. Por tanto la creación de
una instancia automáticamente implica persistencia.
Ej : ORION Para hacer un objeto persistente solo necesita crear el objeto.
2. Por llamado explícito: La creación de una instancia no tiene el efecto de insertarla en la
BD. Una instancia creada durante la ejecución de un programa es eliminada al final del
programa sin que sea persistente. Para hacerla persistente el usuario podría darle
nombre o insertarla en una colección de objetos persistentes.
Ej : O2 Utiliza las dos formas
GemStone: Asociar un nombre externo al objeto.
3. Por clasificación : Las clases se clasifican en clases persistentes y temporales. Todas las
instancias de clases persistentes son automáticamente creadas como instancias
persistentes.
Ej : GemStone Posee clases persistentes por lo que todos los objetos definidos a partir
de ellas o de sus hijas son persistentes aún cuando no se le haya añadido un nombre.
5.3 – Transacciones.
Una transacción es una unidad de trabajo que corresponde directamente a una unidad activa
de la empresa que la BD modela. En el contexto de un sistema multiusuario de BD a los
procedimientos se les llama frecuentemente transacciones.
5.3.1 – Características.
107
Las transacciones son unidades atómicas de actualización, esto es, el SGBD asegura que
todos los cambios en la transacción se hacen permanentes en la BD o no se hacen.
Cuando una transacción no se hace completamente, se debe retroceder a su estado inicial y
restaurar la BD a su estado inicial.
Una transacción solo puede tener dos posibles resultados: terminó con éxito o abortó.
Asume que las transacciones son cortas y accesan a pocos datos, pero las aplicaciones
actuales requieren transacciones que pueden durar días o más tiempo y pueden abarcar
varias aplicaciones.
108
Transacción larga
Sección . . . Sección
Transacción Transacción Transacción Transacción
corta corta corta corta
Ej : Begin transaction
Incrementa a José el salario un 10%
Promueve a José como J’dpto
End transaction
Figura 4.6 Segmento de código de una transacción.
En GemStone el sistema recibe mensajes que le indican el resultado de la transacción :
System commitTransaction
System abortTransaction
109
5.4 – Control de concurrencia.
Transacción 1
Ejecución debe estar
Transacción 2 Base de datos sincronizada, es decir, los
efectos de la transacción
... compartida sobre la BD debe ser el que
se obtendría si ninguna otra
transacción estu- viera
Transacción n ejecutando
(se ejecutan concurrentemente
concurrentemente)
110
a) Granularidad de cerrojos
Grado de granularidad: Tamaño de los items que se pueden cerrar en un sistema
de BD.
Objeto: Es la elección obvia para un item cerrable.
Cuando una transacción desea el acceso a la mayoría de las instancias de una
clase Se debe asignar un cerrojo del mismo tipo sobre cada instancia de la
clase.
Por los conceptos de herencia, y en particular el de generalización, se
recomienda usar un protocolo de granularidad múltiple que implique que un
cerrojo de un tipo en un nodo hijo se traduzca en la asignación de un tipo de
cerrojo al nodo padre.
Tipos de cerrojo:
Da acceso de lectura a un objeto y previene que cualquier otra
Lectura transacción actualice el objeto. Es con frecuencia llamado lectura
compartida ya que cualquier transacción puede poseer un cerrojo
de lectura sobre un objeto al mismo tiempo.
Escritura Da acceso de lectura/escritura a un objeto y, mientras está activo,
previene a cualquier otra transacción que trate de accesar el objeto.
Es con frecuencia llamado escritura exclusiva ya que da a una
transacción acceso exclusivo a un objeto mientras el cerrojo está
activo.
111
Cuando se realiza una actualización se crean copias locales de los objetos y en ellos
es donde se hacen los cambios.
Antes de actualizar la BD se comprueba si han ocurrido modificaciones con
respecto al estado inicial, en tal caso se reinicia la transacción. En caso contrario se
llevan los cambios a la BD.
3. Marcaje de tiempo (Time stampig).
A cada transacción se le marca un identificador, que puede ser :
el tiempo
el lugar que ocupa en la serialización de las transacciones ejecutando
concurrentemente.
Las operaciones de lectura/escritura se realizan en el orden del “Timestamp”.
Lista serial orden cronológico del comienzo de cada transacción.
Ejemplo:
Optimista sobre los objetos que es poco Pesimista sobre objetos que
probable que produzcan conflictos, es probable que produzca
evitando así el gasto de cerrojos. conflictos.
Se actualizan
escritura
Objetos Métodos
112
Trabajos muy recientes que aún no
Situación hasta
tienen el nivel de acuerdo a la teoría que
1994
existe en el procesamiento tradicional de
transacciones.
Ninguno de los mecanismos propuestos
ha sido implementado.
5.5 – Versiones.
Aplicaciones
CAD
Requieren tener conocimiento de
CASE la evolución del estado de los
objetos, es decir, necesitan de
CAM todas o parte de la versiones que
de los objetos han existido.
Automatización
de oficinas
...
Los SGBDOO requieren un controlador
(otras para las cuales
de versiones.
se hizo necesario el
MOO)
Se crean automáticamente
cuando el objeto se modifique.
Son implementadas en: Orion
Iris
Ontos
Objectivity/DB
113
5.6 – Lenguaje de consulta.
5.6.1 Características.
114
2. El encapsulamiento de los objetos es violado por algunos sistemas que permiten que los
lenguajes de consulta tengan accesos a todos los atributos de un objeto.
3. Inclusión de nuevas operaciones al lenguaje como cierres transitivos, recursión y reglas.
4. De manera general pueden ser aplicados los algoritmos usados para el procesamiento de
consultas en el modelo relacional sin embargo las consultas en el modelo objeto pueden
ser más complejas porque el modelo de datos es más rico. Por ejemplo, la introducción
de una jerarquía de tipos requiere que el procesamiento de la consulta busque por ella
para dar respuesta a una consulta.
Atributos El atributo es
complejos un objeto de
una clase dada.
115
RELATIONSHIP<agrupamiento><clase con la que <nombre de la
. LIST se relaciona> relación>
. SET
INVERSE<clase con la que :: <nombre que se le da a la relación en
relación> la clase con la que se relaciona
El atributo es
Atributos un grupo de
complejos objetos de una
. clase dada.
.
.
Ejemplo:
Curso
Nombre
Número
Prerrequisitos
Secciones Sección
INTERFACE Curso{
Número
EXTENT Cursos;
KEYS Nombre, Número;
ATTRIBUTE string Nombre;
ATTRIBUTE string Número;
RELATIONSHIP LISP <sección> tiene_secciones
INVERSE sección::es_sección_de;
RELATIONSHIP SET <curso> tiene_prerrequisitos
INVERSE curso::es_prerrequisitos_para;
RELATIONSHIP SET <curso> es_prerrequisito_para
INVERSE curso::tiene_prerrequisitos;
Ofrece (IN Semestre) RAISES (ya_ofrecido);
Baja (IN Semestre) RAISES (no_ofrecido);
}
INTERFACE Sección{
116
EXTENT Secciones;
KEYS Número;
ATTRIBUTE string Número;
RELATIONSHIP curso es_sección_de
INVERSE curso::tiene_secciones;
}
5.6.3 – OQL.
En el caso de SQL3 se requiere especificar el objeto al que se hace referencia pues estos se
ven desde la perspectiva de SQL. La diferencia de una consulta en SQL3 y OQL puede ser
muy sutil, pero existe.
117
Ej.:
SQL3 OQL
SELECT * FROM persona WHERE SELECT * FROM persona WHERE
persona.nombre = “Juan” nombre = “Juan”
5.7.1 – Indices.
118
Ejemplo:
Proyecto Compañía
Nombre Nombre
Compañía Dirección
Fecha Teléfono
Inicio Fax
Fecha Fin Divisiones
Tareas Persona J’compañía
J’ proyecto
Nombre División
Edad
Ciudad
Profesión
J’división
Tarea
Nombre
J’tÁrea
Caminos:
Proyecto.Compañía.Divisiones.J’división.Nombre
Proyecto.Tareas.Nombre
Proyecto.J’proyecto.Nombre
...
Estrategias de búsquedas:
Backward: Se conoce el valor del objeto que está al final en el camino.
Ej.: Seleccionar todos los proyectos que la compañía, para la cual
se desarrolla, tiene divisiones en New York.
Forward: Se conoce el valor del objeto que está al inicio del camino.
Ej.: Determinar las ciudades donde hay divisiones de la Compañía
para la cual se desarrolla el proyecto “ tiempo real en la
industria azucarera”.
2) H-Tree
119
Cada nodo tiene como máximo 2d entradas y , excepto la raíz, por lo menos d
entradas.
La raíz o no tiene hijos o tiene por lo menos dos.
Todas las hojas aparecen al mismo nivel.
Es una estructura de datos para almacenar varias organizaciones de índices
existentes.
3 15 34 37 57 61 66 101 102
21 25 28 74 78 87 96
El atributo común es el
Publicación ISSN
Revista Libro
Puede combinarse con Arbol B+ de manera que el nodo hoja además de la llave,
contiene una entrada para cada clase que tiene las instancias con el valor de la llave del
atributo índice.
4) Definir índices sobre la base del comportamiento de los objetos.
120
Una idea: Almacenan el resultado de la ejecución de los métodos en un índice en otra
estructura, lo que garantiza que una consulta que requiera invocar a un
método, cuyo resultado ya haya sido obtenido, puede ser evaluada
eficientemente.
5.7.2 – Almacenamiento.
En los SGBDR el sistema de gestión se encarga de optimizar las consultas que se realizan
buscando otra forma de expresarla que sea más óptima basándose en el álgebra relacional.
Esencia de la optimización de consultas: encontrar un plan de ejecución que minimice la
función de costo.
121
Involucra a los niveles físicos y lógicos
Nivel lógico: usa las propiedades semánticas del lenguaje para encontrar una expresión
equivalente.
Nivel físico: busca el mejor algoritmo para evaluar la expresión.
Necesidad de porque
Los objetos son tuplas.
nuevas técnicas
Un objeto puede referenciar
recursivamente a otros objetos.
Las consultas pueden incluir
llamadas a métodos
Ejemplo: ORION
Se crea un grafo en el que se representa la consulta y después se optimiza utilizando las
operaciones del álgebra en la que se puede dividir la consulta en varias consultas que se van
agrupando de acuerdo a los cluster definidos. Al final se evalúa en cada cluster lo que se
debe cumplir.
5.7.4 Agrupamiento.
Es el proceso de agrupar los objetos de forma tal que el acceso sea rápido.
Un segmento es la unidad de almacenamiento para el agrupamiento. Es uno grupo de
páginas físicas de tamaño variable que contiene un grupo de objetos relacionados.
Opciones:
1ra idea: los objetos frecuentemente usados estén físicamente en una misma página.
Un objeto por segmento: apropiado para objetos grandes.
Almacenar un objeto con todas sus subclases: es apropiado para un grupo de objetos
interrelacionados que son casi siempre accesados juntos.
Almacenar todas las instancias de un mismo tipo juntas: es apropiado cuando las
consultas requieren investigar todos los objetos de un mismo tipo.
122
5.8 Recuperación.
Soluciones:
1. Copias de seguridad.
2. Diario: fichero con la historia de todas las transacciones que hayan actualizado la BD
desde que se hizo la última copia de seguridad.
3. Recuperación en esquemas optimistas:
En un control de concurrencia optimista OO, cada transacción toma una copia
sombra de la tabla de objetos compartida.
Todas las actualizaciones se realizan sobre la copia sombra y sus cambios no son
visibles a otras transacciones.
4. Paginación con sombra (shadow paging):
Método
Se tiene una tabla de páginas, que se pueden copiar en la memoria principal, donde la
entrada i apunta a la página i de la BD.
Cuando una transacción comienza su ejecución una copia de la tabla de páginas actual
se copia en una tabla de páginas sombra.
Tabla de páginas sombra: representa el estado (consistente) de la BD antes de la
ejecución de la transacción y, por lo tanto, define un estado al cual la BD representa si
la transacción falla.
La tabla de páginas sombra se salva en disco y la transacción no lo modifica, todas las
actualizaciones de la transacción se hacen vía la tabla de páginas actual.
Extensión en BDOO: Se reemplazan las tablas de página por tablas de objeto. Cada entrada
relaciona al identificador del objeto con su posición en el disco.
123
5.9 Evolución del esquema.
Conclusiones.
La tecnología de las BD ha evolucionado hasta brindar una modelo mucho más rico
semánticamente tal como se aprecia en la tabla de la figura 4.8, pero todavía queda un largo
camino en el campo de la investigación en la búsqueda de nuevos algoritmos que exploten
las potencialidades de éste modelo.
124
FICHERO JERARQUICO/ RELACIONAL OO
RED
MODELO Ninguno Árbol/ gráfico Tablas de dos Tipo abstracto de
DE dimensiones datos.
DATOS
MODELO - Búsqueda Algebra relacional Activación de
BÁSICO navegacional objetos por
DE servicios.
ACCESO
CONTRI- - Capacidad. Modelo Abstracción
BUCIÓN Básica de acceso, simplificado de los natural de los
DML, DDL, datos. datos.
DQL, integridad Interdependencia Operaciones
de datos. Mayor capacidad complejas.
semántica Datos y código en
(relaciones m:n, BD.
agregaciones)
Figura 4.8 Evolución de la tecnología de BD.
Las respuestas a la preguntas formuladas en la introducción serían:
Qué ventajas ofrece el uso del OID sobre la llave?.
125
¿Qué complejidad introduce para el control de concurrencia que se almacenen objetos?
Referencias bibliográficas.
[Barry, 1996] Barry, D.K. “Terms of endearment”. Database Programming & Design Nov
1996 V9 n11 p50(7).
[Bertino, 1993] Bertino, E. and Martino, L. “Object-oriented Database Systems”. Addison-
Wesley Publishing, Co. 1993.
[Cattel, 1994] Cattel, R.G.G. “Object Data Management”. Addison- Wesley Publishing,
Co. 1994.
[Cauvet, 1992] Cauvet, C. and Rolland, C. “Object-oriented conceptual modelling”.
CISMOD 92, p1(34). India. 1992.
126
[Frank, 1995] Frank, M. “Object-relational hybrids: a look at technology and products that
blend object and relational”. DBMS July 1995 v8 n8 p46(7).
[GemStone] “GemStone Product Reference”.
[Hughes , 1991] Hughes, J.G. “Object-oriented databases”. Prentice Hall International
Group. 1991.
[Knoshafian, 1990] Knoshafian, S. and Abnous, R. “Object orientation: concepts,
languages, databases, user interfaces”. Jhon Wiley & Sons, Inc. 1990.
[Kim, 1990] Kim, W. “Object-oriented datbase: definition and research directions”. IEEE
transaction on knowledghe and data Engineering. 1990.
[Loomis,Loomis, M.E.S. “More on transactions”. JOOP January, p63(5). 1991.
[UPM, 1995] Universidad Politécnica de Madrid. Tesis para optar por el título de
Licenciado en Informática: “Control de concurrencia, recuperación y versiones en
SGBDOO”. 1995.
[Wilkinson , 1990] Wilkinson, K.; Tsur, S.; Naqui, S. and Zaniolo, C. “The story of O2”.
IEEE Transaction on knowledge and data engineering. Vol. 2, No. 1 March. p63 (13).
1990.
127
Capítulo 6
Estado del arte en
el diseño de la BD.
128
Capítulo 6 Introducción.
Las herramientas de especificación de requerimientos se componen de un conjunto de
conceptos (los del enfoque), actividades (lo que hay que hacer), técnicas (que son
aplicadas) y formas de representación (herramientas para plasmar el conocimiento). El ciclo
de vida clásico en este análisis sigue un desarrollo secuencial (Figura 6.1), en cambio un
análisis orientado a objetos se puede decir que es un proceso iterativo e incremental. Esta
forma de estudiar un problema se corresponde con la realidad pues el conocimiento de un
sistema aumenta conforme se progresa en el proyecto.
129
¿Cómo se ven los objetos desde una perspectiva estática?.
¿Cuáles son las fórmulas dinámicas que se definen en la modelación dinámica?
Un sistema construido con métodos orientados a objetos es uno cuyos componentes son
“paquetes” que encapsulan estática (datos) y dinámica (funciones), que pueden heredar
atributos y comportamiento de otros componentes y cuyos componentes se comunican a
través de mensajes. Un modelo de referencia orientado a objetos para especificar métodos
de análisis y diseño tiene como objetivos:
Obtener un modelo básico que recoja las características comunes en los métodos OO.
Disponer de criterios para componer métodos de análisis y diseño OO.
El desarrollo OO es un proceso conceptual independiente de todo lenguaje de programación
hasta las etapas finales. Es, fundamentalmente, una nueva forma de pensar y no una técnica
de programación.
OO Funcional
Se centra en especificar objetos Se hace mayor hincapié en especificar y
procedentes del dominio de la descomponer la funcionalidad del sistema.
aplicación con las responsabilidades
que tienen dada su funcionalidad.
Soporta mejor las evoluciones de los Este enfoque puede ser la forma más
requerimientos porque está basado en directa de implementar, pero resulta frágil
el entorno subyacente del dominio de pues si cambian los requerimientos del
la aplicación es si más que en lo sistema, puede provocarse una importante
requisitos funcionales de un único reestructuración.
problema.
Se trabaja con una jerarquía de clases. Se trabaja con una jerarquía de estructuras
Pone énfasis en la estructura de de datos y otra de procedimientos.
objetos y hace menor hincapié en la
estructura de procedimientos.
Impulsa a compartir a distintos niveles Se trata en el diseño de obtener módulos
proporcionando herramientas como la reutilizables, pero brinda pocas
abstracción, el encapsulamiento y la herramientas para lograrlo.
herencia que permiten construir
bibliotecas de componentes
reutilizables.
130
6.1.2 – Modelación de objetos.
131
Una transición con protección se dispara cuando se produce el evento, pero solo si la
condición de protección (Precondición- es una función booleana lógica que tienen a
objetos como valores) es verdadera.
Puede ser:
Simple: está asociada a un único evento y se dispara cuando éste ocurra.
Compleja: están asociadas a un conjunto de eventos y estos eventos pueden unirse
usando and, or o not.
Envío de mensajes.
Cuando un mensaje es enviado , el método asociado debe ser ejecutado.
El método correspondiente a un mensaje puede ser conocido en tiempo de
compilación o en tiempo de ejecución (enlace tardío).
Restricciones de integridad.
Representan condiciones que deben ser satisfechas.
Reglas que especifican restricciones y requerimientos que afectan tanto a la
estructura como al comportamiento de los objetos de una clase.
Definido por el Dr. Oscar Pastor, profesor titular de la Universidad Politécnica de Madrid
132
El diseño de la base de datos cae en la fase de diseño. El problema cuando se trabaja con
el modelo orientado a objetos es decidir el tipo de servidor de base de datos a usar.
133
Estos parámetros son de tipos de clases Writer y Reader con métodos particulares para leer
diferentes tipos de datos.
El algoritmo de serialización en un objeto, de forma general, podría ser:
1. Preguntar si sus padres en la jerarquía ya han sido serializados. En caso negativo,
serializarlos.
2. Serializar los datos miembros primitivos.
3. Serializar las referencias a otros objetos.
4. Preguntar si los que lo componen están serializados. En caso negativo, serializarlos.
Los pasos 2 y 3 dependen de las capacidades como gestor relacional que tenga el sistema y
las potencialidades OO que incluya. Tomando como base una metodología propia OO
desarrollada en nuestro país, en el epígrafe 7.3 se explica cómo se realiza éste proceso.
Para algunos autores éste proceso de serialización se identifica como el modelo
normalizado para la persistencia, pero en esencia son ideas similares porque el modelo
plantea que los objetos se descomponen en componentes atómicos que se almacenan en
archivos diferentes donde la relación entre varios componentes se mantiene por medio de
los identificadores de objeto.
Cuando los objetos se almacenan en la misma forma en que se definen en el esquema
conceptual, esto es, la unidad de almacenamiento es la misma que la unidad semántica, se
dice que el modelo de persistencia es directo.
134
el concepto de disparadores, se hicieron muchos aportes para diseñar correctamente los
mecanismos de disparo.
En el MOO cuando se habla de perspectiva estática se refiere a los conceptos de clase,
atributo, relaciones, restricciones de integridad estática, herencia y agregación; y como
perspectiva dinámica se incluyen las definiciones de operación o mensaje, evento, estado,
transición, petición o envío de mensaje y restricciones de integridad.
Los objetos vistos desde una perspectiva estática muestran al conjunto de propiedades
(atributos) que describen estructuralmente al objeto, de manera que los valores asociados a
cada propiedad estructural del objeto caracterizan el estado en un instante.
Las restricciones estáticas buscan hacer imposible la inserción inapropiada de elementos.
Por ejemplo, especifican que una determinada propiedad no admite el valor nulo o que solo
puede tomar determinados valores ya sea porque esté categorizado (sexo solo puede ser
femenino o masculino), en el caso de que sea numérico exista un rango de valores válidos o
tenga una regla de negocio asociada (el presupuesto de una empresa no puede ser mayor
que la suma del presupuesto de las áreas y sólo puede tomar valores en el intervalo
[0,1000000]). Es decir, estas restricciones están fuertemente relacionadas con el dominio de
los atributos de los objetos.
Cooling plantea que los objetos en la modelación dinámica responden a cuatro preguntas:
¿qué interacciones tienen lugar entre los objetos?, ¿por qué ocurren?, ¿cuándo ocurren? y
¿qué efectos generan en los objetos?.
A cada clase se le pueden asociar fórmulas de la lógica dinámica. Estos conceptos están en
mayor o menor medida reflejados en algunas metodologías, pero de manera general,
aunque hay algunos diagramas que permiten obtener algunos de ellos, raramente en el
proceso de diseño se describe como llevarlos a implementación. Estas fórmulas son:
Evaluaciones: Caracteriza explícitamente parte del estado de un objeto antes y después
de la ocurrencia de una determinada acción.
[a]
Produce cambios de estado.
Derivaciones: Son fórmulas de la forma ’ que permiten definir atributos
derivados () en términos de una condición de derivación declarada en .
[a] (’)
Expresa como se obtiene el valor de un atributo derivado. Se debe
satisfacer en cada estado del objeto. No produce cambio de estado.
Precondiciones: Prohibiciones para la ocurrencia de acciones.
[a]false
Letelier, P. y otros. “Oasis versión 3.0: un enfoque formal para el modelado conceptual orientado a objetos:.
Servicio de publicaciones UPV-DSIC. 1998. España.
135
Si se satisface, entonces la ocurrencia de a está prohibida, es decir,
es una fórmula que tiene que ser válida para que pueda ejecutarse la
acción.
Disparadores: Se disparan automáticamente no por acciones de los usuarios.
[]false
La acción se activa cuando la condición que plantea la fórmula se
satisface.
Restricciones de integridad: Son fórmulas que deben ser satisfechas por lo que se
evalúan en el modelo cuando se produce un evento que
provoca un cambio de estado. Se clasifican en estáticas y
dinámicas. Las estáticas siempre son aplicables, en cambio
las dinámicas dependen del estado actual por lo que
requieren de una lógica temporal con sus correspondientes
operadores.
Donde , ’ y son fórmulas bien formadas de la lógica de predicado de 1er orden y aA,
A es el conjunto de acciones.
Cuando se dice restricciones dinámicas se puede referir a la exigencia de la unicidad en el
valor que toma el o los atributos que se definan como llave, en el caso de existir éste
concepto, o a las implicaciones que puede tener la inserción o eliminación de un elemento
cuando hay jerarquía de clases o se trabaja con objetos complejos.
Las restricciones dinámicas también se refieren a las condiciones que deben cumplirse para
disparar una operación o que deben asegurarse antes o después de una operación para que
ocurra correctamente (pre-postcondiciones).
Para captar está semántica, las metodologías OO incluyen varios diagramas. En el caso de
la perspectiva estática por lo general tiene nombres cercanos a los de “diagrama de clases”
o “modelo de objeto”. Para la perspectiva dinámica son usados los diagramas de transición
de estado y otros que recojen la interacción entre los objetos.
De los diagramas utilizados por algunos métodos OO se podrían obtener varios de estos
conceptos, pero lamentablemente por lo general, si se hace alguna referencia, se aborda
solo la perspectiva estática (OMT, Medea). OO-Method ha logrado implementar con
buenos resultados el modelo conceptual teniendo en cuenta las vistas estáticas y dinámicas
descritas anteriormente.
En las propuestas de metodologías que se han desarrollado tomando como base la notación
UML, también se ha visto un incremento de la atención hacía la vista dinámica. Esto se
debe fundamentalmente a la existencia de un CASE (Rational Rose) que une toda la
información de los diagramas para producir código fuente, por lo menos a nivel de
definición de clases.
136
6.3 – Tratamiento de la persistencia en las metodologías.
Desde el año 1989 en que apareció la metodología de Coad-Yourdon que incluía elementos
para especificar los requerimientos, siguiendo el enfoque orientado a objetos, muchas han
sido las que se han desarrollado en la presente década. Gran parte de ellas eluden el tema
del diseño de la base de datos. . Incluso hay algunas que reconocen que no abordan éste
problema (Fusion). Esta situación es lógica si tomamos en cuenta el estado del arte en
cuanto a los Sistemas de Gestión de Base de Datos Orientados a Objeto y que el desarrollo
de metodologías para un nuevo enfoque va precedido del desarrollo de lenguajes que lo
soporten.
Las pocas metodologías que hacen referencia a éste punto han optado por dar solución a
éste problema planteando un conjunto de reglas que permiten convertir los objetos,
definidos a partir del análisis del problema, en tablas tal como se plantea en el modelo
relacional. A continuación haremos referencia a cómo enfrentan el diseño de la base de
datos algunas metodologías que abordan el tema.
Las metodologías que abordaremos por lo general son específicas para aplicaciones de
gestión y han tomado en cuenta la situación del mercado en la cual hay gran cantidad de
Sistemas de Gestión de Base de Datos Relacionales (SGBDR) ampliamente difundidos y
pocos SGBDOO, y los que existen tienen poca madurez. Algunos autores recomiendan que
para sistemas comerciales y que requieran alta confiabilidad se utilicen los SGBDR y para
aplicaciones CASE, CAD y CAM se usen SGBDOO.
Aquellas metodologías que hacen referencia a este aspecto plantean que la definición de
ésta base se concreta en decidir cuáles clases se desea sean persistentes y utilizar lo que
brinda el lenguaje para salvar y recuperar valores o después de un análisis y diseño enseñan
a obtener las tablas que se requieren para el modelo relacional. Dentro de los trabajos con
estas características podrían citarse la metodologías Object Modeling Technique (OMT),
O-Method y Medea.
6.3.1 – OMT.
OMT (Object Modeling Technique) fue expuesta por 1ra vez en 1991 en un libro cuya
vigencia sigue en pie, el propio Rumbaugh en el prólogo a su segunda edición nos alerta
sobre las pocas diferencias que existen con respecto a la anterior. Durante años fue la más
usada, aunque ahora está cediendo paso a UML, al estar concebida para el desarrollo de
sistemas de gestión en los que se parte de un análisis del problema siguiendo un enfoque
OO, pero sin perder de vista que se va a implementar en un medio relacional. Esto
indiscutiblemente es un gancho para los usuarios que en los últimos años han estado a la
caza de todos los SGBD que salen al mercado, y estos productos cada vez más se acercan al
modelo propuesto por Codd hace más de 25 años.
Modeliza un sistema desde tres puntos de vista distintos, pero complementarios (Figura
6.2):
137
Mundo real
138
Transformación de la herencia en tablas.
Transformación de la herencia múltiple en tablas.
Posee una herramienta automatizada que permite crear el diagrama de objetos y actúa con
un compilador que permite trabajar con cualquier SGBDR porque tiene un fichero de
configuración que el usuario modifica de acuerdo a las nuevas especificaciones (OMTool
Schemer) (Figura 6.3).
Figura 6.3 Arquitectura para la conversión automática del modelo objeto a SGBDR.
De manera general podríamos decir que:
Pone mucha atención en aspectos de BDR.
Modelo de objetos muy rico, adecuado para tratar aspectos de modelización de datos.
El diagrama de transición de estado representa los conceptos dinámicos, pero no
modeliza claramente el intercambio de mensajes entre objetos.
La utilización de DFDs rompe con la uniformidad del modelo porque representa una
vista diferente del sistema que dificulta la detección de clases y la especificación simple
y localmente de sus servicios.
Tomado de Blaha, M., Premarlini, W. And Shen, H. “Converting OO Models into RDBMS Schema”. IEEE
Software, May 1994.
139
En el Schemer no hay interacción con la BD porque sería muy lento, decrementa la
portabilidad y hace el problema más complejo si hay que cargar.
Es una metodología más usada puesto que un analista que conozca los diagramas
entidad-relación, de transición de estado y de flujo de datos, no tiene mucho que
aprender.
No existe un modelo real de identificación de clases con sus estructura y
comportamiento, solo consideraciones de tipo muy general pues no se basan en el
modelo cliente-servidor.
Las reglas de conversión limitan la capacidad de evolución del esquema.
Es un método evolucionista, con numerosas técnicas y sugerencias de aplicación
inmediata en entorno de desarrollos habituales.
6.3.2 – UML.
En 1994 se unen Grady Booch y James Rumabugh con el objetivo de unir sus metodologías
OO y crear una metodología unificada que sale a la luz un año más tarde. Está primera
versión (0.8) era exactamente eso, una unión que arrastró consigo los problemas de las
metodologías que le sirvieron de base. En 1995 se une Jacobson con OOSE (Object-
Oriented Software Engineering) y se decide en vez de una metodología definir un lenguaje
de modelación que incluya a varios diagramas. En noviembre de 1997 UML (Unified
Modeling Language) es certificada por OMG.
A partir de la estandarización de ésta notación, un conjunto de investigadores han
desarrollado metodologías propias para el desarrollo de proyectos OO. Tomar como base
las herramientas que ofrece UML sin una guía, es una tarea difícil cuando se pretende
realizar un proyecto OO. Estos investigadores alegan: “no te metas a entender los
diagramas que yo te voy a brindar una forma de trabajo sin necesidad de conocer los
detalles internos”.
Dentro de un desarrollo caótico de metodologías OO sin una estandarización de conceptos,
es un paso importante la aparición de UML que además cuenta con una poderosa
herramienta CASE, pero su definición hace el proceso de análisis y diseño bastante
complejo (dado por la complejidad de los diagramas) en los que hay que tener cuidado
porque arrastran (en menor escala) los problemas de la metodología de Booch de
representar en más de una ocasión la misma información de manera distinta y se pierde la
vista global del problema al estar fragmentada en 8 diagramas la representación del mundo
real.
6.3.3 – Medea.
Constituyó el trabajo de doctorado del autor (Mario Piattini) y está definida para la
instrumentación de un diseño OO en un SGBD que soporte SQL3
140
Lo obtenido en la etapa de análisis posee la misma información que lo representado en un
diagrama entidad-relación, con algunos otros aspectos relativos a los servicios y contratos.
En la transformación del esquema del análisis al esquema del diseño (conversión de clases
en tablas con procedimientos almacenados) tratan de que se cumplan los siguientes
principios:
1. Conservar la semántica ya que la BD es un modelo del mundo real.
2. Capacidad de evolución.
3. Minimizar el número de valores nulos.
4. Eficiencia en cuanto a tiempo de respuesta, ocupación de memoria, etc.
5. Evitar redundancias.
6. Sencillez.
7. Uniformidad, es decir, si se toma una decisión de diseño, que ésta tenga carácter general
y se siga a lo largo de todo el diseño.
141
8. Transformar las generalizaciones tal como están definidas sin perder semántica.
La metodología da poca importancia al modelo dinámico porque considera como lo
principal a los datos (lo hacen conscientemente). Coexisten a la vez llaves e identificadores
de objetos aunque recomiendan que un objeto se identifique de alguna de las dos formas. Se
pierde capacidad de evolución en algunos lugares, por ejemplo, cuando sugiere representar
todas las interrelaciones usando atributos. En ocasiones dejan atributos que son del tipo de
una clase y en otras los transforman en tablas.
6.3.4 – OO-Method.
142
La definición de un clase incluye:
Atributos constantes especificando cuales son llave.
Atributos variables especificando dominio y valor por defecto.
Eventos propios y compartidos y precondiciones.
Restricciones de integridad estática y dinámica.
Formulas de derivación que permiten obtener los atributos derivados en función de
otros que ya existen.
Relaciones de disparo.
Formulas de valuación que permiten determinar como una acción modifica el estado
de los atributos.
Procesos.
La herramienta CASE (OO-Method CASE tool):
Proporciona un medio operacional que soporta todos los aspectos de la metodología
OO-Method.
Generación de la especificación formal OO (OASIS).
Generación de código completo (incluyendo estática y dinámica) en Visual C++,
Delphi, Java,... (en esto se está trabajando).
Generación del esquema de la BD en MSAccess, Interbase,... (en esto se está
trabajando).
Es una metodología completa que hace que el esfuerzo inicial en la fase de análisis pueda
usarse en el diseño e implementación de manera fácil y predecible. En cualquier momento
es posible obtener una aplicación ejecutable siempre que en los modelos de análisis esté
correctamente definida la información, pues usa un lenguaje de especificación formal OO
como almacén central de información.
Una de las pocas metodologías que desde sus inicios tuvieron en cuenta el diseño de la BD
fue OMT de Rumbaugh. La idea expuesta en ésta metodología (uso del MR) ha sido
tomada por muchas otras en los últimos 5 años y no deja de ser acertada de acuerdo al
estado de la arte en el campo de las BD. En esencia proponen tomar como base las reglas
de transformación de entidades y relaciones a tablas tal como se definían en el MR
(apartada 3.4.3). Obviamente esto requiere tener definido con claridad las propiedades de
los objetos y la cardinalidad en su relación con otros objetos, para lo cual cada metodología
usa herramientas propias.
Desde el punto de vista dinámico algunos investigadores ha publicado trabajos relacionados
con la forma de obtener disparadores o incitadores a partir del uso de los Diagramas de
Transición de Estado (DTE). Aunque algunas metodologías definen diversas técnicas para
describir el comportamiento de los objetos, no se explica cómo transformar esto al lenguaje
143
de consultas que ofrecen los gestores de BD. Salen de ésta afirmación aquellas cuya
descripción se basa en la lógica de predicado de 1er orden, por la relación obvia de ésta con
los fundamentos teóricos del MR que hacen más “suave” está transición.
En los últimos años existe una tendencia de definir una capa intermedia, conocida como
capa de objetos, que sirva de interfaz entre el almacenamiento de la información (en la que
se puede usar una BDR o incluso jerárquica) y las aplicaciones que utilizan ésta. Esta idea
como se vio en el epígrafe 4.4.3, está siendo implementada por los gestores relacionales
que avanzan hacía la OO. Por ejemplo, la metodología que propone Liberty basada en
UML define las reglas para la transformación de objetos a tablas y propone la creación de
una capa con las clases con métodos, para que permitan las operaciones CRAE, por cada
clase persistente (Figura 6.4).
Conclusiones.
Por lo complejo que resulta diseñar la BD partiendo del MOO dado el estado del arte de los
SGBDOO, ésta no fue una actividad en la que se hicieron grandes esfuerzos en los inicios
del desarrollo de metodologías de análisis y diseño. Pero el número cada vez más creciente
de aplicaciones que manipulan grandes volúmenes de información y la necesidad de los
desarrolladores de estas aplicaciones de utilizar las potencialidades del enfoque OO,
propició las bases de los trabajos que se han desarrollado.
144
La tendencia más explotada ha sido la conversión al MR dada la madurez de los gestores
con estas características que se ofrecen en el mercado. Un área emergente y con gran futuro
como los gestores objeto/relacional, todavía es un campo, en cuanto al diseño de la BD,
poco abordado.
En el capítulo 7 se hace hincapié en una propuesta de diseño que tiene en cuenta esto, pero
antes es importante tener claras las respuestas a las preguntas formuladas en la introducción
pues son conceptos claves para su entendimiento.
Qué es el proceso de serialización?.
Evaluación.
Derivación.
Precondiciones.
Disparadores.
Restricciones dinámicas.
Referencias bibliográficas.
[Bertini, 1994] Bertino, C, Ceri, S. and Navathe, S. “Diseño conceptual de base de datos,
un enfoque de entidades e interrelaciones”. Addison-Wesley Iberoamericana, S.A. USA.
1994.
[Bertino, 1993] Bertino, E. And Martini, L. “Object-oriented Database Systems: concepts
and architectures”. Addison- Wesley Publishing, Co. 1993.
[Blaha, 1994] Blaha, M., Premarlini, W. And Shen, H. “Converting OO Models into
RDBMS Schema”. IEEE Software, May 1994.
[Booch, 1994] Gardy, B. “Object-Oriented design and analysis with applications”.
Benjamin/Cummings Publishing Company. 1994, 2da edición.
[Chaudhri, 1998] Chaudhri,A. and Loomis, M. “Object Database in practice”. Prentice-
Hall, Inc. 1998. Hewlett-Packard Company. “Object-Oriented data Integration”, W.
Keller; C. Mitterbauer and K. Wagner. P3-20.
145
[Cooling, 1997] Cooling, J.E. “Real-time software systems: an introduction to structured
and object-oriented design”. International Jhonson Publishing Inc. EUA. 1997.
[Date, 1993] Date, C.J. “An introduction to Database”. Adisson –Wesley Iberoamericaba.
5ta edición. 1993.
[DeMiguel, 1993] De Miguel, A. y Piattini, M. “Concepción y diseño de Bases de datos del
modelo E/R al modelo relacional”. Adisson-Wesley Iberoamericana. 1993.
[Ladányi, 1997] Ladányi, H. “SQL unleasshed”. Sams Publishing 1997.
[Liberty, 1998] Liberty, J. “Begining Object-Oriented Analysis and Design with C++”.
Wrox Pres, 1998, Canadá.
[Medina, 1996] Medina , H. “Fusion: meodología orientada a objetos para desarrollo de
software”. Revista Soluciones Avanzadas. Año 5, No38, Octubre 1996.
[DeMiguel, 1993] De Miguel, A. y Piattini, M.” Concepción y diseño de base de datos, del
modelo entidad/relación al modelo relacional”. Addison-Wesley Iberoamericana, S.A.
USA. 1993.
[Letelier, 1998] Letelier, P. y otros. “Oasis versión 3.0: un enfoque formal para el
modelado conceptual orientado a objetos:. Servicio de publicaciones UPV-DSIC. 1998.
España.
[Martín, 1998] Martín, J. and Odell, J. “Object-oriented methods: a foundation”. Second
Edition. Prentice-Hall, Inc. 1998. EUA.
[Pastor, 1992] Pastor, O. Tesis de doctorado: “Diseño y desarrollo de un entorno de
ejecución automática de software en el modelo orientado a objetos”. Universidad
Politécnica de Valencia. 1992.
[Pastor, 1993] Pastor, O. y García, R. “Uso de Oracle como base de datos relacional para
implementar un diseño orientado a objetos”. Generalitat Valenciana, Conselerria de
Senitat i Consum. 3 de Mayo de 1993.
[Pastor, 1995] Pastor, O., García, R. y Cuevas, J. “Implementation of an OO design in an
Oracle 7 development enviroment”. Informe de investigación. Universidad Politécnica
de Valencia. 1995.
[Pastor, 1995] Pastor, O., Insfrán, E. y Pelechano, V. “Uso de Oracle como base de datos
relacional para la implentación de un diseño orientado a objetos”. ”. Informe de
investigación. Universidad Politécnica de Valencia. 1995.
[Piattini, 1994] Piatinni, M, Tesis de doctorado: “Desarrollo de una metodología de
desarrollo para bases de datos oreintadas a objeto fundamentadas en extensiones del
modelo relacional”. Universidad Politécnica de Madrid. 1994.
[Rational, 1997] Rational Software Corporation, “UML Documente Set Version 1.0”. 13 de
enero de 1997.
[Rumbaugh, 1996] Rumbaugh, J. Blaha, M. Premarlini, W. Eddy, F. y Lorense, W.
“Modelado y diseño orientado a objetos. Metodología OMT.” Prentice-Hall
Hispanoamericana. S.A. 1996.
146
Capítulo 7
Soluciones al diseño
de la BD.
147
Capítulo 7 Introducción.
148
Las etapas están perfectamente delimitas y se dividen en: Estudio Preliminar, Análisis,
Diseño, Desarrollo, Prueba e Implantación. Es una metodología puro OO por lo que se basa
en el principio cliente-servidor y dentro de éste en el principio manejado por
responsabilidades. Como resultado de la etapa de análisis, y fuente para el diseño de la BD,
se obtiene para cada clase:
Aspecto Contenido
Características Nombre
generales
Descripción
Especificación de Nombre
cada
Descripción en lenguaje natural
responsabilidad
Parámetros Nombre
Descripción
Tipo de dato
Especificación de Nombre
cada atributo Descripción
Tipo de dato
Especificación de Nombre de la clase colaboradora
cada colaboradora Nombre de cada colaboración (se
corresponde con alguna responsabilidad
de la clase colaboradora.
Además se definen diferentes tipos de asociaciones (llamadas relaciones por algunos
autores), ellas son:
Es un tipo de o generalización/especialización.
Es análoga a: se corresponde con el hecho de que una clase tiene comportamiento
similar a otras, ambas tienen responsabilidades y/o atributos comunes, pero no se
puede decir que una herede de otra.
Agregación.
Agrupamiento.
Tiene conocimiento de: un objeto de una clase puede requerir algo de otro objeto, sin
que se modifique el estado del objeto servidor, aunque no éste compuesto de ese otro.
Es decir, el cliente “tiene conocimiento” del servidor.
Depende de: un objeto de una clase al requerir algo de otro objeto provoca
modificaciones en su estado por lo que el servidor “depende “ del cliente.
Composición paralela: La clase resultante de una composición paralela se corresponde
con una clase que coordina el trabajo entre varias clases, por lo que esas clases tienen
que ser visibles a ella. Esta clase se corresponde con la clase controladora de un
subsistema.
Este método en sus primeras propuestas tampoco hacía referencia al diseño de la BD, tal
como ocurría internacionalmente. En sus continuas versiones ha ido incluyendo algunas
especificaciones que se adaptan a las potencialidades de los productos presente en el
149
mercado. En su versión 4.0 incluye el modelo de persistencia que se describe en los
siguientes apartados.
7.2 - Alternativas.
La propuesta de diseño de base de datos que se incluye se divide en tres partes que
dependen del sistema que se utilice para implementar la solución al problema planteado.
Estas tres soluciones son:
Si se tiene un SGBDOO, el trabajo se limita a determinar cuáles clases se desea sean
persistentes (esto es una propiedad de las clases). La calidad de la definición de estas
clases está subordinada al cumplimiento de las directivas que se establecen en la
metodología para lograr un buen diseño de las clases.
Si lo que se tiene es un lenguaje de programación OO (LPOO) que permite
relacionarse con una base de datos relacional o un SGBD objeto/relacional, la solución
es llevar las clases definidas a tablas.
Si lo que se tiene es un lenguaje de programación OO que no permite relacionarse con
base de datos relacional, pero que permite salvar registros, entonces se deben utilizar
las clases que brinda para almacenar los atributos de las clases persistentes en ficheros
estructurados. Puede que el lenguaje permita la relación con BDR, pero se escoja
como forma de almacenamiento la organización en ficheros.
Como se aprecia la primera y tercera variante en su implementación depende mucho del
producto que se utilice. En cambio, la segunda alternativa tiene un soporte común para
todos los productos que se puedan usar, ésta base es el modelo relacional. A pesar de ello
no todo será posible implementarlo porque los gestores no implementan el 100% del
modelo en que se basan.
150
Para las clases persistentes se debe garantizar:
Cada una de ellas o un ancestro hereden de la clase que el lenguaje defina como
persistentes (en Borland Delphi es TPersistent).
Existan métodos para salvar y cargar la información (ReadData y WriteData en
Borland Delphi).
La definición del código de los métodos anteriores de acuerdo al tipo de los atributos
de la clase (el lenguaje brida para cada tipo de dato un métodos para salvar y otro para
restaurar, pro ejemplo, en Borland Delphi si el atributo es de tipo string los métodos
serían: ReadString y WriteString).
La definición del código para registrar las clases.
Esta forma de almacenamiento implica que se crea un fichero, con extensión definida por el
programador, cuya estructura no es fija pues se almacenan objetos de diferentes clases. La
información almacenada es tratada como un fichero sin tipo en el que se leen y escriben
byte que cobran sentido cuando se trabaja con objetos en memoria externa.
Todas las clases, persistentes o no, debe ser organizadas en bibliotecas de clases.
Lógicamente todas no deben estar en una misma biblioteca por la magnitud y complejidad
que puede tener un sistema. En ADOOSI Visual se recomienda utilizar el concepto de
subsistemas.
Un subsistema es responsable de varias de las tareas del sistema, que son coordinadas por
una clase que se conoce como clase controladora (es el caso típico del tipo de asociación
composición paralela). La clase controladora o coordinadora es la cara visible del
subsistema, aunque por excepción alguna otra clase o subsistema puede ser visible para otra
clase o subsistema externo. Esto significa que fuera de lo visible, desde afuera NO se
conoce la definición interna. Desde el punto de vista de la implementación, en la interfaz se
pone la estructura de las clases visibles, y en la sección de implementación la
especificación de cada método de estas clases y la estructura y especificación de los
métodos del resto de las clases.
Los pasos que propone la metodología, para obtener subsistemas son:
1. Identificar las clases controladoras.
2. Asignar un subsistema por cada clase controladora y distribuir las responsabilidades
del sistema en los subsistemas obtenidos.
Dentro de cada subsistema se aglutinan un conjunto de clase que, a partir de las relaciones
cliente-servidor, necesita la controladora u otras clases para cumplir la responsabilidad
asignada.
Partiendo de estas definiciones, al definir cuáles bibliotecas se crean, se tiene en cuenta loi
siguiente:
Un subsistema se transforma en una biblioteca.
En la sección de interfaz se declaran:
Las constantes y tipos particulares.
151
Los subsistemas con los que se relacionan, las bibliotecas del lenguaje que
necesitan usar y las bibliotecas generales de constantes y tipos (se recomienda
definir una o varias bibliotecas con las constantes y tipos que se necesitan).
La estructura de las clases visibles especificando su nombre, de quién heredan,
atributos con nivel de protección y tipo, y las responsabilidades indicando di es
procedimiento o función, parámetros de entrada y salida, tipo de valor que
devuelve si es función y nivel de protección.
En la sección de implementación se declaran:
La estructura de las clases no visibles.
La implementación de todos los métodos.
El código asociado al tratamiento de la persistencia usando organización clásica.
La forma en que los lenguajes de programación implementan la persistencia, recuerda las
características de los productos de la 1ra generación de SGBDOO. Estos gestores ofrecen
un biblioteca de clase, de cuyas clases deben heredar las clases persistentes del dominio si
quieren convertirse en persistentes. La diferencia principal es que los lenguajes solo
garantizan el almacenamiento de la información y los gestores guardan también el
comportamiento asociado a las clases.
152
atributos que se tienen en cuenta en la valoración del nivel de aceptación de la etapa de
análisis en ADOOSI Visual son:
1. Complejidad de las responsabilidades del sistema: Es el grado en que se ha logrado
definir de forma clara y concisa todo lo que realmente debe hacer el sistema de acuerdo
a los objetivos de éste.
2. Consistencia del guión: Es el grado en el que el guión representa de forma no
contradictoria las interacciones de las clases que son necesarias para cumplir la
responsabilidad planteada.
3. Consistencia del grafo de control: Es el grado de representación única y no
contradictoria alcanzada en el flujo de control entre las clases que interactúan para
cumplir una responsabilidad del sistema.
4. Completitud de las clases: Es el grado de especificación total (sin omisión) de los
requerimientos para la definición de la clase.
5. Consistencia de las clases.
Es el grado en la que la definición de la clase es única y no contradictoria respecto a los
requerimientos de una entidad capaz de cumplir las responsabilidades asignadas y tener
los atributos necesarios para ello y sin que exista ninguna contradicción en la forma de
lograrlo.
6. Complejidad de las clases: Nivel de dificultad para comprender la conducta de la
abstracción.
7. Cohesión: Es el grado de cohesión simple entre las clases y objetos, es decir, que los
atributos de una clase trabajan justamente a la vez para proveer un buen
comportamiento.
8. Encapsulamiento: Es el grado en que la información apropiada está adecuadamente
encapsulada dentro del tipo correcto de entidad, para disminuir acoplamiento y
aumentar la cohesión.
9. Visibilidad: Es el grado en que una clase puede invocar métodos de otra. Se dice que
una clase B es visible a una clase A, cuando A invoca métodos de la clase B.
10. Complejidad de las asociaciones: Es el grado de especificación total (sin omisión) de
las asociaciones entre las clases, es decir, si se han definido todas las formas posibles
en los que los objetos de dos o más clases se relacionan entre sí de acuerdo a los
requerimientos del problema.
Dentro del proceso de diseño, no importa la forma de almacenamiento que se siga para las
clases persistentes, lo primero que se hace (cuando se usa ADOOSI Visual) es refinar las
clases obtenidas como resultado del análisis. En el epígrafe 7.3.1 se describe cómo se hace
éste proceso, que implica: identificar superclases (que pueden o no ser abstractas),
completar la descripción de todos los componentes de una clase e identificar
comportamiento que ha sido omitido, pero es importante dentro del dominio del sistema,
García, L. y Alvarez S. “Evaluación de la calidad de la etapa de análisis de proyectos informáticos
orientados a objeto”. Revista Ingeniería Industrial
153
con la definición de nuevos atributos asociados a éste nuevo comportamiento. Los atributos
que se evalúan para evaluar la calidad se éste procesos son:
1. Consistencia de las clases abstractas y concretas: Es el grado en que la definición de
clase abstracta y concreta es única y no contradictoria respecto a los requerimientos de
una asociación de analogía o a las asociaciones de generalización/especialización.
2. Completitud de cada clase: Es el grado de especificación total (sin omisión) de los
requerimientos para la definición de una clase de acuerdo a la metodología.
3. Complejidad de cada clase: Es el grado de comprensión de la conducta de la
abstracción, en la que se tienen en cuenta métodos que invoca, cantidad de métodos y
atributos y profundidad y amplitud del árbol de herencia.
4. Consistencia de la clase: Es el grado en que la definición de la clase es única y no
contradictoria respecto a los requerimientos de una entidad capaz de cumplir las
responsabilidades asignadas y tener los atributos necesarios para ello sin que exista
ninguna contradicción en la forma de lograrlo.
5. Cohesión de la clase: Es el grado en que los métodos de una clase están relacionados
unos con otros y trabajan juntos para proveer un buen comportamiento.
6. Tamaño de la clase: Es la magnitud de la clase. El tamaño de la clase indica la cuantía
de la colaboración. Clase grandes son más complejas y difíciles de mantener. Clase
pequeñas tienden a ser más reusables ya que proporcionan un conjunto de servicios
cohesivos.
7. Completitud de las responsabilidades y atributos de una clase: Es el grado en que se
ha logrado definir de forma clara y concisa todo lo que realmente debe hacer una clase,
así como la especificación total (sin omisión) de los atributos necesarios para ello.
8. Tamaño de la responsabilidad de una clase: Es la cuantía de una responsabilidad dada
por el número de mensajes que envía, cantidad de líneas de código y cantidad de
sentencias.
9. Complejidad de la responsabilidad de una clase: Es el grado de comprensión de la
conducta de la abstracción.
La evaluación de estos atributos se realiza a través de métricas de calidad, pero no vamos a
adentrarnos más en éste campo. Lo importante es conocer cuáles aspectos son importantes
para verificar la calidad de las definiciones obtenidas, tomando en cuenta el universo del
discurso y las particularidades del enfoque OO.
García, L. y Alvarez S. “Atributos y factores de calidad para la etapa de diseño de un proyecto informático
orientado a objetos”. Revista Ingeniería Industrial
154
7.2.3 - Módulos para la conversión del MOO.
155
7.3 – Implementación de los módulos.
7.3.1- Completamiento.
En el capítulo 4 se planteaba que una de las características principales de los objetos estaba
relacionada con su identificación. Como en esta variante de solución la implementación es
un SGBDR o un SGBDOR, hay que especificar cuál o cuáles atributos serían la llave. La
determinación de esto depende del tipo de clase:
Las clases simples tienen un atributo llave que en principio, se obtiene de sus propios
atributos. Si ninguno de sus atributos responden a la propiedad de unicidad, se añade
un atributo que tome valores secuenciales que no se repitan.
Las clases compuestas son definidas en el análisis como que tienen una asociación del
tipo de agregación, al igual que las clases complejas. Una clase compuesta es el
resultado de la unión de varias clases para formar una entidad conceptual con
significado en el universo del discurso. Por ejemplo, una reservación de un hotel es la
fusión del huésped que realiza la solicitud de habitación y la habitación que se le
asigna. En estos casos no se definen atributos llaves, pues la llave es la unión de las
llaves de las clases que la conforman.
Las clase complejas son clases que tienen uno o varios atributos que referencian a otros
objetos de otras clases. En estos casos se tienen como llave, a atributos atómicos de la
clase compleja. En el análisis las clases complejas también se clasifican como
agregación.
La mayoría de las definiciones incluidas en el módulo de completamiento son capturadas
gráficamente en el diagrama de clases (DC) cuya notación toma como base las del
diagrama de estructura estática de UML y del modelo de objeto de OO-Method, aunque se
hacen algunas inclusiones (Figura 7.1).
156
Figura 7.1 Notación del Diagrama de clases.
Refinamiento de clases.
En la realización del DC, primero hay que redefinir las clases, obtenidas como resultado del
análisis, tomando como base las asociaciones de analogías y generalización/especialización
definidas. También hay que revisar si existe algún comportamiento omitido del dominio del
análisis que no haya sido tomado en cuenta, es importante analizar si es transcendental en la
solución del problema, para incluirlo.
Las clase análogas tienen comportamiento y atributos comunes, por lo que para cada grupo
de clases análogas se define una nueva clase que contendrá lo común. La nueva clase puede
ser o no abstracta. Este proceso recibe el nombre de generalización. Las clases
especializadas deben conservar aquellos métodos cuyo comportamiento sea necesario
redefinir. Con este procedimiento se crean nuevas asociaciones de
generalización/especialización.
Deben analizarse las asociaciones de generalización/especialización, definidas durante el
análisis, ya que si la clase especializada no hereda todo el comportamiento de la
generalizada, debe incluirse una nueva clase con lo común de la que hereden. Este tipo de
asociaciones se implementa mediante la herencia.
Aquellas clases que tienen como atributo a otras clases fueron clasificadas en el análisis
como que tenían una asociación del tipo de agregación o de composición paralela. Desde el
punto de vista del diseño de la BD, es importante tener clara ésta clasificación, pues
conceptualmente las clases con asociación del tipo composición paralela no son
persistentes. La clase resultante de una composición paralela se corresponde con una clase
que coordina el trabajo de varias clases, por lo que el comportamiento que de ella interesa
es el asociado a la función controladora. La clase agregada integra varias clases que son
consideradas como partes del todo que es la agregada.
157
Diagrama de clases.
Para las relaciones entre la clase compuesta y cada una de sus clases componentes, hay que
especificar la dimensiones Inclusiva/Referencial (I/R) y Estática/Dinámica (E/D). Estas
dimensiones se definen como:
Inclusiva La única clase que hace referencia a objetos del tipo componente es la
compuesta y solo un objeto del tipo de la agregada la referencia.
Referencial Un objeto del tipo de la clase componente puede ser referenciado por varios
objetos de otras clases e incluso de la misma clase a compuesta.
Estática Cuando se crea un objeto de la clase compuesta, el objeto de la clase
componente se mantiene sin cambiar su valor, independientemente de los
eventos que afecten la compuesta.
Dinámica Producto de eventos que afectan a la compuesta, puede cambiar el objeto
componente asociado a la compuesta.
Cuando dos clases se relacionan, ya sea por composición o por complejidad, hay que
especificar en ambos extremos de la relación las cardinalidades máximas y mínimas
(<máximas, mínimas>)
En dependencia de los valores de la cardinalidad se pueden definir otras 4 dimensiones
relativas a la relación entre componente-compuesta, componente-compleja y viceversa.
Estas dimensiones son:
componente-compuesta, componente-compleja
Flexible/Estática Cuando la cardinalidad mínima es exactamente 0 ó >=1,
respectivamente.
Disjunta/No Disjunta Cuando la cardinalidad máxima es 1 ó >1, respectivamente.
compuesta-componente, compleja-componente
Flexible/Estática Cuando la cardinalidad mínima es exactamente 0 ó >=1,
respectivamente.
Disjunta/No Disjunta Cuando la cardinalidad máxima es 1 ó >1, respectivamente.
En la realización del DC se siguen los siguientes pasos:
1. Una clase simple se representa directamente (Figura 1.2).
Habitación ocupada
158
Habitación Habitación ocupada
Número Fecha
Piso
Tipo
Estado
Habitación
{estado=ocupada} Total=Falso
Solapamiento=Falso
Habitación Ocupada
159
Reservación
<1,1> <1.1>
{I,E} {R,D}
<1,1> <1,1>
Reservación
Accostumed
<0.m> <1,m>
Accostumed Habitación
160
Uniendo todas las partes utilizadas en para ejemplificar los pasos en la obtención del DC, se
obtiene el DC de la figura 7.6.
<1.1>
Habitación <0,m> Huésped
{estado=
{estuvo=sí}
ocupada} <1,m>
Habitación ocupada Accostumed
Reservación
161
corresponde con la creación de la instancia de la clase correspondiente y el estado final con
la destrucción de ésta.
Las transiciones indican el paso de un estado a otro provocado por algún evento o de forma
instantánea. Tienen asociadas acciones (que son operaciones que se realizan
instantáneamente), eventos (es una lista de eventos que pueden provocar –o disparar- la
transición, relacionados entre sí por los operadores lógicos OR Y AND, y pueden estar
precedidos del operador lógico NOT) y condiciones (es una lista de condiciones
relacionadas entre sí de forma similar a los eventos, que serán evaluadas en el momento en
que se produzcan los eventos que dan lugar a la transición y ésta sólo será disparada si el
resultado de dicha evaluación es verdadera, de lo contrario se esperará a que ocurran
nuevamente los eventos). Para especificar una transición se sigue el siguiente formato:
[<clase que genera evento>]:<evento>[[condición]][/acción].
Los eventos pueden ser consecuencia de una operación que está dentro del dominio del
análisis (internos), resultado de una operación que es externa al dominio del análisis
(externos) o como resultado de una operación de reloj (temporal).
Los estados agregados contienen a otros estados y contribuyen a disminuir la complejidad
en el DTE. Están compuestos por restricciones que en este caso afectan a todos los
subestados que éste contiene. La descomposición en varios niveles es un tópico poco
definido en cuánto a cuáles criterios utilizar para agrupar, se recomiendan los estudios de
George Miller que indican la cantidad de 72 elementos por nivel y que lo general esté en
los niveles más altos y lo particular en los más bajos. Un criterio para agrupar podría estar
relacionado con los atributos, de manera que si existen varios eventos que afectan a un
mismo atributo ubicando al objeto en estados diferentes, con todos estos estados podría
definirse uno agregado. Otro criterio sería agrupar a estados que están fuertemente
acoplados, en el ejemplo de la figura 7.8 éste es el que se aplica.
Los diferentes niveles de diagramas, que surgen por el uso de los estados agregados, deben
estar balanceados en cuanto a las transiciones de entrada y salida cumpliéndose las
siguientes reglas:
Para el caso de las transiciones de entrada es necesario que cada uno de los eventos en
Or de la lista de eventos de cada una de las transiciones entrada al estado agregado,
esté formando parte de la lista de eventos de al menos una de las transiciones que
parten del estado inicial.
Para el caso de las transiciones de salida debe cumplirse:
Cada subestado tendrá una transición al subestado final.
Cada transición hacia el subestado final, contendrá entre su lista de eventos las listas de
eventos de todas las transiciones de salida del estado agregado relacionadas entre sí por
el operador lógico OR.
Tanto las acciones como las actividades, son tareas a desarrollar en las que se puede usar el
lenguaje de especificación definido en UML.
La notación de DTE se muestra en la figura 7.7.
162
Estado
Estado
Estado
inicial Transición Estado agregado
final
Figura 7.7 Notación del DTE.
Supongamos que en la automatización de un sistema de carpeta de un hotel se obtienen las
siguientes especificaciones. Un huésped puede solicitar con antelación una habitación
indicando el tipo de habitación que requiere, a partir de qué fecha y cuántos días. Por
diferentes motivos una habitación y el empleado que la atiende pueden cambiar, e incluso
antes de que el huésped comience a disfrutar de la reservación. Cuando lo que cambia es la
habitación, hay que verificar si la nueva habitación asignada pertenece a otro grupo
diferente al de la habitación precedente porque un empleado atiende a un solo grupo de
habitaciones. En caso de que pertenezca a otro grupo, hay que buscar al empleado que la
atiende.
Una vez que el huésped está en el hotel puede solicitar prórroga, pero sólo lo podrá hacer el
día que vence su reservación. Para un procesamiento estadístico posterior, se requiere
almacenar el hecho de que una reservación cambie (por cambio de habitación, empleado o
prórroga) o que se cancele. Si un huésped se va antes de que culmine su estancia, no es de
interés que el sistema se entere. La fecha de inicio de una reservación no puede cambiarse.
En la figura 7.8,7.9 y7.10 se muestra el DTE, y los diccionarios de datos que complementa
el diagrama; en el que se describen las transiciones y nodos, respectivamente
correspondientes a la clase reservación.
163
Transición Descripción
T0 Carpetero:Cambia Habitación OR Cambia empleado/
New Modificación(‘cambia habitación o empleado’)
T1 Instántanea[Carpetero.Existehuespéd(Huésped dado)]
T2 (Carpetero:Huésped se va antes) OR (self:Vence reservación)
T3 Carpetero:Cambia Habitación OR Cambia empleado/
New Modificación(‘cambia habitación o empleado’)
T4 (Carpetero:Huésped cancela) OR (self.Vencefecha entrada)/
New Modificación(‘reservación cancelada’)
T5 Instantánea
T6 Carpetero:Llega huésped
T7 Carpetero:Huésped pide prórroga[Fecha actual=self:.Obtener día de salida]/
New Modificación(‘prórroga’)
T8 Instantánea
T9 Carpetero:Llega huésped
T10 Carpetero:Cambia habitación
T11 Carpetero:Cambia empleado
T12 Ama de llaves:Habitación pertenece a otro grupo
T13 Instantánea[not Carpetero.Existehuespéd(Huésped dado)]
T14 Instantánea
T15 Instantánea
T16 Instantánea
T17 Carpetero:Huésped cancela/New Modificación(‘reservación cancelada’)
T18 Carpetero:Cambia Habitación OR Cambia empleado/
New Modificación(‘cambia habitación o empleado’)
Figura 7.9 Diccionario de datos. Transiciones.
Nodo Actividades Restricciones
Cambiando Ama de llaves.Cambiar estado(Habitación ocupada) -
habitación Ama de llaves.Buscar habitación disponible (Tipo;Nueva habitación)
Habitación ocupada:=Nueva habitación
Ama de llaves.Cambiar estado(Habitación ocupada)
SI Ama de llaves.Devolver empleado (Habitación ocupada) <>
Empleado que lo atiende
SI J’Personal.Devolver estado(Empleado que lo
atiende)=ocupado
J’Personal.Cambia estado (Empleado que la atiende)
FINSI
J’Personal.Buscar empleado(Habitación ocupada;Nuevo
empleado)
Empleado que la atiende:=Nuevo empleado
SI J’Personal.Empleado a tope (Empleado que lo atiende)
J’Personal.Cambia estado (Empleado que la atiende)
FINSI
FINSI
Figura 7.10 Diccionario de datos. Nodos.
164
Nodo Actividades Restricciones
Cambiando SI J’Personal.Devolver estado (Empleado que lo atiende)=ocupado -
empleado J’Personal.Cambia estado(Empleado que la atiende)
FINSI
J’Personal.Buscar empleado(Habitación ocupada;Nuevo empleado)
Empleado que la atiende:=Nuevo empleado
SI J’Personal.Empleado a tope (Empleado que lo atiende)
J’Personal.Cambia estado(Empleado que la atiende)
FINSI
Esperando - -
huésped
Cancelando SI J’Personal.Devolver estado (Empleado que lo atiende)=ocupado -
reservación J’Personal.Cambia estado(Empleado que la atiende)
FIN SI
Ama de llaves.Cambiar estado(Habitación ocupada)
Disfrutando Carpetero.Registrar llamadas telefónicas not self.Vence
reservación Ama de llaves.Registrar servico de habitaciones reservación
Liquidando Ama de llaves.Cambiar estado(Habitación ocupada)
reservación SI J’Personal.Devolver estado (Empleado que lo atiende)=ocupado
J’Personal.Cambia estado(Empleado que la atiende)
FIN SI
Carpetero. Registrar estancia(Turista,Habitación ocupda)
Prorrogando Self.Modificar cantidad de días(Días)
reservación
Figura 7.10 Diccionario de datos. Nodos. (Continuación)
7.3.2- Transformación.
165
Como se aprecia, no es necesario en éste módulo desarrollar los pasos incluidos dentro del
proceso de normalización aún cuando se implemente en un medio relacional porque el
proceso de obtención de las clases que modelen el problema a resolver permite obtener el
modelo conceptual. En las clases están incluidas consideraciones físicas, como, por
ejemplo, los atributos calculables.
Reglas para convertir el modelo objeto a tablas.
1. Cada clase con dominios simples se convierte en una tabla.
2. En el caso de la jerarquía de clase, se pueden aplicar tres posibilidades, aunque
recomendamos la última por estar más preparada para la evolución del esquema. Estas
posibilidades son:
a. Definir una única tabla con los atributos del padre y los atributos de cada hija. Esto
provoca que hay tuplas en las que existen campos cuyo valor no es de interés, pero
para otras tuplas sí lo es. Todos los campos de la tabla, que provienen de clase
hijas, tendrían que permitir el valor nulo, lo que afecta el chequeo de la restricción
de integridad por parte del gestor. En estos casos, el programador tendría que
definir los procedimientos necesarios para evaluar esto, en dependencia del valor
que tome el campo que especifica para esa tupla a cuál clase hija pertenece.
b. Definir una tabla para cada clase hija hoja que incluya los atributos de la clase
padre. Cuando la jerarquía es de más de dos niveles, ocurre lo mismo que en el
caso anterior. La ventaja de ésta forma está en la rapidez en la recuperación de
información.
c. Definir una tabla para cada clase hija y para cada clase padre. Para recuperar la
información de una clase hay que consultar la clase hija y sus ancestros.
3. Para clases complejas la conversión depende de las cardinalidades máximas en cada
extremo. Las cardinalidades mínimas introducen restricciones de integridad estática.
Las reglas que se aplican en estos casos son:
m:n Se convierte en una tabla que tiene como la llave las llaves de las clases
que conforman la relación.
1:m ó m:1 Se puede convertir en una nueva tabla o puede ser añadida una llave
extranjera al extremo m, que se corresponde con la llave de la clase del
extremo 1.
Ventajas de implementar como una tabla
Está preparada para la evolución del esquema en caso de que se
transforme la relación a m:n.
Menos complejidad en las búsquedas y actualizaciones de la relación.
Se conserva la propiedad del encapsulamiento, clave en le enfoque
OO, ya que un objeto no debe conocer cosas de otro objeto si no es
necesario.
Ventajas de no implementar como una tabla
166
Menos tablas.
Más rápida la ejecución porque hay que navegar por menos tablas.
1:1 Se puede convertir en una nueva relación o se adiciona un nuevo campo a
alguna de las tablas que es la llave de la otra. Cada solución tiene las
mismas ventajas que en el caso de 1:m ó m:1.
c:m ó m:c En el caso de que en uno de los extremos exista en una cantidad mayor
que 1 de elementos con los que se relaciona la clase del extremo m, se
puede definir una nueva tabla que tenga como atributos llave, la llave del
extremo m y tantos atributos del tipo de la llave del extremo constante
como indique le valor de la constante. También se pueden adicionar a la
clase del extremo m, tantos campos del tipo de la llave del extremo
constante como indique el valor de la constante. Cada solución tiene las
mismas ventajas que en el caso de 1:m ó m:1.
c:c1 Se puede definir una nueva tabla que tendrá c+c1 llaves, en la que habrá
c campos del tipo de la llave del primer extremo, y c1 campos del tipo de
la llave del extremo. También se puede adicionar a la clase de uno de los
extremos, tantos campos del tipo de la llave del otro extremo como
indique el valor de la constante. Cada solución tiene las mismas ventajas
que en el caso de 1:m ó m:1.
En las relaciones de 1:1 y 1:m, sino hay ciclos, se puede tener en una sola tabla los
objetos que participan en la relación, pero esto viola la 2FN por lo que introduce
redundancia.
En el caso de las relaciones n-arias (n>2), se crea una tabla con las llaves de las clases
que intervienen y las cardinalidades se analizan como restricciones de integridad
estáticas.
A pesar de que no es necesario crear nuevas clases que reflejen la relación en casi
ningún caso, se recomienda hacerlo porque el esquema puede evolucionar y no sería en
estos casos necesario hacer cambios a la estructura de la BD, solo a las restricciones de
integridad estática asociadas a la cardinalidad.
4. Para las clases compuestas se crea una nueva tabla con el nombre de la clase
compuesta y que tiene como llave las llaves de las clases componentes. Las
cardinalidades se definen como restricciones de integridad estática.
Desde el punto de vista físico se puede particionar una tabla en más de una forma:
Horizontal: Varias tablas iguales, pero cuyo nombre indica significados diferentes. Por
ejemplo. Enero, Febrero,..., Diciembre; serían tablas con igual estructura, pero que
reflejan los huéspedes que llegan al hotel cada mes.
Vertical: Atributos con distintos niveles de acceso que provoca dividir una tabla en
varias con igual llave, pero atributos diferentes. Por ejemplo, Huésped General que
tiene DNI, Número de pasaporte y nombre, y Huésped Procedencia con DNI y País.
167
En el caso de que la implementación sea hacía un SGBDOR, que permita tener campos que
referencien a otro objeto, no es necesario que se cambie el tipo de éste campo para el tipo
de la llave de la clase a la que pertenece el objeto referenciado.
7.3.3- Utilización.
Siempre que se posea un lenguaje OO asociado al gestor , es posible definir éste módulo.
Cuando se trabaja con un LPOO que permite relacionarse con un gestor de BD o con un
SGBDOR que incluye un lenguaje con características de la OO, podremos crear clases que
sirvan de interfaz entre la información almacenada y el resto de las clases no persistentes.
No se definen clases nuevas, sino que se parte de las mismas persistentes que se
transformaron en tablas, pero que tendrán métodos que permitan la relación con la
información almacenada, de manera que solo ellas tendrán acceso a las tablas. Esto
garantiza cumplir uno de los principios del enfoque OO que se refería a que un cambio
debe afectar al mínimo de clases posibles porque nadie conoce la implementación de una
clase.
A las clases persistentes hay que añadirle métodos que permitan:
crear una tabla,
destruir una tabla,
incluir una tupla,
eliminar una tupla,
modificar una tupla y
recuperar información de una tupla,
y que constituyen métodos privados implementados usando un lenguaje de consulta. El
resto de los métodos que tenían las clases, que se correspondían con servicios a ella
solicitados por objetos de otras clases, se especifican utilizando un lenguaje que se describe
168
en el epígrafe 7.4.2 en el que se invoca a los métodos anteriores cuando exista la necesidad
de trabajar con la información almacenada.
169
Asociaciones de agregación, indicando las dimensiones Inclusiva/Referencial y
Estática/ ({I/R,E/D}).
Para que un objeto exista a un nivel dado de la jerarquía de clases, tiene que existir a todos
los niveles superiores. En el caso de las agregaciones ocurre algo similar, para que el objeto
agregado exista, tienen que existir todos los objetos que forman parte de la relación. En
ambos casos, lo inverso no tiene que ocurrir necesariamente.
Como se aprecia, el DC incluye la definición de restricciones de integridad estática a través
de las cardinalidades de las relaciones y las dimensiones {I/R,E/D}. El resto se capturan
textualmente especificando el dominio de los atributos indicando tipo de datos, si es llave o
no, si se puede tomar valor nulo, si es único, el rango, valor por defecto y fórmula de
derivación en caso de que la posea. Para cada clase padre en la jerarquía se debe aclarar si
la herencia es o no total y con o sin solapamiento. En la figura 7.11 Se aprecian las tablas
resultantes del ejemplo de la figura 7.6.
Campos Tipo Llave Único Nulo Llave Rango Valor Fórmula
Extranjera por de
defecto derivación
Número Entero Sí Sí No No 1..100 100 -
Piso Entero No No No No 3..40 40 -
Estado Enumerado No No No No Disp, 3000 -
Ocup
Tipo Enumerado No No No No S,D,SU S -
a)
170
Campos Tipo Llave Único Nulo Llave Rango Valor Fórmula
Extranjera por de
defecto derivación
Habitación Entero Sí Sí No Sí 1..100 100 -
ocupada
Empleado Cadena Sí Sí No Sí 0 0 -
que la
atiende
Turista Cadena Sí Sí No Sí 0 0 -
Fecha de Fecha No No No No Fecha Fecha -
inicio actual.. actual
un año
despué
s
Cantidad de Entero No No No No 1..30 1 -
días
Monto a Real No No Sí No 1.. 3000 Habitación.
pagar 90000 Precio
noche*
Cantidad
de días
d)
Campos Tipo Llave Único Nulo Llave Rango Valor Fórmula
Extranjera por de
defecto derivación
DNI Cadena Sí Sí No No - 0 -
Habitación Entero Sí Sí No Sí 1..100 100 -
ocupada
e)
Campos Tipo Llave Único Nulo Llave Rango Valor Fórmula
Extranjera por de
defecto derivación
Número Entero Sí Sí No No 1..100 100 -
Fecha Fecha No No No No _ Fecha -
actual
f)
Figura 1.11 Tablas resultantes (Continuación). d) Reservación. e) Accostumed-Habitación.
f)Habitación ocupada
Producto de la descomposición, apareció una tabla Accostumed que solo se diferenciaba de
la clase padre en que no tenía el atributo “estuvo”, por lo que se decidió físicamente tener
dos tablas con igual estructura de nombres “Huésped” y “Accostumed”.
Las restricciones a columnas descritas anteriormente se corresponden con diferentes
categorías que han podido especificarse. Existen otras condiciones que deben satisfacerse y
que no es posible categorizarlas, por lo que se pueden definir como afirmaciones. Para
poder determinar la necesidad de estas restricciones al dominio, es necesario especificar
171
entonces, para todos aquellos atributos que lo requieran, reglas que indiquen qué valores
pueden tomar, o lo que es igual, qué condiciones deben cumplir los atributos. El formato
general para expresar estas restricciones sería:
Precondiciones
Del DTE se pueden obtener directamente las precondiciones que deben cumplirse para que
ocurra un cambio de estado. Esta precondiciones quedan reflejadas, en la descripción de las
transiciones, como la unión del evento que ocurre y las condiciones que deben evaluarse
para provocar el cambio. Las restricciones que tienen los estados se deben cumplir para que
172
el objeto se mantenga en ese estado, por lo tanto lo contrario de una restricción tiene que
ser una condición de alguna de las transiciones de salida que se deriven de ese estado.
Evaluación
173
En el caso de la reservación no hay ningún atributo con estas características. El
ejemplo clásico es el atributo estado civil.
Valor actual Acción portadora Nuevo valor
- Registro civil: Nacer Soltero
Casado Notario: Divorciar Divorciado
Casado Registro civil: Enviudar Viudo
Not casado Notario: Casar Casado
Las acciones se corresponden con los eventos definidos en el DTE. En los casos del tipo a y
b, el efecto de la acción está descrito dentro de las acciones a ejecutar en el estado. Para los
atributos clasificados como c, la especificación describe restricciones de integridad
dinámica de la clase que se obtiene cuando se sigue la traza de las transiciones de estado
que están asociadas con un mismo atributo.
Para facilitar la identificación de estas fórmulas, recomendamos que cuando se realice el
DTE se:
Clasifique los atributos dinámicos en alguna de estas tres categorías antes de empezar.
Si el atributo es del tipo a, se identifiquen los eventos que lo afectan teniendo en cuenta
cuáles aumenta su valor, cuáles lo decrementan y cuáles lo reinicializan. Se deben
agrupar todos los eventos que tengan el mismo efecto y el mismo tipo de acción
(incrementadora, decrementadora y reinicializadora), y definir un estado que refleje
esta situación. Si hay más de un evento en está unión, se relacionan usando el operador
OR.
Si el atributo se clasifica del tipo b, una vez identificados los eventos y el efecto que
provocan, se agrupan usando OR los eventos que provocan una misma forma de
obtener el nuevo valor, y se define un estado para ellos.
Si el atributo es del tipo c, se identifican todos los eventos, el nuevo valor que
provocan y el valor del atributo para el cual ese evento tiene sentido. Se definen tantos
estados, como posibles valores existan.
Si se tiene en cuenta la 1ra de las recomendaciones en cuanto a particionamiento que se
daba en el epígrafe 7.3.1, los atributos clasificados como a y c son fuente para definir
estados agregados.
Una vez procesados todos los atributos dinámicos de todas las clases, se tienen todas las
fórmulas de evaluación.
Disparadores
174
Un disparador es una sentencia que el sistema ejecuta automáticamente como efecto
secundario de una modificación de la BD, tal como vimos en el epígrafe 1.4.3.
Es lógico que nos sea difícil obtener disparadores del DTE pues no siempre un cambio de
estado tiene como antecedente o evento que lo provoque, un valor especifico de uno o
varios atributos. El DTE no es la fuente natural. Un mecanismo de disparo entra a funcionar
cuando en una tabla se adicionan o elimina elementos o cuando un atributo dado toma un
valor determinado. Es por ello que en la especificación de estos mecanismos lo primero es
dejar claro el hecho qué lo provoca (Insert - adición, Delete - eliminación o Update -
modificación) y sobre quién se evalúa (nombre de la tabla, para las dos primeras
operaciones, y nombre de la tabla, atributo y valor, para el caso de la modificación). Lo
segundo es definir las acciones que se ejecutan como consecuencia, para lo cual se puede
usar también la notación UML.
La captación del mecanismo de disparo sería para estos casos textual. La especificación
tendría el siguiente formato:
<causa que lo provoca><tabla>:[condición]/<acción>
Algunos gestores, como Oracle, cuando se define un disparador se pregunta además si ese
disparador debe ejecutarse antes o después que se produzca el cambio que hace que se
cumpla la condición. Por lo que a esta especificación podría añadírsele al final
{antes/después}. Si se define antes, primero se ejecutan las acciones asociados al
disparador y después se produce el cambio. Si se especifica después, ocurre lo contrario.
En el DTE del ejemplo los cambios de estado de las transiciones T2 y T4 están
relacionados con el valor de un atributo, pero no se deben a una actualización de la BD por
lo que no se genera un disparador. Supongamos que se desea avisar a los huéspedes el día
antes que vence su reservación. Esto es un proceso automático que se verifica todos los días
y como consecuencia se envía una nota informándole de la situación por si desea solicitar
prórroga. El mecanismo no se activa por un cambio en la tabla reservación, sino en la fecha
actual. Para representar esto usando disparadores, se podría crear una tabla Fecha con un
atributo fecha actual que al actualizarse dispare el envío de esta notas. La especificación
sería:
UPDATE Fecha: IF UPDATE Fecha actual/Reservación.Envía nota
, el disparador que se genera tendría la siguiente definición en SQL Server:
CREATE TRIGGER Vencen
ON Fecha
FOR UPDATE
AS
IF UPDATE Fecha actual
ALL(Reservación.Envía nota)
El procedimiento “Envía nota” verifica cuáles reservaciones vencen al día siguiente, y
genera la comunicación hacía los huéspedes.
Algunas transiciones tienen asociadas acciones. Hay ocasiones en que estas acciones
podrían implementarse como las acciones definidas en el disparador. En estos casos la
causa sería la modificación (UPDATE) de el o los atributos que se afectan cuando se pasa
175
al nuevo estado. La propiedad antes/después tomaría el valor de antes. Esto es válido
cuando ocurre algo de lo siguiente:
Solo hay un estado y una transición que llega a ese estado, para el o los atributos
afectados.
Solo hay un estado relacionado con el cambio de el o los atributos y todas las
transiciones que llegan a él tienen asociadas las mismas acciones.
Hay varios estados relacionados con el cambio de el o los atributos y todas las
transiciones que llegan a ellos tienen asociadas las mismas acciones.
Las acciones instantáneas que se producen como parte de las transiciones T0, T3, T7 y T18;
podrían haberse definido como reglas de disparo. Cada vez que se modifica alguna de los
siguientes atributos: habitación, empleado o cantidad de días; se inserta automáticamente
una tupla a la tabla Modificación. Es responsabilidad del diseñador, en caso de no poseer
una herramienta CASE que lo verifique, garantizar que no se duplique la especificación,
pues éste disparador se obtiene directamente del DTE. Fíjese que en el caso de T4, como el
evento no provocó un cambio de los valores de los atributos de ésta clase, no se genera el
mecanismo de disparo por lo que hay que definirlo.
Derivación
Especificación de métodos
176
llamada el evento espera por una respuesta.
Terminación Destruye el objeto
No Lenguaje de especificación propio para representar otras construcciones.
interpretado
177
En la descripción se pueden usar las funciones de agregación: contar, sum (sumar), avg
(promedio), máx (máximo) y mín (mínimo), indicando sobre qué elementos se hacen
efectivas. Contar actúa sobre una clase contando la cantidad de objetos definidos, el resto
actúa sobre un atributo numérico en particular. En todos los casos da como valor un
número. Se puede especificar una condición que restringe la cantidad de objetos que se
analizan. El formato de la especificación sería:
<función de agregación> (<clase o clase.atributo>) [[condición]]
178
Definición de clases
Nombre Atributos Responsabilidades Colaboradoras Colaboraciones
Concursante Nombre:cadena Devolver acumulado total - -
Acumulado (;Acumulado).
total:real Crear concursante
Pais:cadena (NombreConcursante,
DNI:cadena PaísConcursante, DNIConcursante).
Eliminar concursante.
Averiguar si es uno dado
(DNIConcursante;V/F)
Actualizar acumulado total
(Acumulado)
Devolver nombre (;Nombre)
Lista de Cantidad:entero Incluir concursante Concursante Devolver acumulado total
concursantes Identificador del NombreConcursante, (;Acumulado).
primer PaísConcursante,DNIConcursante) Crear concursante
concursante: Ordenar concursante de acuerdo a (NombreConcursante,
Concursante acumulado total en orden descendente. PaísConcursante,
Eliminar concursante. DNIConcursante).
Actualizar Acumulado total Eliminar concursante.
(DNIConcursante,Acumulado) Averiguar si es uno dado
(DNIConcursante;V/F)
Actualizar acumulado total
(Acumulado)
179
Nombre Atributos Responsabilidades Colaboradoras Colaboraciones
Calificación EjercicioC: Crear calificación Ejercicio Devolver nombre
Ejercicio (EjercicioDato,ConcursanteDato, (;NombreEjercicio)
Puntuación:Real PuntuaciónDato).
ConcursanteC: Devolver puntuación (;Puntuación, Concursante Averiguar si es uno dado
Concursante DNIConcursante). (DNIConcursante;V/F)
Eliminar calificación. Devolver nombre (;Nombre)
Averiguar si es una dada
(DNIConcursante,
NombreEjercicio;V/F).
Lista de Cantidad Incluir calificación Calificación Crear calificación
calificaciones Identificador (EjercicioDato,ConcursanteDato, (EjercicioDato,
de la primera PuntuaciónDato). ConcursanteDato,
calificación Eliminar PuntuaciónDato)).
calificaciones(DNIConcursante, Devolver puntuación
NombreEjercicio). (;Puntuación, DNIConcursante).
Calcular acumulado total de todos los Eliminar calificación.
concursantes. Averiguar si es una dada
(DNIConcursante,
NombreEjercicio;V/F).
Lista de Actualizar calificación total
concursantes (DNIConcursante, Acumulado).
180
Nombre Atributos Responsabilidades Colaboradoras Colaboraciones
Ejercicio Nombre:cadena Crear Ejercicio (NombreDato, - -
Características: CaracterísticasDato).
cadena Eliminar ejercicio.
Devolver nombre (;Nombre).
Área EjercicioA: Actualizar calificación de un juez Lista de jueces Incluir juez
Ejercicio (CalificaciónDato,DNIJuez). (NombreJuez,PaísJuez,
Jueces Lista de Calcular calificación total DNIJuez,CompetenciasDato).
jueces (;Calificación total). Eliminar juez dado (DNIViejo)
Cantidad de Crear área (NonbreDato, Eliminar jueces.
jueces: Entero CaracterísticasDato, Cantidad de Calcular calificación Total
Cantidad de jueces Dato,JuecesDato). (;Calificación total).
calificaciones Eliminar área. Limpiar calificaciones.
reportadas: Limpiar calificaciones. Actualizar calificación de un
Entero Averiguar si es un área dada juez
Ubicación: (NombreEjercicio). (CalificaciónDato,DNIJuez).
caracter Cambiar juez Listar curriculum de jueces.
(DNIVIejo,NombreJuez,PaísJuez,DNI Ejercicio Devolver Nombre (;Nombre).
Juez). Crear Ejercicio (NombreDato,
Listar curriculum de jueces. CaracterísticasDato).
Eliminar ejercicio.
Lista de Cantidad:Entero Listar curriculum. Competencia Devolver datos (;Nombre,
competencias Identificador de Incluir competencias Categoría).
la 1ra (NombreDato,CategoríaDato). Crear (NombreDato,
competencia: CategoríaDato).
Competencia
181
Nombre Atributos Responsabilidades Colaboradoras Colaboraciones
Competencia Nombre:Cadena Devolver datos (;Nombre, Categoría). - -
Categoría: Crear (NombreDato, CategoríaDato).
Cadena
Lista de áreas Cantidad Incluir área (NonbreDato, Área Actualizar calificación de un
Identificador de CaracterísticasDato, Cantidad de juez
la primera área jueces dato). (CalificaciónDato,DNIJuez).
Eliminar área (NombreEjercicio). Calcular calificación total
Actualizar calificación de un juez en (;Calificación total).
un área (CalificaciónDato, DNIJuez, Crear área
EjercicioDato). (EjercicioDato,Cantidad de
Calcular calificación total en un área jueces Dato,JuecesDato).
(Área;Calificación total). Eliminar área.
Limpiar calificaciones en un área Limpiar calificaciones.
(NombreEjercicio). Averiguar si es un área dada
Cambiar juez (NombreEjercicio, (NombreEjercicio).
DNIVIejo,NombreJuez,PaísJuez, Cambiar juez
DNIJuez). (DNIVIejo,NombreJuez,PaísJue
Listar curriculum. z,DNIJuez).
Listar curriculum de jueces.
Comisión AnotadorC: Controlar resultados de la Anotador Controlar resultados de la
organizadora Anotador competencia. competencia.
Concursantes: Obtener máximos acumuladores Obtener máximos acumuladores
Lista de Preparar condiciones para la Lista de Incluir concursante
concursantes competencia. concursantes NombreConcursante,
Áreas: Lista de Inicio competencia PaísConcursante,
áreas DNIConcursante)
Empezó:boolean Eliminar concursante.
182
Nombre Atributos Responsabilidades Colaboradoras Colaboraciones
Comisión Lista de áreas Incluir área (NonbreDato,
organizadora CaracterísticasDato, Cantidad de
jueces dato).
Eliminar área (NombreEjercicio).
Listar curriculum.
Cambiar juez (NombreEjercicio,
DNIViejo,NombreJuez,PaísJuez,
DNIJuez).
Juez Puntos:Real Devolver calificación (;Puntos). Lista de Listar curriculum.
Nombre:Cadena Crear juez competencias Incluir competencias
País:Cadena (NombreDato,PaísDato,DNIDato, (NombreDato,CategoríaDato).
Competencia: CompetenciasDato).
Lista de Eliminar juez.
competencia Actualizar calificación (Puntos).
DNI Limpiar calificación.
Listar curriculum
Averiguar si es uno dado (DNIJuez;
V/F).
Lista de Cantidad:Entero Incluir juez Juez Devolver calificación (;Puntos).
jueces Identificador del (NombreDato,PaísDato,DNIDato, Crear juez
primer juez:Juez CompetenciasDato). (NombreDato,PaísDato,DNIDato,
Eliminar juez dado (DNIViejo) CompetenciasDato).
Calcular calificación Total Eliminar juez.
(;Calificación total). Actualizar calificación (Puntos).
Limpiar calificaciones. Limpiar calificación.
Actualizar calificación de un juez Listar curriculum
(CalificaciónDato,DNIJuez). Averiguar si es uno dado
Listar curriculum de jueces. (DNIJuez; V/F)..
183
Nombre Atributos Responsabilidades Colaboradoras Colaboraciones
Anotador ConcursantesA Controlar resultados de la Lista de Ordenar concursante de acuerdo a
: Lista de competencia. concursantes acumulado total en orden
concursante Obtener máximos descendente.
ÁreasA: Lista acumuladores. Lista de Incluir calificación
de áreas calificaciones (EjercicioDato,ConcursanteDato,
Calificaciones PuntuaciónDato).
A: Lista de Eliminar calificaciones
calificaciones (DNIConcursante,
NombreEjercicio).
Calcular acumulado total de todos
los concursantes.
Lista de áreas Actualizar calificación de un
juez en un área
(Calificación,Ejercicio).
Calcular calificación total en un
área (Área;Calificación total).
Limpiar calificaciones en un
área (Ejercicio).
184
Asociaciones
Tipo Clase Clase asociada
Composición paralela Comisión organizadora Anotador
Lista de áreas
Lista de concursantes
Anotador Lista de áreas
Lista de concursantes
Lista de calificaciones
Agregación Calificación Ejercicio
Concursante
Juez Lista de competencias
Área Lista de jueces
Ejercicio
Agrupamiento Lista de calificaciones Calificación
Lista de jueces Juez
Lista de concursantes Concursante
Lista de áreas Área
Depende de Calificación Lista de calificaciones
Ejercicio Área
Juez Lista de jueces
Concursante Lista de concursantes
Área Lista de áreas
Lista de concursantes Comisión organizadora
Lista de áreas Comisión organizadora
Anotador Comisión organizadora
Lista de concursantes Anotador
Lista de áreas Anotador
Lista de calificaciones Anotador
Lista de jueces Área
Lista de concursantes Lista de calificaciones
185
Tipo Clase Clase asociada
Competencia Lista de competencias
Lista de competencias Juez
Tiene conocimiento de Lista de calificaciones Calificación
Lista de concursantes Concursante
Lista de áreas Área
Calificación Ejercicio
Calificación Concursante
Área Ejercicio
Lista de competencias Competencia
Juez Lista de competencias
Lista de jueces Juez
Analogía Concursante
Juez
186
Solución
Estática
Clases persistentes Clases no persistentes
Ejercicio Comisión organizadora
Concursante Anotador
Lista de concursantes
Área
Lista de áreas
Competencia
Lista de competencias
Calificación
Lista de calificaciones
Juez
Lista de jueces
De las clases persistentes se clasifican en simples: Ejercicio, Concursante y Competencia;
como compleja a la clase Juez y como compuesta a las clases Área y Calificación. Las
llaves de estas clases se muestran en la tabla de la figura 7.12.
Clase Llave Llave extranjera
Ejercicio Nombre No
Competencia Nombre No
Juez DNI No
Área NombreEjercicio Sí
DNIJuez Sí
Concursante DNI No
Calificación DNIConcursante Sí
NombreEjercicio Sí
Figura 7.12 Llaves
A partir de la definición de clases obtenida del análisis, se puede definir una nueva clase
que incluya el comportamiento y los atributos comunes de las clases análogas Concursante
y Juez. Esta nueva clase podría llamarse Persona. Las definiciones de las clases hijas se
modificarían, quedando estas tres clases de la siguiente forma:
Clase Atributos Responsabilidades
Persona DNI Crear (NombreDato,DNIDato,PaísDato).
Nombre Eliminar.
País Devolver nombre (;Nombre).
Averiguar si es uno dado (DNIDato;V/F).
187
Clase Atributos Responsabilidades
Concursante Acumulado Crear (NombreDato,DNIDato,PaísDato).
total Devolver acum,ulado total(;Acumulado).
Actualizar acunulado total (Acumulado).
Juez Puntos Crear (NombreDato,DNIDato,PaísDato, Competencias
Competencias Dato).
Eliminar.
Actualizar calificación (PuntosDatos).
Limpiar calificación.
Listar curriculum.
Como se aprecia en ésta definición, hay métodos que pasan a la clase padre, pero los
métodos crear y y eliminar requieren redefinirse en al menos uno de los hijos. Esta
definición, más el resto de las obtenidas en el análisis y que no sufrieron cambio, permiten
obtener el DC de la figura 7.13.
Persona
{ocupación=’concursante’} {ocupación=’juez’}
<1,m> <0,m>
Concursante Juez Competencia
<1,1> <5,9>
{I,E} <0,6>
Calificación
{R,E} <0,m>
{I,D} <1,1>
<1,1>
{R,E} Área
Ejercicio
<1,1><1,1>
188
Clase: Concursante
Atributo Tipo Único Nulo Rango Valor por Fórmula de
defecto derivación
Acumulado total Real No Sí [0,60] 0 Suma de todas
(D) las calificaciones
del concursante
Clase: Juez
Atributo Tipo Único Nulo Rango Valor por Fórmula de
defecto derivación
Puntos (AD) Real No Sí [0,10] 0 -
Competencias Lista de No Sí - Nil -
(AE) competencias
Clase: Ejercicio
Atributo Tipo Único Nulo Rango Valor por Fórmula de
defecto derivación
Nombre (AE) Cadena Sí No - X -
Descripción Cadena Sí No - X -
(AE)
Clase: Área
Atributo Tipo Único Nulo Rango Valor por Fórmula de
defecto derivación
EjercicioA (AE) Ejercicio Sí No - - -
JuecesA (AD) Lista de Sí No - - -
jueces
Cantidad de Entero No No [5,9] 5 -
jueces (AE)
Cantidad de Entero No Sí [0,9] 0 -
calificaciones
reportadas (AD)
Ubicación (AE) Carácter Sí No [I,VI] I -
Clase: Calificacion
Atributo Tipo Único Nulo Rango Valor por Fórmula de
defecto derivación
EjercicioC (AE) Ejercicio Noí No - - -
ConcursanteC Concursante No No - - -
(AE)
Puntos (AE) Real No No [0,10] 0 -
189
Clase: Competencia
Atributo Tipo Único Nulo Rango Valor por Fórmula de
defecto derivación
Nombre (AE) Cadena Sí No - X -
Categoría (AE) Enumerado No No [I,V] V -
Posteriormente hay que verificar si existen otras restricciones asociadas a los dominios que
no quedan reflejadas en las categorizadas anteriores. En éste ejemplo, no está
explícitamente descrito en la estructura estática que el valor máximo que puede tomar el
atributo Cantidad de calificaciones reportadas es el valor que tenga el atributo Cantidad de
jueces (ambos atributos de la clase Área). Como posteriormente se verá, en el DTE queda
más clara ésta restricción porque está relacionada con los cambios de estado. Es por ello
que no es necesario especificar ésta restricción de otra forma.
El atributo categoría de la clase Competencia, puede ser implementado como una
restricción si el gestor no permite éste tipo de dato. La especificación sería:
Categoría=’I’ OR Categoría=’II’ OR Categoría=’II’ OR Categoría=’IV’ OR
Categoría=’V’ ;
que usando las afirmaciones de SQL standard quedaría implementado como:
ASSERT Valida_categoría ON Competencia
Categoría=’I’ OR Categoría=’II’ OR Categoría=’II’ OR Categoría=’IV’ OR
Categoría=’V’
Supongamos que la ubicación de un área, dentro del área total de competencia, depende del
ejercicio puesto que en los alrededores del ‘área destinada a la competencia de manos
libres, no puede competirse en Caballo con arzones y Caballo de salto. La comisión
organizadora divide el área en 6 partes (I,II,...VI) y señala el área I como la destinada a
Ejercicios a manos libres. Para garantizar ésta restricción hay que validar que la ubicación
de los ejercicios caballo de salto y caballo con arzones no sean ni II ni III. La especificación
quedaría:
Ubicación = SI (Area.EjercicioA.DevolverNombre=’Caballo con arzones’) OR
(Area.EjercicioA.DevolverNombre=’Caballo de salto) IN Area
Area.Ubicación IN [IV,V,VI]
Fin si
La implementación de ésta restricción depende de las potencialidades del lenguaje del
gestor pues incluye una evaluación de una condición ya que la restricción no es válida para
todos los objetos de la clase.
Al aplicar las reglas de transformación descritas se obtienen las siguientes tablas:
190
Tabla: Persona
Atributo Tipo Llave Único Nulo Llave Rango Valor por Fórmula de
extranjera defecto derivación
(D)
Tabla: Juez
Atributo Tipo Llave Único Nulo Llave Rango Valor por Fórmula de
extranjera defecto derivación
Puntos (AD) Real No No Sí No [0,10] 0 -
Tabla: Competencias_Juez
Atributo Tipo Llave Único Nulo Llave Rango Valor por Fórmula de
extranjera defecto derivación
DNI (AE) Cadena Sí Sí No Sí - 0 -
Nombre (AE) Cadena Sí Sí No Sí - X -
Tabla: Competencia
SUM (Calificación.puntos) [Si Calificación.DNIConcursante=DNI]
191
Atributo Tipo Llave Único Nulo Llave Rango Valor por Fórmula de
extranjera defecto derivación
Nombre (AE) Cadena Sí Sí No No - X -
Categoría (AE) Enumerado No No No No [I,V] V -
Clase: Ejercicio
Atributo Tipo Llave Único Nulo Llave Rango Valor por Fórmula de
extranjera defecto derivación
Nombre (AE) Cadena Sí Sí No No - X -
Descripción (AE) Cadena No Sí No No - X -
Clase: Área
Atributo Tipo Llave Único Nulo Llave Rango Valor por Fórmula de
extranjera defecto derivación
NombreEjercicio (AE) Cadena Sí Sí No Sí - X -
DNIJuez (AD) Cadena Sí Sí No Sí - X -
Cantidad de jueces Entero No No No No [5,9] 5 -
(AE)
Cantidad de Entero No No Sí No [0,9] 0 -
calificaciones
reportadas (AD)
Ubicación (AE) Carácter No Sí No No [I,VI] I -
Clase: Calificación
Atributo Tipo Llave Único Nulo Llave Rango Valor por Fórmula de
extranjera defecto derivación
NombreEjercicio (AE) cadena Sí No No Sí - 0 -
DNIConcursante (AE) cadena Sí No No Sí - 0 -
Puntos (AE) Real No No No No [0,10] 0 -
192
Dinámica
Al revisar la clasificación de los atributos en estáticos, dinámicos y derivados; se aprecia
que solo dos clases poseen atributos dinámicos, lo que implica que solo para ellas se realiza
el DTE.
En el caso de la clase Juez, el atributo Puntos se puede clasificar como “característico de un
estado” pues la calificación que un juez da a la ejecución de un ejercicio a un concursante
no depende de la puntuación que dio con anterioridad ni de la que dará después. En éste
caso hay dos hechos que provocan que éste atributo tome dos tipos de valores diferentes.
Uno de ellos está asociado a que el juez califica a un concursante, y el otro a que todos los
jueces emitieron la calificación a un mismo concursante, por lo tanto se pone en 0 la
calificación individual de cada juez. Esto implica la definición de dos estados tal como se
aprecia en la figura 7.14. En la figura 7.15 se describe el diccionario de datos asociado a
éste diagrama.
T4
Actualizando
T0 puntuación T3
T1 T2
Limpiando
puntuación
Figura 7.14 DTE de la clase Juez.
Transición Descripción
To Area: Un juez emite puntuación
T1 Anotador: Todos los jueces emitieron su calificación
T2 Instantánea
T3 Area: Juez deja el área
T4 Area: Juez deja el área [Area.Cantidad calificaciones reportadas=0]
a) Transiciones.
b)
Nodo Actividades Restricciones
Actualizando puntuación Juez.Actualizar calificación (Puntos) -
Limpiando puntuación Juez.Limpiar calificación -
b)Nodos
193
asignado a esa área. El atributo se clasifica por lo tanto en característico de un estado por lo
que se define el estado Cambiando juez. Los estados Esperando inicio de competencia y
Compitiendo, ayudan a completar la semántica de la descripción dinámica de ésta clase. En
la figura 7.16 se describe el DTE de la clase y en la figura 7.17 el diccionario de datos (DD)
a él asociado.
T1
Cambiando
T0 juez
T5
T4
T2 T3
T7
Esperando inico Compitiendo Actualizando
de competencia T6 calificación
T8
T9 T10
T11
Cerrando
concursante
194
Nodo Actividades Restriciones
Cambiando juez Self.Cambiar juez (DNIViejo, NombreJuez, -
PaísJuez,DNIJuez)
Compitiendo - Cantidad de
calificaciones
reportadas Cantidad
de jueces
Esperando inicio - -
de competencia
Actualizando Self.Actualizar calificación de un juez -
calificación (CalificaciónDato, DNIJuez)
Cantidad de calificaciones reportadas:=
Cantidad calicaciones reportadas+1
Cerrando Self.Calcular calificación total -
concursante (;Calificación total)
Cantidad de calificaciones reportadas:=0
Lista de calificaciones.Incluir calificación
(EjercicioDato,
ConcursanteDato,Calificación total)
b) Nodos.
Figura 7.17 Diccionario de datos de la clase área (continuación). B)Nodos.
Precondiciones.
En ambos DTE, en las transiciones están especificadas las precondiciones que deben
cumplirse para que ocurran cambios de estado. En el caso de la clase Area, algunas
transiciones también tienen asociadas condiciones a cumplir para que pueda efectuarse ese
cambio. Un ejemplo es la transición T3, que refleja que no basta con que se produzca el
evento “Cambio juez de un área”, la condición obliga a que éste cambio solo se haga
efectivo cuando no se esté evaluando a un concursante, lo que se refleja con la
comprobación de que el atributo Cantidad de calificaciones reportadas sea igual a cero.
Evaluación.
Clase: Juez
Atributo: Puntos
Clasificación: Características de un estado
Acción portadora Efecto de la acción
Area: Un juez emite una puntuación Juez.Actualizar calificación (Puntos)
Anotador: Todos los jueces emitieron su Juez.Limpiar calificación
calificación
195
Clase: Area
Atributo: Jueces
Clasificación: Características de un estado
Acción portadora Efecto de la acción
Comisión organizadora:Cambio juez un área Area.Cambiar juez (DNIViejo,NombreJuez,
PaísJuez,DNIJuez)
Clase: Area
Atributo: Cantidad de calificaciones reportadas
Clasificación: Cardinal
Acción Acción Acción Condición Efecto de la acción
incrementadora decrementadora reinicializadora
Anotador: - - - +1
Califica un juez
a un concursante
Cantidad de 0
calificaciones
reportadas =
Cantidad de
jueces
Disparadores.
En el caso de la clase Area, el cambio del valor del atributo jueces provoca la creación de
un nuevo objeto del tipo de clase Modificación. Este tipo de disparadores no requieren de la
especificación del mecanismo de disparo asociado puesto que se puede generar
automáticamente del DTE. El mecanismo generado sería:
UPDATE Area: IF UPDATE Jueces/New Modificación (Area afectada);
Que implementado usando SQL Server quedaría:
CREATE TRIGGER Crea_modificación
ON Area
FOR UPDATE
AS
IF UPDATE Jueces
New Modificación (Area afectada)
Supongamos que el sistema debe permitir a la comisión organizadora determinar qué países
tienen equipo completo. Para ello, cada vez que se incluye un nuevo concursante, se debe
actualizar un contador por países. Después de analizar éste nuevo requerimiento, se obtuvo
la siguiente definición de clases:
196
Clase Atributo Responsabilidades
Lista de Cantidad: Entero Incluir un nuevo país (DatoPaís)
países Identificador del 1er país: País Averiguar si un país existe (DatoPaís)
Incrementar concursante de un país (DatoPaís)
País Nombre: Cadena Crear (DatoPaís)
Cantidad: Entero Incrementar cantidad
Averiguar si es uno dado (;V/F)
No es necesario que sean persistentes estas clases pues lo único que se desea es que cuando
se conforme la lista de concursantes, se obtenga un reporte de la cantidad de concursantes
por países. La actualización de la lista de participantes (ya sea incluyendo un nuevo país
porque es el 1er concursante de ese país que se inscribe, o el incremento del número de
concursantes para un país en el que ya hubo otras inscripciones) se dispara como
consecuencia de la creación de un objeto de tipo concursante. Una forma de implementar
esto es usando un disparador, que se especifica como:
INSERT Concursante:/Concursante.Incrementar contador
El método “Incrementar contador”, habría que incluirlo en la clase concursante. Como
consecuencia de su implementación, ésta clase tendría como colaboradora a la clase Lista
de países, que a su vez dependería de ella. Para poder implementarlo como disparador
tendríamos que estar seguros que el lenguaje permite definir un procedimiento almacenado
en el que se pueda crear una lista o al menos un arreglo de elementos.
CREARE TRIGGER Incrementa_país
ON Concursante
FOR INSERT
AS
Incrementar contador
El procedimiento almacenado “Incrementar contador” sustituye al método de la clase
Concursante. De no poderse implementar con el lenguaje del gestor éste procedimiento,
habría que ver si se permite la relación con un lenguaje de alto nivel en el que sí es posible
definir estas especificaciones.
Derivación.
Solo hay un atributo derivado, que tiene una fórmula de derivación bastante compleja dado
el hecho de que su valor es la suma de varios valores de un subconjunto de tuplas. Si el
gestor no permite éste tipo de fórmulas, se puede implementar como un disparador que se
asocia a la clase Calificación, de manera que cada vez que se inserte una nueva calificación,
se actualice el acumulado total del concursante asociado. Este disparador quedaría
especificado como:
INSERT Calificación:/Calificación.Actualizar acumulado (PuntosDato)
El procedimiento “Actualizar acumulado” generaría una secuencia de envió de mensajes tal
como se presenta en la figura 7.18.
197
Calificación Lista de concursantes Concursante
Actualizar acumulado
(DNIConcursante,PuntosDato)
Averiguar si es un concursante
dado (DNIConcursante;V/F)
Sí
Especificación de métodos.
Todos lo métodos de las clases hay que especificarlos puesto que posiblemente el
programador no sea la misma persona que realizó el análisis y diseño, y es muy difícil que
con una descripción en lenguaje natural se pueda dejar clara la implementación que tiene
asociada.
Veamos un ejemplo:
Clase: Concursante
Responsabilidad: Incrementar contador
Especificación:
SI Lista de países.Averiguar si un país existe (País) = Falso
Lista de países.Incluir un nuevo país (País)
SINO
Lista de países.Incrementar concursante de un país (País)
FIN SI
Conclusiones.
Estática y dinámica son dos perspectivas importantes ha tener en cuenta cuando se diseña la
BD. Una busca definir estructura y otras cambios permitidos sobre esa estructura. Obviar
alguna de estas vistas en el proceso de diseño nos puede llevar a una BD inconsistente.
Lamentablemente no siempre las especificaciones que se dan a los programadores incluyen
todos los aspectos dinámicos y restricciones de integridad estática que aquí se describen.
Esto provoca, en el mejor de los casos, que se inserten parches en la programación cuando
se detecta algún problema (lo que introduce errores) y no aprovecha al máximo las
potencialidades del MR y las emergentes del objeto/relacional.
198
En ésta propuesta de tareas a desarrollar dentro del diseño de la BD, se ha descrito la forma
de obtener todo lo que Cooling y Pastor describe que se define dentro de los
comportamientos estático y dinámico. Se usó como referencia a estos autores porque
recogen en sus criterios tópicos abordados por otros también de reconocimiento en éste
campo.
La idea de acercar ADOOSI Visual a UML no es casual. UML es desde finales de 1997 la
notación estándar para la OO aprobada por el OMG (Object Management Group), por lo
que su utilización en la metodología es lógica.
Partir, como premisa para el diseño de la BD, de la clasificación de sus atributos, permite
minimizar éste proceso al centrarse el diseñador en lo que puede afectar al atributo y lo que
debe saber de cada uno.
Estamos listos para comprobar, a través de la repuesta a las preguntas iniciales, si se ha
captado la esencia de ésta propuesta de diseño.
199
¿Cómo ésta propuesta de conversión del MOO no desecha por completo todas las
características de éste enfoque?.
Referencias bibliográficas.
200
[Hdez, 1996] Hdez, A. Anache, I. Y Alvarez, S. “Diseño orientado a objetos y bases de
datos relacionales”. Memorias del evento internacional Compac’96, Noviembre 1996.
Cuba. ISBN-959237-024-9.
[Hdez, 1998a] Hdez, A. y otros. “Soluciones al diseño de la base de datos a partir de un
desarrollo orientado a objetos”. Publicación electrónica del evento internacional
Informática’98, Febrero 1998. Cuba.
[Hdez, 1998b] Hdez, A.; Alvarez, S. y Pastor, O. “Generación de código para implementar
la persistencia a partir de especificación de diseño orientado a objetos”. Proceddings de
la XXV Convención de la UPADI. 1er Congreso de Informática. Perú. 1998.
[Martín, 1998] Martín, J. and Odell, J. “Object-oriented methods: a foundation”. Second
edition. Prentice-Hall, Inc. 1998. EUA.
[Rumbaugh, 1996] Rumbaugh, J. Blaha, M. Premarlini, W. Eddy, F. y Lorense, W.
“Modelado y diseño orientado a objetos. Metodología OMT.” Prentice-Hall
Hispanoamericana. S.A. 1996.
[Rumbaugh, 1999]Rumbaugh, J.; Jacobson, I. and Booch, G. “The unified modeling
language: reference manual”. Adison-Wesley Longman, Inc. 1999 Canadá.
201