Logo Studenta

Modelado Orientado a Objetos

¡Estudia con miles de materiales!

Vista previa del material en texto

Modelado Orientado a Objetos Aplicado a 
Entornos de Desarrollo Relacionales 
Oscar Pastor, Emilio Insfrán, Vicente Pelechano 
Departament de Sistemes Informàtics i Computació 
Universitat Politècnica de València 
Camí de Vera, S/N, 46071 València 
tlf: 34 + 6 3877350 fax. 34 + 6 3877357; 
e-mail: {opastor,einsfran,pele}@dsic.upv.es 
 
Resumen 
En este trabajo se presentan las ventajas del uso del Modelo Orientado a Objetos para el modelado 
conceptual y la implementación de sistemas de información. La mayoría de las metodologías actuales [Rum91], 
[Boo94], [BRJ96] carecen de guías precisas y rigurosas (desde el punto de vista del proceso de especificación) 
que nos permitan obtener productos finales a partir de los modelos conceptuales construidos. Nuestro trabajo 
intenta cubrir dichas carencias proporcionando un enfoque metodológico (OO-Method [Pas96], [Pas97]) que 
abarca la construcción de modelos de análisis y la definición de un patrón de traducción preciso de estos 
modelos a esquemas de bases de datos relacionales avanzados. Este artículo presenta un proceso de traducción 
fácil y preciso a la vez, que nos va a permitir implementar los modelos conceptuales de OO-Method sobre un 
entorno de desarrollo relacional (usando ORACLE v7 como servidor de datos y Developer/2000 como 
herramienta de desarrollo), explicando cómo trasladar los aspectos estáticos y dinámicos recogidos durante la 
fase de análisis, a estructuras relacionales y código para constituir el producto software final. 
 
