El Metamodelo
Introducción
En este capítulo estudiaremos el metamodelado en UML. Empezaremos estudiando los perfiles, que son un soporte para enriquecer las capacidades de modelado de UML, especialmente en lo que respecta a la semántica, con el objetivo de adaptar UML:
-
A plataformas específicas como Java, .NET, o EJB.
-
A dominios específicos del usuario como el dominio de los équidos.
Los perfiles son soportes ligeros de extensión: introducen más construcciones en metamodelo de UML, pero no permiten modificar las ya existentes. Estas nuevas construcciones son principalmente los estereotipos, las tagged values (valores etiquetados) y las especificaciones. Las especificaciones se describen con lenguaje natural o con la ayuda del lenguaje OCL, abordado en el capítulo Modelado de objetos.
Un perfil se describe con un diagrama de perfil, el cual forma parte de la estructura de UML. Este introduce un tipo específico de empaquetado. Los empaquetados han sido estudiados en el capítulo Estructuración de los elementos de modelado.
Después se presentará el metamodelo de UML. Los metamodelos contienen todas las construcciones que describen los elementos UML y, en particular, aquellos que hemos estudiado en los capítulos precedentes. Un ejemplo de estas construcciones es la clase Class que describe las clases o incluso la clase Interface que describe las interfaces. Las clases son instancias de la clase...
Los estereotipos
1. Las metaclases
Los estereotipos se definen como extensiones de una metaclase. Es conveniente, por tanto, que en un primer momento estudiemos la noción de metaclase. Una metaclase es una clase cuyas instancias son elementos de UML que a su vez poseen instancias. Citemos, a título de ejemplo, la metaclase Class cuyas instancias son clases, la metaclase Interface, cuyas instancias son interfaces y la metaclase Association, cuyas instancias son asociaciones entre dos clases.
En la documentación del metamodelo de UML, las metaclases se presentan como clases sin indicación explícita de su naturaleza de metaclase. Tomamos la decisión de dotarlas de un estereotipo «Metaclase»para facilitar la lectura de los diagramas. La figura 11.1 muestra la representación simplificada de la metaclase Class en UML, es decir, sin sus atributos, operaciones y asociaciones.
Figura 11.1 - Representación simplificada en UML de la metaclase Class
Las principales metaclases del metamodelo de UML son las siguientes:
Metaclase |
Descripción |
Association |
Metaclase concreta que describe las asociaciones, por ejemplo, entre dos instancias de la metaclase Class. |
Class |
Metaclase concreta que describe las clases. Class es una subclase de la metaclase Classifier. Introduce la descripción de las operaciones, atributos y roles. |
Classifier |
Metaclase abstracta que describe elementos que pueden ser especializados (introducción de la relación de especialización/generalización). |
Element |
Metaclase abstracta situada en la parte superior de la jerarquía de las metaclases del metamodelo UML. |
Interface |
Metaclase concreta que describe las interfaces que sólo poseen operaciones. Interface es una subclase de la metaclase Classifier. |
Operation |
Metaclase concreta que describe la firma de una operación. |
Package |
Metaclase concreta que describe un conjunto de instancias de subclases concretas de la metaclase Element (empaquetado). |
Property |
Metaclase concreta que describe un atributo o un extremo de asociación (rol) con uno o varios valores caracterizados. |
2. Las nociones de estereotipo...
Las tagged values (valores etiquetados)
1. Introducción
Un estereotipo puede introducir atributos como cualquier clase. En la terminología UML, ese tipo de atributos se llama tag (etiquetas) y las parejas (atributo, valor) se conocen como tagged value (valor etiquetado por el nombre del atributo). Cada tag de un estereotipo da lugar a una tagged value dentro del elemento UML provisto de ese estereotipo.
Como los atributos, los tag poseen un tipo. Sólo los tipos introducidos en el metamodelo (y, como más adelante veremos, en el perfil) pueden utilizarse para caracterizar un tag.
La figura 11.9 muestra un ejemplo de introducción del tag precioMedio en el estereotipo «CaballoDeDeporte» y de la tagged value correspondiente a ese tag en la clase TrotadorFrancés provista de ese estereotipo. Las tagged values de un elemento se indican como listas entre llaves.
Figura 11.9 - El tag precioMedio del estereotipo «CaballoDeDeporte»
2. Las asociaciones entre estereotipos
Entre los estereotipos de un perfil es posible introducir asociaciones. Dichas asociaciones son en todo idénticas a las existentes entre las clases. Una asociación binaria entre dos estereotipos relaciona los elementos provistos del estereotipo situado en un extremo de la asociación con los elementos provistos del estereotipo situado en el otro extremo. La figura 11.10 ilustra una asociación de ese tipo entre...
Los demás elementos de un perfil
1. Las especificaciones
Un estereotipo puede también introducir especificaciones que se aplican a los elementos provistos de ese estereotipo. La figura 11.12 ilustra ese caso en el marco de un perfil específico del lenguaje Java. En efecto, en UML, es posible emplear la herencia múltiple de las clases mientras que en Java está prohibido. El estereotipo «JavaClass» introduce una especificación escrita en OCL que prohíbe la herencia múltiple.
Figura 11.12 - El estereotipo «JavaClass»
Esta especificación escrita en OCL se apoya en la descripción de la relación de generalización/especialización en el metamodelo de UML introducida a nivel de la metaclase Classifier, sobreclase de la clase Class. Esta descripción en forma simplificada se ilustra en la figura 11.13, donde puede verse que los elementos generales de una instancia de Classifier son proporcionados por la expresión de ruta self.generalization.general. Dado que el rol generalization tiene como cardinalidad la cardinalidad múltiple *, es conveniente utilizar el operador collect para obtener todos los elementos generales bajo la forma de una colección, transformada después en un conjunto para eliminar los posibles duplicados. La especificación comprueba a continuación si el conjunto tiene un número de elementos inferior o igual...
Los perfiles
1. La representación de un perfil
Los perfiles se representan con empaquetados de perfil, es decir, empaquetados provistos del estereotipo «profile» en los que se detallan todos los elementos que contienen así como las metaclases que extienden. La figura 11.14 ilustra un ejemplo de perfil llamado CaballosDeporte.
Figura 11.14 - El perfil CaballosDeporte
2. La relación de referencia
La relación de referencia permite importar una o varias metaclases desde un metamodelo hasta un perfil, donde se hacen visibles para cualquier modelo que aplique ese perfil. Es posible implícitamente importar en el perfil todas las clases del metamodelo. Otra posibilidad es seleccionar explícitamente las metaclases que deben importarse al perfil. Por último, es posible extender una metaclase sin importarla. En ese caso sólo son visibles las instancias extendidas por el estereotipo.
El primer caso, donde todas las metaclases del metamodelo UML aparecen implícitamente importadas por el perfil Caballos, puede verse en la figura 11.15.
Figura 11.15 - Relación de referencia con importación implícita
El segundo caso, donde sólo se importan explícitamente en el perfil Caballos las dos metaclases Class e Interface del metamodelo UML, se ilustra en la figura 11.16. Las demás metaclases del metamodelo UML no son visibles. Las dos importaciones explícitas...
Un ejemplo de dominio: los équidos
Presentamos, a título de ejemplo, un modelo basado en el dominio de los équidos.
1. El perfil
El perfil se presenta en la figura 11.19 bajo la forma de un diagrama de perfil. Se introducen tres estereotipos concretos para extender la metaclase Class en el marco del modelado de los équidos: «ÉquidoDeTiro», «ÉquidoDeSilla» y «ÉquidoDeDeporte». La jerarquía de los estereotipos relativa al deporte equino está constituida por el estereotipo abstracto «DeporteEquino» especializado por los dos estereotipos concretos: «DeporteHípico» y «DeporteEcuestre». El estereotipo abstracto permite introducir la asociación deporte/équidoApto, cuyos vínculos conectan las instancias de sus dos subestereotipos concretos, con las instancias del estereotipo «ÉquidoDeDeporte». Por último, el estereotipo «Alimentación» extiende la metaclase Asociación introduciendo el tag alimentaciónPrincipal. Este estereotipo puede ser aplicado a cualquier asociación del modelo.
Figura 11.19 - El perfil Équidos
2. El modelo
El modelo se presenta en las figuras 11.20 y 11.21 bajo la forma de dos diagramas de clases. El diagrama de la figura 11.20 introduce varias clases entre las que se encuentran las clases ComidaVegetal...
Ejemplo de perfil de plataforma: un perfil para EJB
La figura 11.22 ilustra un perfil de plataforma, a saber, la plataforma EJB (Entreprise JavaBeans). Este ejemplo de perfil extraído del documento de la OMG que describe la superestructura de UML introduce varios estereotipos:
-
El estereotipo «Bean», que extiende la metaclase Component. Es abstracto y especializado por los dos subestereotipos «Entity» y «Session». Como «Bean» es un estereotipo requerido, cada instancia de la metaclase Component debe estar provista de alguno de estos dos subestereotipos. Este estereotipo introduce una especificación complementaria que prohíbe la generalización y, por consiguiente, la especialización de los beans. Esta especialización es comparable a la presentada anteriormente para imponer en Java la herencia simple de las clases.
-
El estereotipo «JAR», que extiende la metaclase Artifact.
-
Los dos estereotipos «Remote» y «Home», que extienden la metaclase Interface.
La metaclase Component tiene como instancias los componentes abordados en el capítulo dedicado Modelado de la arquitectura del sistema, en el que se estudian igualmente los artefactos cuya metaclase es Artifact.
Figura 11.22 - Un ejemplo de perfil EJB
El metamodelo de UML
1. Presentación
En UML un modelo describe un domino a través de distintos diagramas. El metamodelo de UML describe un dominio particular: el propio UML. Por lo tanto, el modelo describe el conjunto de elementos de UML. Se trata de una descripción estática basada en elementos de los diagramas de clases y de objetos. El metamodelo forma parte de UML y se describe a sí mismo.
El metamodelo de UML contiene cientos de elementos. Es demasiado extenso para ser estudiado de manera exhaustiva en el marco de este libro. La figura 11.23 muestra el fragmento que hemos decidido estudiar. Se trata de la parte relativa a las clases y a las asociaciones. Este fragmento no muestra esta parte en su integralidad: las asociaciones como nestingClass y las clases como Relationship no están recogidas en el ejemplo, no se indican las restricciones, etc.
Figura 11.23 - Fragmento del metamodelo UML
Los elementos del metamodelo que aparecen en la figura 11.23 son los siguientes:
Elemento |
Descripción |
AggregationKind |
Enumeración que indica el tipo de agregación: ninguna agregación (none), baja composición (shared) o fuerte composición (composite). |
Association |
Metaclase concreta que describe las asociaciones. Cada extremidad está representada por una instancia de Property y vinculada al rol memberEnd. El rol ownedEnd representa las extremidades que pertenecen a la asociación.... |
Ejemplos
La figura 11.24 ilustra un diagrama de clases con dos clases (Propietario y Caballo) así como la asociación pertenencia.
Figura 11.24 - Ejemplo de diagrama de clases
La figura 11.5 muestra la representación de ese diagrama de clases bajo la forma de un diagrama de objetos (instancias de metaclases del metamodelo).
Figura 11.25 - Representación bajo la forma de un diagrama de objetos
Finalmente, la figura 11.26 nos muestra cómo el metamodelo de UML puede describirse a sí mismo. Hemos decidido describir un pequeño extracto del diagrama de la figura 11.23, es decir, la asociación reflexiva class/superClass que se aplica a la metaclase Class.
Figura 11.26 - Asociación class/superClass bajo la forma de un diagrama de objetos
Representación de los estereotipos en el metamodelo
La figura 11.27 muestra de manera simplificada cómo se introducen los estereotipos en el metamodelo.
Figura 11.27 - Porción del metamodelo UML relativo a los estereotipos
La metaclase Stereotype se introduce como una subclase de la metaclase Class. Los estereotipos introducidos en los diagramas de clases son instancias de esta metaclase y, por lo tanto, son clases. Es por esto que todo estereotipo puede contener atributos (tags).
La asociación (extensión) que conecta un estereotipo con el elemento que se expande es una instancia de la metaclase Extension. Esta última es una subclase de la metaclase Association. La metaclase introduce restricciones sobre ese tipo de asociación:
-
Por una parte, una de las extremidades que pertenecen a esta asociación está caracterizada por la metaclase ExtensionEnd cuyo tipo no puede ser otro que un estereotipo.
-
Una extensión es una asociación binaria, descrita en la metaclase Extension por la especificación OCL siguiente:
inv: memberEnd->size() = 2
Por lo tanto, una extensión conecta un estereotipo con el elemento que expande por su otra extremidad. Esta no está especializada, pero tiene que enlazar la extensión a una metaclase, que se traduce por la restricción siguiente:
inv: metaclassEnd()->notEmpty() and metaclassEnd().type.oclIsKindOf(Class)
metaclassEnd() es una solicitud...
Introducción al MOF
El MOF tiene como objetivo aportar una arquitectura estandardizada para describir los elementos de un metamodelo como el que acabamos de estudiar. Esta arquitectura debe ser independiente de la plataforma de software. Una arquitectura de este tipo da lugar a un metametamodelo, fruto de la modelización de un metamodelo.
El primer metametamodelo que hemos estudiado hasta ahora es el metamodelo de UML. De hecho, este metamodelo tiene como propiedad el describirse a sí mismo como hemos podido ver en la figura 11.26. Constituye una primera posibilidad de metamodelo de MOF. En la literatura del MOF, se le denomina simplemente como un metamodelo del MOF. En esta misma literatura, la descripción del metamodelo UML hecha por él mismo, como ha quedado ilustrado en la figura 11.26, se aplica en el marco de la perspectiva del MOF. Fuera de esta perspectiva, el metamodelo de UML solo se utiliza para describir los modelos UML que no introducen ningún metadato.
El uso del metamodelo UML al nivel del MOF no es adecuado: este modelo es demasiado importante para describir a otros modelos más simples, incluso a sí mismo. Por lo tanto, se han añadido dos metamodelos más simples al MOF, subconjuntos del metamodelo UML:
-
El primero se llama EMOF (Essential MOF). Se obtiene aplicando un juego de especificaciones OCL al metamodelo UML. Se utiliza principalmente para describir los elementos de los lenguajes...
Conclusión
En un primer momento, hemos estudiado los perfiles. El objetivo de estos es adaptar el metamodelo a un lenguaje de programación como Java, a una plataforma de software como EJB o a un ámbito específico como el de los équidos. Los tres ejemplos que hemos presentado en este capítulo demuestran lo fácil y rápido que es implementar perfiles (igual que las clases y los empaquetados template) incluso sin tener un gran conocimiento del metamodelo.
Después, hemos estudiado con más detalle el metamodelo UML que describe UML en su totalidad y especialmente los perfiles. Este metamodelo tiene la capacidad de describirse a sí mismo. Aunque se hubiera podido constituir un metametamodelo del MOF para describir otras arquitecturas, el OMG ha preferido introducir metamodelos más simples: EMOF y CMOF que son subconjuntos del metamodelo de UML.