Assignatura 2008-2009 Modelos conceptuales UML semánticamente equivalentes (Catálogo de refactorings de especificación) Un modelo conceptual de análisis sobre un sistema real representa conceptos, relaciones y reglas de restricción del mundo real. Por lo tanto el diagrama de clases UML del modelo de datos junto con las restricciones de integridad debe tener una interpretación unívoca desde el momento inicial y su significado preciso no puede ser objeto de la opinión de cada uno puesto que representa una realidad (de un sistema presente o futuro) que asumimos como única. ¿Qué pasa pues cuando dos modelos conceptuales sobre un mismo sistema presentan diagramas distintos? Ciertamente es posible representar en UML un mismo sistema de varias maneras distintas. Si partimos de la premisa de que la realidad es única, la diversidad de diagramas sólo puede ser posible si son equivalentes entre sí. Ello implica pues que deberán existir reglas de transformación que permitan pasar de uno al otro sin variar su significado (semántica). Usualmente a algunas de estas transformaciones se les denomina normalizaciones. En este artículo se presenta un catálogo básico de transformaciones (o refactorizaciones). Diremos que dos diagramas de clases UML son semánticamente equivalentes si existe al menos una secuencia de transformaciones que llevan de uno al otro. El objeto de un catálogo de refactorizaciones es sentar las bases para entrenar y ejercitar la detección de secuencias de transformación entre diversas representaciones de modelo con el fin de determinar si son semánticamente equivalentes o no. En el ámbito denominado de los “UML practitioners” se producen a menudo debates sobre el rigor de los modelos UML y la adecuación de su nivel de formalismo. Sin entrar la cuestión de cómo debe ser el formalismo del UML aceptaremos por principio la regla de que una actividad de ingeniería exige que el significado de una especificación no dependa de la interpretación que se le dé sino que debe tener una única interpretación, tal como pretenden los planos y memorias técnicas de las ingenierías clásicas. Las dos opciones que se presentan en cada transformación de este catálogo (la A y la B) son equivalentes entre sí desde el punto de vista semántico. En todas ellas las opciones A son más adecuadas que las opciones B para la fase de análisis, en la que tratamos de representar conceptos del mundo real. Las opciones A aprovechan mejor las capacidades el lenguaje UML que las B. Otra cuestión es que debido a limitaciones tecnológicas nos inclinemos por una u otra. Por ejemplo si se utiliza una herramienta UML que no soporta asociaciones n-arias podemos representar el modelo con la opción B. El término de equivalencia semántica utilizado en este artículo se refiere a la equivalencia entre modelos conceptuales de datos para representar una misma realidad de forma aceptable. Los fundamentos teóricos y metodológicos de esta forma de representar la realidad fueron establecidos por Peter Chen en su artículo “The entity-relationship model. A basis for the enterprise view of data” en 1976. - 1/8 - Assignatura 2008-2009 1.- Binaria * a * dos binarias 1 a * Opción A: Opción B: + Una restricción: Una misma pareja de instancias A, B no puede asociarse con más de una instancia de AB. Comentarios: • • • • Si en la opción A no hay clase asociativa AB entonces la clase AB de la opción B no tiene atributos La restricción se ha representado textualmente ya que UML no dispone de notación gráfica para expresarla. AB no tiene clave externa (es asociativa) Esta transformación es la clásica normalización de relaciones * a * en dos 1 a * - 2/8 - Assignatura 2008-2009 2.- Ternaria tres binarias 1 a * Opción A: B * A C * * ABC Opción B: + Una restricción: Una misma terna de instancias de A, B y C no puede asociarse con más de una instancia de ABC. Comentarios: • • • • Si en la opción A no hay clase asociativa ABC entonces la clase ABC de la opción B no tiene atributos. La restricción se ha representado textualmente ya que UML no dispone de notación gráfica para expresarla. ABC no tiene clave externa (es asociativa) Esta transformación también de denomina normalización al igual que en el caso anterior. - 3/8 - Assignatura 2008-2009 3.- Ternaria 2 Binarias asociativas en cascada Opción A: B * A C * * ABC Opción B: Comentarios: • • Una asociación ternaria necesita una instancia de A, una de B y una de C La multiplicidad 1..* de C garantiza que no pueda existir una instancia de AB sin estar asociada por lo menos a una de C. - 4/8 - Assignatura 2008-2009 4.- Atributos Asociaciones 1 a 1 4bis.- Atributos asociaciones * a 1 Opción A (sin opcionalidad): Opción A (con opcionalidad) Opción B (sin opcionalidad): Opción B (con opcionalidad): Opción Bbis (sin opcionalidad): Opción Bbis (con opcionalidad): Comentarios: • Los atributos de una clase son tipos de datos simples (tipos primitivos) o bien tipos de datos. o o • Definimos un tipo de datos como un conjunto de valores para los cuales su identidad única no es significativa en nuestro modelo conceptual, como es el caso de Magnitud en la figura. Otro ejemplo similar y frecuente es la clase Dirección, que puede tener una estructura compleja. Sin embargo normalmente la identidad de las instancias de Dirección serán irrelevantes en nuestro modelo a no ser que utilicemos un sistema de “callejero”. Dicho de otro modo, si una misma dirección aparece varias veces tendremos varias instancias idénticas representando a la misma dirección (tal como pasa con los atributos de una clase). Un atributo puede definirse como una simplificación notacional de la opción B1. La opción B2 no representa exactamente lo mismo pero en la práctica sí puede significar lo mismo. En este caso la información no se repite. Si se transforma en atributo entonces sí que se repetiría pero la semántica del modelo no variaría. Por lo tanto se puede aceptar la equivalencia semántica. o o Un ejemplo de lo mencionado anteriormente se da en los String de Java. Si dos cadenas iguales en Java entonces tienen un mismo hashCode en cuyo caso son el mismo objeto por lo que no se duplica la información en memoria. Este mecanismo de detección de cadenas iguales en memoria lo realiza la máquina virtual automáticamente. Es por ello que las cadenas en Java son inmutables (no se pueden modificar). - 5/8 - Assignatura 2008-2009 5.- Clase asociativa explícita Clase asociativa implícita Opción A: + Varias restricciones de integridad: • Clave externa de Factura: num-factura • Clave externa de LineaFactura: num-linea • num-linea empieza por 1 y con el resto son correlativos Opción B: + Varias restricciones de integridad: • Clave externa de Factura: num-factura • Clave externa de LineaFactura: no tiene (está asociada a Factura) • num-linea empieza por 1 y con el resto son correlativos • num-linea no se puede repetir para una factura determinada Comentarios: • • • • • Diremos que en la opción A LineaDetalleFactura es una clase asociativa explícita y en la opción B LineaDetalleFactura es una clase asociativa implícita. Las clases asociativas no tienen clave externa. La opción B se puede obtener a partir de la opción A aplicando la transformación 3 (Binaria *..* a dos binarias 1..*) y luego poniendo num-linea como un atributo de LineaDetalleFactura En la opción A el concepto línea de factura tiene identidad. El concepto línea 1 se instancia una sola vez y mediante la clase asociativa se establecen los atributos de cada línea de Factura. En la opción B el numlinea es un atributo más sin ningún tipo de identidad propia. La Opción A utiliza mejor el lenguaje UML ya que necesita una restricción menos (no de clave), sin embargo el gráfico de B es más simple y es muy frecuentemente utilizado. Entre las dos opciones podríamos dar un empate técnico aunque la opción A es más purista. La clase asociativa implícita corresponde a la entidad débil del modelo entidad-relación. - 6/8 - Assignatura 2008-2009 6.- Herencia Asociaciones 1 a 0..1 Opción A: A attr1 A2 A1 attr2 Opción B: Comentarios: • • • • En la opción A, A1 y A2 comparten el mismo OID. En la opción B los OID de A, A1 y A2 son distintos. Sin embargo las multiplicidades 1 a 0..1 posibilitan la biyectividad y garantizan la inyectividad de las asociaciones por lo que se pueden definir reglas que ofrezcan equivalencia semántica Una restricción del tipo Disjoint se traducirá en una regla como “Una instancia de A no puede asociarse con una de A1 y A2 simultáneamente”. Un atributo como attr1 podría ser el nombre de la partición. - 7/8 - Assignatura 2008-2009 Anexo: Comentario acerca del tratamiento de las fechas. Ejemplo de secuencia de transformaciones. • • • El concepto de fecha puede tener identidad en nuestro modelo conceptual de análisis pero éste puede acabar siendo almacenado en formato YYYY-MM-DD en un campo de tipo Date (o texto) de una tabla. De ser así el objeto fecha YYYY-MM-DD no tiene identidad y por tanto la misma información se repetirá tantas veces como veces aparezca la misma fecha. En una base de datos Date es un tipo de datos reconocido de forma nativa. Si quisiéramos que las fechas tuvieran identidad habría que crear una tabla de días. Uno de sus campos podría ser el nombre del día de la semana. Si no se hace es porque hay la alternativa de calcularlo cada vez a partir de YYYY-MM-DD. A continuación se muestra una transformación habitual en la que una fecha forma inicialmente parte de una ternaria i finalmente pasa a ser un atributo. La secuencia de transformaciones aplicada es 2 y 4bis. * + Restricción: • Una misma pareja de instancias A, B no puede asociarse con varias instancias de AB con la misma fecha Nota: AB no tiene clave externa Xavier Pi (2008) – [email protected] - 8/8 -