1. Introducción 
Muchas de las aplicaciones que se desarrollan actualmente utilizan técnicas de Análisis OO para obtener el 
modelo conceptual del sistema y entornos de desarrollo visuales con bases de datos relacionales para su 
implementación. En este tipo de aplicaciones, el modelo conceptual OO obtenido en la fase de análisis se traduce 
básicamente en un esquema relacional específico de la base de datos subyacente sin incluir la dinámica de la 
aplicación. 
Nuestro trabajo se centra en el Modelado Conceptual OO y en la generación automática de código a partir de 
los modelos obtenidos, incluyendo estática y dinámica, siguiendo el paradigma de la programación automática 
[Bal83]. Uno de los objetivos más interesantes es producir aplicaciones de calidad a partir de los modelos de 
análisis, utilizando la tecnología ofrecida por los entornos de bases de datos relacionales. Para conseguirlo, 
hemos desarrollado OO-Method [Pas96] [Pas97] un enfoque metodológico que proporciona entre otras 
características una estrategia de traducción bien definida que permite implementar los modelos conceptuales en 
entornos relacionales avanzados. Dicha estrategia utiliza las características (procedimientos almacenados, 
paquetes y disparos) que aportan estos nuevos entornos, y proporciona un patrón a utilizar por los diseñadores 
para generar el producto software final. 
Para mostrar esta estrategia hemos usado Oracle v7 como servidor principal y Developer/2000 como 
herramienta de desarrollo, aunque el enfoque puede ponerse en práctica en cualquier otro entorno de similares 
características. 
La propuesta metodológica OO-Method tiene dos fases principales: 
1. Modelado conceptual: se recogen las propiedades esenciales que definen el sistema. Las principales 
características de esta fase son las siguientes: 
• Se obtienen tres modelos de análisis: modelo de objetos, dinámico y funcional. 
• Se obtiene una especificación formal y orientada a Objetos en OASIS [Pas92] [Pas95-1] que 
constituye un diccionario de datos de alto nivel y que se genera automáticamente a partir de los 
modelos de análisis. 
2. Modelo de Ejecución: establece los detalles a considerar para implementar adecuadamente el Modelo 
Conceptual obtenido. Especifica claramente cómo trasladar cada una de las nociones recogidas en los 
modelos de análisis a estructuras asociadas a un entorno relacional avanzado, en este caso Oracle. Este 
Modelo de Ejecución se utilizará para generar el producto software final. 
Este proceso de traducción sigue estos pasos: 
• generación de las sentencias CREATE TABLE correspondientes, que incluyen atributos y 
restricciones de integridad 
• generación de los procedimientos, paquetes y disparos de la BD (PROCEDURES, PACKAGES y 
TRIGGERS) correspondientes a la especificación OO. 
• generación de las ventanas necesarias (FORMS) para implementar la interfaz de usuario. 
• definición de roles, usuarios y privilegios otorgados para establecer el modelo final de protección. 
El trabajo que presentamos está estructurado como sigue a continuación. En el siguiente punto introducimos 
brevemente la metodología OO-Method mediante un ejemplo práctico que nos va a permitir exponer en el tercer 
punto cómo se implementa dicho ejemplo en Oracle, mostrando que la conexión entre los modelos de análisis y 
la implementación es lo suficientemente fácil como para ser usada por un grupo de desarrollo de aplicaciones 
Oracle. Este trabajo es la continuación de un proyecto de I+D entre la Universidad Politécnica de Valencia y la 
Conselleria de Sanidad y Consumo de la Generalitat Valenciana y cuyos primeros trabajos se han presentado en 
[Pas94] [Pas95-2]. 
2. La metodología: OO-Method 
OO-Method es una metodología OO de producción de software que ofrece un marco riguroso para la 
especificación de sistemas de información. OO-Method incluye: 
• una notación gráfica para abordar la fase de análisis. 
• Oasis como un lenguaje de especificación formal y OO que constituye el repositorio de alto nivel del 
sistema. 
• la definición de un modelo de ejecución preciso que guía la fase de implementación. 
En la fase de modelado conceptual determinaremos los componentes de la sociedad de objetos sin considerar 
ningún detalle de implementación. El problema a este nivel consiste en obtener una definición precisa del 
sistema a desarrollar. A continuación, el modelo de ejecución determinará las características del producto 
software final en términos del control de acceso a usuarios, activación de servicios, interfaz de usuarios, … es 
decir, todas aquellas propiedades dependientes de la implementación que no forman parte directa del espacio del 
problema. 
Para ilustrar los conceptos que aparecen en el trabajo vamos a hacer referencia a un Sistema de 
Administración de Personal. Observando el problema desde el punto de vista estático, los ejemplares de una 
clase Trabajo se identificarán con un único número, tendrán una descripción y una especialidad. Un trabajo 
particular podrá asignarse a un Centro y a un Programa Económico y estar en una situación (libre, contratado). 
Desde la perspectiva dinámica, tendremos eventos que crean ejemplares, eventos que los destruyen y otros 
eventos como contratar que relaciona un trabajo con una persona. Un trabajo se marca cuando se realiza una 
operación sobre él y no puede ser contratado hasta que un evento desmarcar ocurra. Más adelante iremos dando 
detalles del problema según sean necesarios. 
2.1. Modelo Conceptual 
En la fase de análisis se construyen tres modelos del sistema: Modelo de Objetos, Dinámico y Funcional. 
Estos tres modelos describen la sociedad de objetos desde tres puntos de vista ortogonales pero 
complementarios. 
2.1.1. Modelo de Objetos 
El Modelo de Objetos utiliza un Diagrama de Configuración de Clases (DCC) para definir y mostrar la 
estructura y comportamiento de todas las clases identificadas en el dominio del problema, así como sus 
relaciones. El DCC es un modelo semántico extendido. 
Una clase se representa gráficamente como una caja dividida en tres áreas: 
• Cabecera: contiene la declaración del nombre de la clase. 
• Parte Estática: contiene la definición de los atributos que representan el estado de los objetos de la 
clase. Los atributos podrán ser constantes, variables y derivados. Aquellos atributos utilizados para 
identificar objetos se subrayan. 
• Parte Dinámica: contiene la declaración de los servicios1 de la clase. Cada serviciose declara 
especificando su nombre y argumentos (con sus tipos respectivos). Se distinguirá (gráficamente) entre 
los eventos de creación, borrado y los eventos compartidos con otras clases2. 
Las acciones son servicios que un objeto 
puede activar (actuando como agente) para 
consultar o modificar el estado de otro objeto. En 
la Figura 1, un objeto de la clase ADMIN puede 
crear o destruir un objeto de la clase TRABAJO, 
también se puede observar que el evento 
contratar es un evento compartido entre 
PERSONA y TRABAJO. 
Las relaciones estructurales que podemos 
modelar son la agregación (parte-de) y la herencia 
(es-un). En la Figura 2 se presenta la relación de 
agregación entre clases, incluyendo información 
sobre cardinalidades (mínimas y máximas) que 
determinan cuántos objetos componentes forman 
parte de un objeto compuesto e inversamente, 
cuántos objetos compuestos pueden estar 
compuestos de un objeto en particular. 
La herencia se define gráficamente trazando una flecha 
desde la subclase hacia la superclase correspondiente. Esta 
flecha de especialización puede etiquetarse con una 
condición de especialización o con los eventos 
correspondientes de activación/cancelación de la 
especialización temporal (rol). Ver Figura 3. 
En el modelo de objetos, una clase estará completamente 
definida por un conjunto de fórmulas que cubren el resto de 
propiedades, como son las: 
• restricciones de integridad: establecen condiciones que el estado de los objetos debe satisfacer siempre 
(estáticas) o durante un determinado período de su existencia (dinámicas). 
• Derivaciones: sirven para calcular el valor de los atributos derivados. Dicho valor se determinará en 
función de otros que ya fueron definidos. 
2.1.2. Modelo Dinámico 
En el Modelo Dinámico se representan aspectos relacionados con las secuencias posibles de eventos (vidas 
posibles) y la interacción entre objetos. Para representar estos aspectos, tenemos dos tipos de diagramas: El 
Diagrama de Transición entre Estados (DTE), uno por clase, y el Diagrama de Interacción entre Objetos (DIO), 
uno por aplicación. 
Diagramas de Transición entre Estados 
Los DTE se utilizan para describir el comportamiento de los objetos estableciendo las sus vidas posibles. Una 
vida válida de un objeto, es una secuencia de eventos que caracteriza un comportamiento correcto para todos los 
objetos de la clase. 
En este contexto, los estados del DTE denotan situaciones3 en las que pueden encontrarse los objetos durante 
su existencia como consecuencia de la ocurrencia de eventos relevantes. Las transiciones representan cambios de 
 
1 Servicios: Cuando hablemos de servicios de una clase nos referiremos a los servicios de los objetos de una clase, exceptuando el evento de 
creación que es de la clase. Además utilizamos el término servicio porque un objeto visto desde una perspectiva servidor ofrece a la sociedad 
de objetos eventos (unidades de proceso atómicas que ocurren en un instante de tiempo), transacciones (unidades de proceso moleculares 
compuestas de servicios que poseen las propiedades de no observabilidad de estados intermedio y la política de todo-o-nada durante su 
ejecución). 
2 Eventos compartidos: eventos cuya ocurrencia afecta al estado de dos o más objetos de clases distintas en el mismo instante de tiempo. 
3 Situación: conjunto de estados (valores de los atributos del objeto en un momento dado) a los que llegamos o que abandonamos mediante 
la ocurrencia de eventos, acciones o transacciones locales. 
 
 
Figura 1. Un evento compartido y una relación de agente. 
 
Figura 2. Relación de agregación. 
Figura 3. Relación de herencia. Un caso general y un 
ejemplo. 
estado permitidos que pueden restringirse introduciendo condiciones. La especificación de una transición posee 
la sintaxis siguiente: 
evento | acción | transacción [if precondición] [when condición-de-control ] 
donde precondición es una condición definida sobre atributos del objeto que debe satisfacerse en el estado de 
partida para que el servicio pueda 
ocurrir. Una condición-de-control es 
una condición que sirve para evitar el 
posible no-determinismo entre dos o 
más transiciones que partiendo del 
mismo estado van a estados 
diferentes, estando etiquetadas con la 
misma acción. En la Figura 4 se 
puede ver un ejemplo de DTE. 
Diagrama de Interacción entre 
Objetos 
La interacción entre objetos se 
modela gráficamente mediante un 
Diagrama de Interacción entre Objetos (DIO). En el DIO podemos especificar dos interacciones básicas: 
• disparos: son servicios de una clase que se activan de forma automática cuando se satisface una 
condición en un objeto dicha clase. 
• interacciones globales: son transacciones compuestas por servicios de clases diferentes. 
En el DIO representamos las clases como cajas con una cabecera en la que se incluye el nombre de la clase. 
Los servicios de los objetos de la clase se 
representan mediante pequeñas cajas 
rectangulares dentro de la clase. Las cajas de 
los servicios se conectarán para definir los 
anteriores tipos de interacción. Los disparos se 
definirán dibujando una flecha que vaya de la 
cabecera de una clase a la acción disparada y 
etiquetada con la condición de disparo. Las 
interacciones globales se introducen 
conectando los servicios que componen la 
interacción y nominándola mediante un 
identificador de interacción global común 
(idIG). En la Figura 5, puede ver un modelo 
general de DIO. 
2.1.3 Modelo Funcional 
El propósito del Modelo Funcional es capturar la semántica asociada a los cambios de estado de forma fácil e 
intuitiva. En este modelo especificaremos mediante un diálogo interactivo el efecto de un evento sobre los 
atributos. El valor de cada atributo se modificará dependiendo de la acción ocurrida, de los argumentos del 
evento y del estado actual del objeto. 
OO-Method proporciona un modelo mediante el cual el analista sólo tiene que categorizar cada atributo de 
entre un conjunto predefinido de tres categorías no disjuntas. Estas categorías determinan qué información se 
necesita para determinar cómo cambia el valor del atributo ante la ocurrencia de determinados eventos. Las tres 
categorías de atributos son: cardinales, independientes del estado y enumerados. 
• Cardinales: sus eventos relevantes incrementan o decrementan su valor en una determinada cantidad. En 
la Figura 6 podemos ver el atributo cardinal numero_marcas de la clase Trabajo, con Adm:marcar como 
acción incrementadora. 
Clase: Trabajo Atributo : numero_marcas Categoría : cardinal 
Tipo de 
acción 
Acción Efecto Condición de 
Evaluación 
Incr. Adm:marcar +1 - 
 Figura 6. Atributo cardinal numero_marcas. 
Adm:crear_trabajo
TRA
Adm: marcar if control = 0
Adm:desmarcar if control <> 0
TRA
Adm:contratar if situacion = 0
Adm:borrar_trabajo
Adm:actualizar
 
 
Figura 4. Diagrama de Transición de Estados para la clase TRABAJO. 
Clase1
evento1
idIG
Clase2
evento2
Clase3
evento3
idIG
evento4
self::(condicion)
 
Figura 5. Diagrama de Interacción entre Objetos General. 
• Independientes del estado: tienen un valor que sólo depende de la última acción ocurrida. Una vez ha 
ocurrido una acción relevante el nuevo valor del atributo es independiente del valor que tenía antes. En la 
Figura 7 podemos ver el atributo independiente del estado control de la clase Trabajo, con Adm:marcar 
como acción portadora. 
Clase: Trabajo Atributo : control Categoría: indep.estado 
Acción Efecto Acción Condición de 
Evaluación 
Adm: marcar = uc 
 Figura 7. Atributo independiente del estado control 
• Enumerados: Mediante la activación de una acción portadora se le asigna al atributo un valor de un 
dominio discreto.Vamos a considerar como ejemplo el atributo situación de la clase Trabajo. El valor de 
situación indica cual es la situaciónactual de un objeto de la clase trabajo (libre, contratado...). El evento 
portador contratar deja al objeto en el estado en el cual el atributo situación tiene el valor contratado. Ver 
Figura 8. 
Clase: Trabajo Atributo : situación Categoría: enumerado 
Valor 
Actual 
Acción 
Portadora 
Nuevo valor Condición de 
Evaluación 
libre Adm:contratar contratado 
Figura 8. Atributo enumerado situación. 
La información que se obtiene al finalizar la construcción de los tres modelos constituye la especificación del 
sistema, y posee una representación textual en OASIS un lenguaje de especificación formal OO desarrollado en 
nuestro departamento. La especificación textual OASIS constituye un repositorio completo y formal del sistema, 
y además se puede obtener en cualquier momento ya que existen traductores que permiten obtenerla a partir de la 
información gráfica. 
2.2. El Modelo de Ejecución 
El modelo de ejecución es un patrón genérico de comportamiento, aplicable a cualquier modelo conceptual 
construido siguiendo la estrategia propuesta por OO-Method. Una vez recogida en la especificación toda la 
información relevante del sistema, el modelo de ejecución explicará cómo se ejecuta/prototipa la sociedad de 
objetos en cualquier entorno de desarrollo. La idea consiste en dar una visión abstracta de un modelo de 
ejecución que determinará directamente el patrón de programación a seguir cuando un desarrollador (o una 
herramienta CASE) tenga que implementar un modelo conceptual. El modelo de ejecución tiene tres fases 
esenciales: 
1. Control de acceso: en primer lugar, el objeto4 que desee conectarse al sistema deberá identificarse 
como miembro de la sociedad de objetos. 
2. Vista del sistema: una vez se ha conectado un usuario (u otro objeto del sistema), éste tendrá una 
visión clara de la sociedad de objetos (qué clases de objetos puede ver, servicios que puede activar y 
atributos que puede consultar). 
3. Activación de servicios: por último después de las fases anteriores, el objeto deberá ser capaz de 
activar cualquier servicio disponible en su visión del mundo, y de realizar las observaciones 
pertinentes. 
Cualquier petición de servicio se caracterizará por la siguiente secuencia de acciones: 
1. Identificación del objeto: en primer lugar, se identificará el objeto que ha de servir la petición. La 
existencia de este objeto es una condición implícita para poder ejecutar el servicio, excepto si se 
trata del evento de creación5. Si el objeto existe se recuperarán los valores de los atributos que 
caracterizan su estado. 
 
4 En nuestra visión de las aplicaciones los usuarios son también objetos. Lo que nos da una gran potencia a la hora de prototipar porque 
podemos introducirnos en el sistema como cualquier objeto y observar que visión de la sociedad tendría 
5 Formalmente, el evento de creación es un servicio de un metaobjeto que representa a la clase, y que actúa como fábrica de objetos capaz de 
crear ejemplares individuales pertenecientes a la clase. Este metaobjeto (uno por cada clase) tiene como propiedades destacables el atributo 
población de la clase, el atributo siguiente oid y el evento de creación. 
2. Introducción de los argumentos del evento: se introducen el resto de argumentos del evento a 
activar. 
3. Corrección de la transición entre estados: verificaremos en el estado actual y para el servicio en 
cuestión que existe en el proceso una transición entre estados válida. 
4. Satisfacción de precondiciones: Comprobaremos que se cumple la precondición asociada al 
servicio que va a ejecutarse. Si no se cumple se elevará una excepción informando que el servicio no 
puede activarse porque se ha violado su precondición. 
5. Realización de las evaluaciones: una vez verificada la precondición, se hacen efectivas en el 
sistema de almacenamiento las modificaciones en el estado del objeto inducidas por el evento. 
6. Comprobación de las restricciones de integridad en el nuevo estado: para asegurar que la 
activación del servicio deja al objeto en un estado válido, se debe comprobar que las restricciones de 
integridad (estáticas y dinámicas) se cumplen en el estado final resultante. 
7. Comprobación de las relaciones de disparo: después de un cambio de estado válido, y como acción 
final, se deben verificar el conjunto de reglas condición-acción que representan la actividad interna 
del sistema. Si alguna de ellas se cumple, se disparará la correspondiente activación de servicio. Será 
responsabilidad del analista garantizar la terminación y confluencia de los disparos. 
Los pasos anteriores guiarán la implementación de cualquier aplicación para asegurar la equivalencia 
funcional entre la descripción del sistema recogida en el modelo conceptual y su reificación en un entorno de 
programación de acuerdo con el modelo de ejecución. 
3. Implementación en ORACLE 
Vamos a presentar una implementación concreta del modelo de ejecución anterior. En este caso 
describiremos de forma simple, el conjunto de reglas necesarias para implementar un modelo conceptual OO de 
OO-Method en un entorno Oracle-v7. 
Resumidamente, por cada clase se genera una tabla ORACLE, cuya clave primaria estará formada por los 
atributos subrayados en la especificación gráfica de la clase. Cada atributo constante o variable se implementará 
como una columna en la tabla. Además, cada clase generará un usuario y un esquema. Las clases cuyos objetos 
sean activos (agentes de otros) generarán un rol. Este rol incluirá todos los privilegios concedidos a los usuarios. 
Cada clase tendrá un conjunto de formularios que se utilizarán para implementar las transacciones de los objetos 
de la clase, como veremos más adelante. 
El proceso de traducción lo podemos dividir en dos fases, en las cuales generamos: 
• El modelo lógico relacional. 
• Los paquetes, procedimientos, funciones, disparos y formularios necesarios para introducir la 
dinámica en nuestro sistema. 
3.1. El Modelo de Datos 
Para obtener el modelo lógico relacional nos centraremos en dos secciones de la especificación de la clase: 
• Definición de atributos. 
• Restricciones de integridad estáticas. 
Cada clase se representa como una tabla dentro de su propio esquema. Las columnas de esta tabla serán cada 
uno de sus atributos constantes y variables. Cada ejemplar de la clase será una fila en la tabla. Los atributos 
derivados se representarán como una columna de la tabla o como una función dependiendo del diseñador. Si se 
ven como atributos virtuales, la función que calcule su valor tendrá que definirse en el paquete que, como 
veremos más tarde, incluirá los servicios del objeto. Si elegimos almacenarlos, se definirán de la misma manera 
que los otros, pero además será necesario declarar disparos que mantengan actualizado este campo (por ejemplo, 
disparos pre-insert y pre-update asociados a la tabla). 
Los atributos que componen el identificador de los objetos de la clase se representarán como la(s) columna(s) 
que constituye(n) la clave primaria de la tabla. Los atributos constantes por definición son not null. Los 
atributos variables se definirán como not null si deben introducirse obligatoriamente como un argumento del 
evento de creación o si se han declarado con un valor por defecto. Toda esta información se habrá introducido a 
nivel conceptual durante la definición de la clase. Las restricciones de integridad estáticas se representarán como 
restricciones de la tabla, que se validarán sobre los atributos del objeto. Como ejemplo, podemos ver la siguiente 
sentencia CREATE TABLE para la clase Trabajos: 
 CREATE TABLE Trabajos 
(nro_trabajo(6) CONSTRAINT pk_trabajo PRIMARY KEY 
 CONSTRAINT ck_trabajo CHECK(nro_trabajo<200000), 
descripcion varchar(50) NOT NULL, 
centro_trabajo number(5) CONSTRAINT fk_cen REFERENCES 
centros(cen_num), 
especialidad_trabajo number(3) CONSTRAINT fk_esp REFERENCES 
especialidades (esp_num),programa_economico number(2) CONSTRAINT fk_peco REFERENCES 
programas(num_pro), 
situacion number(2) DEFAULT 0, 
nro_marcas number(2) DEFAULT 0, 
control number(2) DEFAULT 0) 
Agregación 
Cuando se define una clase como agregada la cardinalidad asociada al enlace establecido entre la clase 
compuesta y su clase componente determinará dónde se incluye la restricción de clave ajena correspondiente. La 
clave ajena representará la agregación. 
Como se hace normalmente, una cardinalidad (máxima) de 1:M generará una clave ajena en la clase que 
participa con cardinalidad M en la agregación. Esto ocurre por ejemplo con trabajos y centros, siendo 
centro_trabajo la clave ajena de trabajos. En este caso, centros es una agregación de trabajos con cardinalidad 
1:M. Una cardinalidad 1:1 generará (al menos) una clave ajena, y una cardinalidad M:N generará una tabla 
nueva cuya clave primaria será la compuesta por las claves de las clases componentes, en este caso la clave 
primaria de la nueva tabla también será la clave ajena que referenciará las tablas componentes. Las claves ajenas 
que representan a las clases componentes se definirán como atributos NOT NULL en la tabla agregada si la 
cardinalidad mínima es 1. 
De forma muy resumida, la agregación en Oasis tiene una taxonomía muy rica que determina una gran 
cantidad de situaciones que se pueden dar en una agregación. Dependiendo de los tipos de agregación 
(especificados en el modelo conceptual) sabremos la cardinalidad de la relación entre contenedor y componentes. 
Una vez conocido el tipo de agregación manipularemos la cardinalidad como se hace normalmente [Teo86], y 
etiquetaremos la restricción de clave ajena con null, restrict o cascade para las operaciones de 
actualización y borrado según corresponda. Esta conversión se explica con ejemplos en [Pas94]. 
Herencia 
En Oracle una clase especializada se representará como una tabla que tendrá como clave primaria la de su 
clase padre. Las columnas de esta tabla serán los atributos que no pertenecen a la clase padre. Si no existen 
atributos especializados podremos implementar la herencia como una vista de la clase padre. 
3.2. La Dinámica 
La dinámica de los objetos se define mediante los eventos y transacciones que pueden activarse, los estados 
válidos por los que puede pasar un objeto durante su vida (process), las restricciones de integridad dinámicas que 
deben satisfacerse y la interfaz de usuario que caracteriza la interacción del usuario. Por ello en Oracle debemos 
ser capaces de representar: 
• Eventos: Evaluaciones, Precondiciones y Disparos. 
• Transacciones y Procesos 
• Interfaces 
Eventos, Transacciones y Disparos se implementan mediante procedimientos y disparos almacenados en el 
esquema asociado a la clase. Para representar los procesos adecuadamente será necesario introducir el concepto 
de orden en el espacio de eventos y transacciones, un concepto que no existe en el Modelo Relacional. 
Los eventos de un objeto se representan como procedimientos y funciones en un paquete. El paquete 
correspondiente a la clase trabajos de nuestro ejemplo será: 
 
 
 
create package trabajos_pack as 
procedure crear_trabajo (nro_trabajo number, descrip char, cent_trab 
number, esp_trab number,pro_economico number); 
procedure borrar_trabajo (num_trab number); 
procedure marcar (nro_trabajo number, uc number); 
procedure desmarcar (nro_trabajo number); 
procedure contratar (nro_trabajo number, dni number); 
procedure cerrar_trabajo (nro_trabajo number) 
end trabajos_pack; 
Los eventos y las transacciones se representarán como procedimientos que podrán tener argumentos. 
Los argumentos de los procedimientos se podrán utilizar en las acciones definidas en la fórmula de evaluación. 
Cada procedimiento posee una excepción que representará la precondición del evento. Si no se cumple la 
precondición, se eleva la excepción asociada y se efectúa un rollback de los cambios. Vamos a ver por ejemplo 
el procedimiento asociado al evento marcar de la clase trabajos: 
procedure marcar (nro_trab number,uc number) is 
 exc_marcar exception; 
 uc_ac number(2); 
begin 
select control into uc_ac from trabajos where nro_trabajo=nro_trab 
if uc_ac !=0 then 
 raise exc_marcar; 
end if; 
update trabajos set control = uc, nro_marcas = nro_marcas + 1 where 
nro_trabajo=nro_trab; 
end marcar; 
y para la transacción cerrar_trabajo tenemos el siguiente procedimiento: 
procedure cerrar_trabajo (nro_trab number) is 
begin 
 borrar_trabajo (nro_trab); 
 personas_pack.despedir(nro_trab); 
end cerrar_trabajo; 
Los eventos compartidos los representamos mediante un procedimiento que está presente en los paquetes de 
las clases en las que está definido. Para reutilizar código lo implementaremos en el paquete de una clase y los 
demás paquetes lo tendrán definido como una referencia a éste. 
En el paquete de una clase especializada, tendremos que definir los eventos de la clase padre 
referenciándolos como hemos visto anteriormente. 
El evento de creación inserta una fila (se corresponderá con un nuevo objeto) en la tabla. Cuando se cree un 
objeto activo también se creará un usuario para dicho objeto. Con este fin se definirá una transacción en la que se 
incluirá la secuencia de eventos que han de ocurrir y se traducirá a Oracle como un procedimiento que ejecute la 
secuencia de eventos y realice un commit cuando termina cada una de las operaciones. Si ocurre una excepción 
asociada a un evento componente de la transacción, entonces se hará un rollback de los cambios que hayan 
tenido lugar para asegurar la política de "todo-o-nada" y la "no-observabilidad de estados intermedios". Las 
transacciones también pueden tener argumentos. 
Los disparos podrán implementarse como disparos de la base de datos que se ejecutan como resultado de una 
acción de inserción o borrado. 
En la especificación de una clase, el proceso (la sección process en Oasis o el DTE en el modelo dinámico) 
define la secuencia válida de eventos en la vida de un objeto. Un objeto cambia de estado ante la ocurrencia de 
un evento o transacción, por lo que, para saber si el evento ocurrido es válido tendremos que comprobar si forma 
parte de una secuencia válida de eventos (comprobando que en el estado6 en el que se encuentra y ante la 
ocurrencia del evento, puede alcanzar un nuevo estado en el proceso definido). Para poder realizar estas 
comprobaciones podemos incluir en la tabla asociada a la clase un nuevo atributo donde guardaremos el estado 
actual (en el proceso) del objeto. Con esta información podremos invalidar la ocurrencia de un evento que no 
forme una vida válida (secuencia de eventos), añadiendo una nueva excepción en el código del procedimiento 
asociado con el evento o transacción. 
 
6 En este punto con estado nos referimos a los estados (situaciones) del DTE o del process de la clase en OASIS 
Las acciones que pueden activar los objetos se especifican como interfaces entre objetos y se implementan 
como privilegios concedidos a los usuarios. Por ejemplo, si en la especificación hemos dicho que un objeto O1 
de la clase C1 puede ser actor de un evento E2 definido en la clase C2, lo traduciremos a Oracle-v7 dándole al 
rol asociado con C1 permisos de ejecución sobre el procedimiento E2 definido en el paquete correspondiente a 
C2, y añadiremos el objeto O1 al rol de C1. En el ejemplo propuesto, hemos asumido que los administradores 
serán los usuarios finales activos. Así pues, como podemos ver a continuación para un usuario crearemos un 
usuario administrador adm1, y lo incluiremos en el rol admin (se asume ya creado) que tendrá concedidos los 
privilegios de ejecución sobre los procedimientos del paquete 'trabajos_pack': 
grant execute on trabajos_pack to admin; 
create user adm1 identified by xxx; 
alter role admin add adm1 
La interacción del usuario con el sistema se realizará mediante formularios. Creándose tantos formularioscomo eventos o transacciones se hayan especificado. 
Un breve escenario del uso de la aplicación será el 
siguiente: El usuario se conectará al sistema (Ver 
Figura 9). Una vez conectado le aparecerá un menú 
con una opción con el nombre de cada clase. Si el 
usuario elige una opción, aparecerá un menú asociado 
a la clase seleccionada, incluyendo una opción por 
cada evento o transacción que el usuario puede activar 
(de la cual es actor). 
Cada opción del menú tendrá asociado su 
correspondiente formulario (ver Figura 10), que se 
utilizará para pedir los parámetros necesarios para 
ejecutar el evento/transacción. El botón OK tendrá 
asociada una llamada al procedimiento que implementa 
el evento/transacción. 
4. Conclusiones 
En este trabajo se ha presentado una estrategia para implementar objetos en un entorno ORACLE, en la cual 
el patrón de una clase de objetos pasivos se representa mediante un usuario, un esquema (incluyendo una tabla 
(estado), un paquete (métodos) y un conjunto de disparos de la base de datos (disparos). Una clase de objetos 
activos necesita además un rol. En este caso un objeto es un usuario que tiene asociado el correspondiente rol de 
su clase. Cuando un objeto le pide un servicio a otro equivale a que el usuario ejecuta un procedimiento de otro o 
el mismo (si es de la misma clase) esquema. Esto se gestiona declarando los permisos correspondientes. La 
interfaz de usuario se determina asociando un formulario a cada una de las acciones que el usuario puede 
ejecutar. 
Para concluir podemos decir que esta aproximación nos permite afirmar que para desarrollar cualquier 
aplicación se puede realizar un análisis y diseño orientado a objetos, incluso si se implementa sobre una base de 
datos relacional. 
 
 
Figura 9. Conexión del usuario al sistema. 
 
Figura 10. Entrada de datos para el evento marcar y código asociado al botón OK. 
procedure ok_marcar (nro_trab number,uc 
number) is 
begin 
trabajos_pack.marcar (nro_trab, uc); 
commit; 
 exception 
 when others then rollback; 
end ok_marcar; 
Bibliografía 
[Bal83] Balzer R. et al. Software Technology in the 1990s: Using a New Paradigm IEEE Computer, Nov.1983 
[Boo94] Booch,G. OO Analysis and Design with Applications. Addison-Wesley, 1994. 
[BRJ96] Booch,G.,Rumbaugh,J.,Jacobson,I. Unified Modeling Language. Version 0.91. Rational Software Corporation. 
[Pas92] Pastor,O; Hayes,F.; Bear,S. Oasis:An Object Oriented Specification Language; Proc. of CAiSE-92 Conference 
Lecture Notes in Computer Science (593), Springer-Verlag, pag. 348-363. (1992) 
[Pas94] Pastor,O; García,R. El Modelo Orientado a Objetos aplicado al Diseño e Implementación de entornos ORACLE; in 
the Proceedings of CUORE-94, Benalmádena Málaga (Spain). (1994) 
[Pas95-1] Pastor,O., Ramos, I. Oasis 2.1.1: A Class-Definition Language to Model Information Systems Using an Object-
Oriented Approach, February 94 (1ª ed.) ,Mars 95 (2ª ed.), October 95 (3ª de.). 
[Pas95-2] Pastor,O.;Garcia,R.;Cuevas,J. Implementation of an OO Design in an Oracle7 Development Environment. Proc. 
of the European Oracle Users Group Conference, EOUG-95. Vol.4 pags: 35-47, Firenze (Italy). (1995) 
[Pas96] Pastor, O.; Pelechano, V.; Bonet, B.; Ramos, I. : An OO Methodological Approach for Making Automated 
Prototyping Feasible. Proceedings of DEXA96, Springer-Verlag, September (1996). 
[Pas97] Pastor, O.; Insfrán, E.; Merseguer, J.; Romero, J.; Pelechano, V.: OO-METHOD: An OO Software Production 
Environment Combining Conventional and Formal Methods.CAiSE97, June (1997). Accepted for presentation. 
[Rum91] Rumbaugh J.,Blaha M., Permerlani W., Eddy F.,Lorensen W. Object Oriented Modeling and Design. Englewood 
Cliffs, Nj. Prentice-Hall. 
[Teo86] Teorey,T.;Yang,D.;Fry,J.; A logical Design Methodology for Relational Databases Using the Extended Entity-
Relationship Model; Computing Surveys, Vol.18,No2,June (1986).

Continuar navegando

Otros materiales