Title: Tema 2. Fundamentos del DSDM. Metamodelado
1Tema 2. Fundamentos del DSDM. Metamodelado
Departamento de Informática y Sistemas
Posgrado Informática y Matemáticas Aplicadas
a la Ciencia e Ingeniería
Jesús García Molina Departamento de Informática y
Sistemas Universidad de Murcia http//dis.um.es/j
molina
2Contenidos
- Metamodelado
- Lenguajes de metamodelado
- MOF
- Ecore
- Lenguaje OCL
- Perfiles UML
- Cuestiones de metamodelado
3Metamodelado
- DSDM requiere lenguajes apropiados para describir
todos los aspectos de los sistemas y a diferentes
niveles de abstracción. - Lenguajes de modelado son lenguajes específicos
del dominio (DSL). - Dos posibilidades para definir un nuevo lenguaje
- Crear un perfil UML
- Crear un metamodelo con un lenguaje de
metamodelado
4Metamodelado
- Un lenguaje de modelado o DSL se define
formalmente mediante un metamodelo - Sintaxis abstracta y restricciones
- Sintaxis concreta
- Semántica
- Necesidad de un lenguaje de metamodelado
- OMG
- MOF EMOF y CMOF
- Eclipse (EMF, Eclipse Modeling Framework)
- Ecore
- Otros Herramientas de metamodelado existentes
disponen de uno propio (XMF, Metaedit, DSL
Tools,...)
5Metamodelado
- Un metamodelo define los elementos de un lenguaje
de modelado y las relaciones entre ellos, y las
restricciones (semántica abstracta). - Un metamodelo define la sintaxis abstracta y la
semántica estática, pero no la sintaxis concreta. - Un metamodelo define formalmente un lenguaje de
modelado o DSL. - Crear un metamodelo es una actividad de modelado
conceptual OO - Necesidad de conocer bien el dominio
- Herramientas manejan metamodelos y los
desarrolladores sintaxis concreta (modelos).
6Metamodelado
context StateMachine inv EstadosDistintoNombre
states-gt forAll (s1 states-gtforAll
(s2 s1.name s2.name implies s1
s2)) end
states
Sintaxis abstracta de una máquina de estados
7Metamodelado
Sintaxis concreta de una máquina de estados
8Metamodelado
- MOF y Ecore se basan en elementos de modelado
orientado a objetos - Clases y Atributos
- Asociaciones en MOF y referencias entre objetos
en Ecore - Agregación en MOF
- Generalización
- Paquetes
9MOF (MetaObject Facility)
- MOF es el lenguaje para crear metamodelos
propuesto por OMG para MDA. - UML está definido como un metamodelo MOF.
- Aplicable a cualquier dominio.
- Lenguajes OMG CWM, EJB, EAI, EDOC
- Medio universal para definir lenguajes de
modelado - MOF permite expresar metadatos (igual que XML)
- Independiente de la plataforma
10MOF (MetaObject Facility)
- MOF es descrito con la notación UML, OCL y texto
informal. - La notación para metamodelos MOF es la sintaxis
concreta de UML Puede generar confusión al
principio! - Comparte elementos de modelado con UML clases,
atributos, generalización, etc.
11MOF
- Cada elemento del lenguaje de modelado se
representa mediante una clase y sus propiedades
como atributos - Las relaciones entre elementos se representan
como asociaciones. - La generalización permite expresar que un
elemento es una especialización de otro. - Se usa OCL para expresar la semántica estática.
- Uso de paquetes si el metamodelo es muy grande
12Arquitectura de cuatro niveles
Nivel Descripción
M3 (Meta-metamodelo) Define un lenguaje para especificar metamodelos
M2 (Metamodelo) Define un lenguaje para especificar modelos Cada elemento es una instancia del meta-metamodelo
M1 (Modelo) Cada elemento es una instancia de un metamodelo.
M0 (Instancia) Instancias de elementos definidos en un modelo
13Arquitectura de cuatro niveles en MDA
Nivel Descripción
M3 MOF
M2 metamodelos, instancias de los elementos MOF
M1 modelos, instancia de un metamodelo MOF
M0 el sistema, objetos y datos, instancias de los elementos de un modelo
14Arquitectura de cuatro niveles Ejemplo
Nivel Ejemplo
M3 MOF
M2 Metamodelo de UML
M1 Modelo de clases UML para un sistema TPV
M0 Instancias de elementos en el modelo de clases del TPV
15Arquitectura de cuatro niveles Ejemplo
Nivel Ejemplo Elementos
M3 MOF Clase, Atributo, Asociación,..
M2 Metamodelo de UML Clase, Atributo, Asociación, Estado, Actividad, Caso de uso,
M1 Modelo de clases UML para un sistema TPV Clase Cliente, atributo dni, asociación Cliente-Pedido
M0 Instancias de elementos en el modelo de clases del TPV Cliente Pepe Pérez, 87654321, Cliente Ana Haro, 1234567,
16Arquitectura de cuatro niveles Ejemplo
Nivel Ejemplo Elementos
M3 MOF Clase, Atributo, Asociación,..
M2 Metamodelo del DSL TaskFlow Actividad, Tarea, Agente,..
M1 Modelo de TaskFlow Actividad Gestión artículos de un Congreso, Tarea Enviar artículo, Actor Autor
M0 Instancias de elementos en el modelo de clases del TPV Actividad Congreso DSDM, Tarea Envío artículo XXX, Actor JJGM
17Arquitectura de cuatro niveles
18Arquitectura de cuatro niveles
19 MOF
Tabla y Columna son elementos de un modelo
Existe el concepto de jerarquía de tablas
context Tabla inv padre.columna -gt forAll
(columnaPadre self.columna -gtincludes
(columnaPadre))
20Árbol Sintaxis Abstracta
- Compiladores construyen árbol de sintaxis a
partir de una sintaxis concreta (gramática). - Herramientas que manejan metamodelos crean un
árbol de sintaxis abstracta (AST) para
representar un modelo. - Sus nodos son instancias de clases del metamodelo
- Sus arcos son instancias de asociaciones del
metamodelo
21Ejemplo AST
Tabla nombre Persona
Columna nombre Pepe
Columna dni 1234567
Tabla nombre Empleado
Columna sueldo 100000
22MOF (MetaObject Facility)
- UML 2.0 está organizado en dos partes
Infraestructura y SuperEstructura - Infraestructura define las construcciones básicas
de UML 2.0. - SuperEstructura define las construcciones a nivel
de usuario de UML 2.0. - MOF merges ciertos paquetes de Infraestructura
- Subconjunto de UML
- Misma notación que UML
23Infraestructura Core
Profiles Define mecanismos para extender
metamodelos
Core Contiene conceptos básicos de metamodelos
24SuperEstructura Estructura
25SuperEstructura Comportamiento
26MOF(MetaObject Facility)
- Integra facilidades básicas como reflexión o
identificadores. - Reflexión útil para crear herramientas de
metamodelado - Se debe manejar elementos de cualquier metamodelo
- Identificadores
- Se asigna un identificador único a cada elemento.
- Útil en actualizaciones de datos, identificación
de objetos en comunicación, comparación por
identidad, establecer la traza de los elementos,
27EMOF
- MOF Essential MOF (EMOF) Complete MOF (CMOF)
- EMOF es un subconjunto mínimo de MOF que
contiene el núcleo con las capacidades básicas. - El objetivo de EMOF es facilitar su
implementación y que las herramientas conformen a
MOF. - Proporciona el conjunto mínimo de elementos para
hacer modelado OO clases, atributos,
operaciones, herencia, y paquetes. - EMOF permite definir metamodelos simples.
28(No Transcript)
29EMOF
30EMOF
31CMOF
- Elementos principales
- Clase, Asociación, Generalización y Paquete
- Las clases tienen Atributos y Operaciones
- Una asociación tiene dos extremos que pueden
tener una cardinalidad asociada y semántica de
orden y agregación, y navegabilidad.
32CMOF
33MOF
34Metamodelo UML
Instancia de MOFAttribute
Instancia de MOFGeneralizes
Instancia de MOFAssociation
Instancia de MOFClass
35MetamodeloUML
Instancia de MOFGeneralizes
Instancia de MOFAttribute
Instancia de MOFAssociation
Instancia de MOFClass
36CWM
Instancia de MOFAssociation
Instancia de MOFClass
Instancia de MOFAttribute
Instancia de MOFGeneralization
37Arquitectura de cuatro niveles
Nivel Descripción
M3 MOF
M2 metamodelos, instancias de los elementos MOF
M1 modelos, instancia de un metamodelo MOF
M0 el sistema, objetos y datos, instancias de los elementos de un modelo
38EMF-Eclipse
- Framework de DSDM para Eclipse.
- Modelado y programación pueden ser considerados
la misma cosa - Código Java generado a partir de un modelo Ecore
- Notificación de cambios, reflexión, serialización
XMI, persistencia, clases de utilidad.
UML (diagramas de clase)
Java (anotaciones)
EMF Model
Ecore
XML
39Ecore
0..
0..
0..
40Ecore
- EClass
- Modela clases
- EAttribute
- Modela atributos
- EDataType
- Modela los tipos de los atributos, que son tipos
primitivos y tipos de datos objetos definidos en
Java. - EReference
- Modela asociaciones entre clases, incluyendo
composición. - Epackage y EFactory
- Clases y tipos relacionados son agrupados en
paquetes y una factoría se utiliza para crear
objetos.
41Ecore Parte Estructural
42Ecore Parte Comportamiento
0..
0..
0..
0..
43Ecore Paquetes
0..
0..
44MOF
- Metamodelos MOF son independientes de la
plataforma. - Mappings de MOF a middleware, lenguajes, y
formatos de información, permiten a generadores
transformar automáticamente una sintaxis
abstracta de un metamodelo en representaciones
concretas basadas en plataformas concretas. - Se han definido mappings para CORBA, XML (XMI) y
Java (JMI).
45XMI (XML Data Interchange)
- Formato de intercambio de metadatos común
independiente de cualquier plataforma. - Nueva forma de transferir metadatos entre
repositorios MOF. - Serialización de modelos y metamodelos MOF en XML
- Primero fue aplicado al metamodelo de UML
- Proporciona interoperabilidad entre herramientas
46Metamodelo de clases
MOF
EMOF
47XMI del metamodelo de clases (EMOF)
- lt?xml version"1.0" encoding"UTF-8"?gt
- ltemofPackage xmiversion"2.0"
- xmlnsxmi"http//www.omg.org/XMI"
xmlnsemof"http//schema.omg.org/spec/mof/2.0/emo
f.xmi" xmiid"ClassM" - name"ClassM"gt
- ltownedType xmitype"emofClass"
xmiid"6E721B079B360F7A00D1E07C4458BAA5"
name"Class" - superClass"6EEE79489B360F7A007244CA3BE86B5B
"gt - ltownedAttribute xmiid"73695CDB9B360F7A0033B1
21713E40BF" name"attrs" upper"" - type"6EF9DA649B360F7A007244CA408DB38E"
isComposite"true" opposite"ClassM.Attribute.owne
r"/gt - lt/ownedTypegt
- ltownedType xmitype"emofClass"
xmiid"6EEE79489B360F7A007244CA3BE86B5B"
name"Classifier"gt - ltownedAttribute xmiid"ClassM.Classifier.name
" name"name gt - lttype xmitype"emofPrimitiveType"
href"http//schema.omg.org/spec/mof/2.0/emof.xmi
String"/gt - lt/ownedAttributegt
- ltownedAttribute xmiid"73695CDB9B360F7A0033B1
21AF590F9B" name"typeOf" upper"" - type"6EF9DA649B360F7A007244CA408DB38E"
opposite"ClassM.Attribute.type"/gt - lt/ownedTypegt
- ltownedType xmitype"emofClass"
xmiid"6EF9DA649B360F7A007244CA408DB38E"
name"Attribute"gt - ltownedAttribute xmiid"ClassM.Attribute.owner
" name"owner" lower"1" type"6E721B079B360F7A00D
1E07C4458BAA5" - opposite"73695CDB9B360F7A0033B121713E40BF
"/gt
48XMI del metamodelo de clases (ECore)
- lt?xml version"1.0" encoding"UTF-8"?gt
- ltecoreEPackage xmiversion"2.0"
- xmlnsxmi"http//www.omg.org/XMI"
xmlnsxsi"http//www.w3.org/2001/XMLSchema-instan
ce" - xmlnsecore"http//www.eclipse.org/emf/2002/E
core" name"ClassM" - nsURI"http//gts.inf.um.es/examples/class"
nsPrefix"classm"gt - lteClassifiers xsitype"ecoreEClass"
name"Class" eSuperTypes"//Classifier"gt - lteStructuralFeatures xsitype"ecoreEReferenc
e" name"attrs" upperBound"-1" - eType"//Attribute" containment"true"
eOpposite"//Attribute/owner"/gt - lt/eClassifiersgt
- lteClassifiers xsitype"ecoreEClass"
name"Attribute"gt - lteStructuralFeatures xsitype"ecoreEAttribut
e" name"name" eType"ecoreEDataType
http//www.eclipse.org/emf/2002/Ecore//EString"/gt
- lteStructuralFeatures xsitype"ecoreEReferenc
e" name"type" eType"//Classifier"/gt - lteStructuralFeatures xsitype"ecoreEAttribut
e" name"is_primary" eType"ecoreEDataType
http//www.eclipse.org/emf/2002/Ecore//EBoolean"/
gt - lteStructuralFeatures xsitype"ecoreEReferenc
e" name"owner" eType"//Class" - eOpposite"//Class/attrs"/gt
- lt/eClassifiersgt
- lteClassifiers xsitype"ecoreEClass"
name"Classifier"gt - lteStructuralFeatures xsitype"ecoreEAttribut
e" name"name" eType"ecoreEDataType
http//www.eclipse.org/emf/2002/Ecore//EString"/gt
- lt/eClassifiersgt
49Metamodelo Relacional
MOF
EMOF
50Metamodelo relacional (EMOF)
- lt?xml version"1.0" encoding"UTF-8"?gt
- ltemofPackage xmiversion"2.0"
- xmlnsxmi"http//www.omg.org/XMI"
xmlnsemof"http//schema.omg.org/spec/mof/2.0/emo
f.xmi" xmiid"TableM" - name"TableM"gt
- ltownedType xmitype"emofClass"
xmiid"6F184C409B360F7A007244CA1577F422"
name"Table gt - ltownedAttribute xmiid"TableM.Table.name"
name"name"gt - lttype xmitype"emofPrimitiveType"
href"http//schema.omg.org/spec/mof/2.0/emof.xmi
String"/gt - lt/ownedAttributegt
- ltownedAttribute xmiid"73A6F82B9B360F7A0033B1
21EF646314" name"cols" upper"" - type"6F1951099B360F7A007244CA3E24CF40"
isComposite"true" opposite"TableM.Column.owner"/
gt - ltownedAttribute xmiid"73A6F82B9B360F7A0033B1
218D1F3EAA" name"pkeys" upper"" - type"6F1951099B360F7A007244CA3E24CF40"
opposite"TableM.Column.pkeyOf"/gt - ltownedAttribute xmiid"73A6F82B9B360F7A0033B1
2107163D64" name"referenceBy" upper"" - type"6F197CD29B360F7A007244CA704AD65E"
opposite"TableM.FKey.references"/gt - ltownedAttribute xmiid"73A6F82B9B360F7A0033B1
219677E62B" name"fkeys" upper"" - type"6F197CD29B360F7A007244CA704AD65E"
opposite"TableM.FKey.owner"/gt - lt/ownedTypegt
- ltownedType xmitype"emofClass"
xmiid"6F1951099B360F7A007244CA3E24CF40"
name"Column"gt - ltownedAttribute xmiid"TableM.Column.owner"
name"owner" lower"1" type"6F184C409B360F7A00724
4CA1577F422"
51Metamodelo Relacional (Ecore)
- lt?xml version"1.0" encoding"UTF-8"?gt
- ltecoreEPackage xmiversion"2.0"
- xmlnsxmi"http//www.omg.org/XMI"
xmlnsxsi"http//www.w3.org/2001/XMLSchema-instan
ce" - xmlnsecore"http//www.eclipse.org/emf/2002/E
core" name"TableM" - nsURI"http//gts.inf.um.es/examples/relationa
l" nsPrefix"relational"gt - lteClassifiers xsitype"ecoreEClass"
name"Table"gt - lteStructuralFeatures xsitype"ecoreEAttribut
e" name"name" eType"ecoreEDataType
http//www.eclipse.org/emf/2002/Ecore//EString"/gt
- lteStructuralFeatures xsitype"ecoreEReferenc
e" name"cols" upperBound"-1" eType"//Column" - containment"true" eOpposite"//Column/ow
ner"/gt - lteStructuralFeatures xsitype"ecoreEReferenc
e" name"pkeys" upperBound"-1" - eType"//Column"/gt
- lteStructuralFeatures xsitype"ecoreEReferenc
e" name"fkeys" upperBound"-1" - eType"//FKey" containment"true"
eOpposite"//FKey/owner"/gt - lteStructuralFeatures xsitype"ecoreEReferenc
e" name"referencedBy" upperBound"-1" - eType"//FKey"/gt
- lt/eClassifiersgt
- lteClassifiers xsitype"ecoreEClass"
name"Column"gt - lteStructuralFeatures xsitype"ecoreEReferenc
e" name"owner" eType"//Table" - eOpposite"//Table/cols"/gt
52XMI de un modelo Relacional (EMOF)
- ltxmiXMI xmlnsemof'http//schema.omg.org/spec/mo
f/2.0/emof.xmi' xmiversion'2.0'
xmlnsTableM'file////home/jesus/usr/eclipse-age-
dev/runtime-age.product/class2table-tutorial/metam
odels/TableM.emof' - xmlnsxmi'http//www.omg.org/XMI'gt
- ltTableMTable name'Person' pkeys'TableM.Column_4
' xmiid'TableM.Table_1' referenceBy'TableM.FKey
_3' fkeys'TableM.FKey_2 TableM.FKey_1'gt - ltcols name'Pet_name_id' partOfFkey'TableM.FKey_
1' type'String' xmiid'TableM.Column_1'/gt - ltcols name'Job_name_id' partOfFkey'TableM.FKey_
2' type'String' xmiid'TableM.Column_2'/gt - ltcols name'Job_address_id' partOfFkey'TableM.FK
ey_2' type'String' xmiid'TableM.Column_3'/gt - ltcols name'name' type'String'
xmiid'TableM.Column_4' pkeyOf'TableM.Table_1'/gt
- ltcols name'age' type'Integer'
xmiid'TableM.Column_5'/gt - lt/TableMTablegt
- ltTableMTable name'Job' pkeys'TableM.Column_6
TableM.Column_7' xmiid'TableM.Table_2'
referenceBy'TableM.FKey_2' fkeys'TableM.FKey_3'gt
- ltcols name'name' type'String'
xmiid'TableM.Column_6' pkeyOf'TableM.Table_2'/gt
- ltcols name'address' type'String'
xmiid'TableM.Column_7' pkeyOf'TableM.Table_2'/gt
- ltcols name'Person_name_id' partOfFkey'TableM.FK
ey_3' type'String' xmiid'TableM.Column_8'/gt
lt/TableMTablegt - ltTableMTable name'Pet' pkeys'TableM.Column_9'
xmiid'TableM.Table_3' referenceBy'TableM.FKey_1
'gt - ltcols name'name' type'String'
xmiid'TableM.Column_9' pkeyOf'TableM.Table_3'/gt
- ltcols name'age' type'Integer'
xmiid'TableM.Column_10'/gt
53XMI de un modelo Relacional (Ecore)
- ltxmiXMI xmlnsxsi'http//www.w3.org/2001/XMLSche
ma-instance' xsischemaLocation'http//gts.inf.um
.es/examples/relational ../metamodels/TableM.ecore
' xmiversion'2.0' xmlnsxmi'http//www.omg.org/
XMI'gt - ltrelationalTable name'Person'
pkeys'/0/_at_cols.3' xmlnsrelational'http//gts.i
nf.um.es/examples/relational'gt - ltcols name'Pet_name_id' type'String'/gt
- ltcols name'Job_name_id' type'String'/gt
- ltcols name'Job_address_id' type'String'/gt
- ltcols name'name' type'String'/gt
- ltcols name'age' type'Integer'/gt
- ltfkeys references'/1' cols'/0/_at_cols.1
/0/_at_cols.2'/gt - ltfkeys references'/2' cols'/0/_at_cols.0'/gt
- lt/relationalTablegt
- ltrelationalTable name'Job' pkeys'/1/_at_cols.0
/1/_at_cols.1' xmlnsrelational'http//gts.inf.um.e
s/examples/relational'gt - ltcols name'name' type'String'/gt
- ltcols name'address' type'String'/gt
- ltcols name'Person_name_id' type'String'/gt
- ltfkeys references'/0' cols'/1/_at_cols.2'/gt
- lt/relationalTablegt
- ltrelationalTable name'Pet' pkeys'/2/_at_cols.0'
xmlnsrelational'http//gts.inf.um.es/examples/re
lational'gt - ltcols name'name' type'String'/gt
- ltcols name'age' type'Integer'/gt
54Ejemplo XMI (UML)
- ltXMI xmi.version"1.2" xmlnsUML"org.omg/standard
s/UML"gt - ltXMI.headergt
- ltXMI.metamodel name"UML" version"1.3"
href"UML.xml"/gt - ltXMI.model nameejemplo" version"1"
href"ejemplo.xml"/gt - lt/XMI.headergt
- ltXMI.contentgt
- ltUMLClass name"C1"gt
- ltUMLClassifier.featuregt
- ltUMLAttribute name"at1
- visibility"private"/gt
- lt/UMLClassifier.featuregt
- lt/UMLClassgt
- lt/XMI.contentgt
- lt/XMIgt
55JMI (Java Metadata Interface)
- JMI define un mapping Java para MOF
- JMI especifica cómo generar automáticamente, para
un metamodelo MOF cualquiera, un conjunto de API
Java para manipular modelos de ese metamodelo. - API que proporciona un mapping MOF-Java
- Interfaz de programación a MOF.
- Integración con J2EE.
56JMI
- Las aplicaciones Java cliente pueden usar esta
API o un API reflectiva genérica, para
interactuar con los metadatos operaciones de
consulta, recorrido, ciclo de vida. - Se puede construir un mecanismo para facilitar la
interoperabilidad con metadatos genéricos.
57Ejemplo JMI
58Ejemplo JMI Interfaz instancia
- public interface Element extends
javax.jmi.reflect.RefObject - public String getName()
- public void setName(String newValue)
- public Node getContainer()
- public void setContainer(Node newValue)
-
59Ejemplo JMI Interfaz proxy clase
- public interface AttributeClass extends
javax.jmi.reflect.RefClass - public Attribute createAttribute()
- public Attribute createAttribute(String name,
String value) -
60Ejemplo JMI Interfaz proxy asociación
- public interface Contains extends
javax.jmi.reflect.RefAssociation - public boolean exists(Element element, Node
container) - public java.util.List getElements(Node
container) - public Node getContainer(Element element)
- public boolean add(Element element, Node
container) - public boolean remove(Element element, Node
container) -
61Ejemplo JMI Interfaz proxy paquete
- public interface XMLModelPackage extends
javax.jmi.reflect.RefPackage - public NodeClass getNode()
- public AttributeClass getAttribute()
- public ElementClass getElement()
- public RootNodeClass getRootNode()
- public Contains getContains()
-
62Repositorio MOF
- A partir de un metamodelo MOF, un generador crea
las APIs, junto con sus implementaciones, que
permiten manipular modelos de ese tipo. - Posibilidad de código genérico para manipular
metadatos del repositorio mismo código para
modelos de distintos metamodelos. - Editores genéricos en los repositorios
- MDR/NetBeans (MOF 1.4 y JMI)
- RMOF (EMOF 2.0 y Ruby)
63Repositorio MOF
XMI
JMI
Modelos UML (M1)
Modelos datos (M1)
Metamodelos (M2)
El modelo MOF (M3)
64MOF o XML?
lt xml version 1.0 encoding UTF-8? gt lt!
ELEMENT TABLA (NOMBRE, COLUMNA)gt lt!ELEMENT
NOMBRE (PCDATA)gt lt!ELEMENT COLUMNA (NOMBRE)gt
65OCL (Object Constraint Language )
- Lenguaje declarativo para añadir información a
los modelos UML restricciones, invariantes,
queries,.. - Estándar del OMG
- Versión actual OCL 2.0
66OCL (Object Constraint Language )
- Lenguaje de especificación para escribir
expresiones sobre modelos UML, p.e. queries,
reglas de derivación de atributos, el cuerpo de
operaciones de consulta, pre y postcondiciones o
el invariante, guardas. - Extiende la potencia expresiva de UML y permite
crear modelos más precisos y más completos. - Es tipado, cada expresión OCL tiene un tipo.
- Utilizado para escribir las restricciones
67OCL (Object Constraint Language )
- Por qué usar OCL?
- Limitaciones de los lenguajes (diagramas) para
crear modelos precisos y completos.
context Vuelo inv pasajeros -gt size() lt
avion. númeroPlazas
68OCL Características
- Lenguaje de restricciones y de consulta
- Lenguaje formal basado en teoría de conjuntos y
lógica de predicados pero notación fácil de usar. - Fuertemente tipado
- Tipos de modelos UML
- Modelos validados antes de la ejecución
- Lenguaje declarativo
69OCL
- Contexto de una definición
- Especifica el elemento de un modelo UML para el
que se define una expresión OCL. - Normalmente una clase, una interfaz o una
operación - Tipo contextual
- Es el tipo del objeto para el que se evaluará una
expresión OCL una clase, interfaz, tipo de dato
o componente. - Una expresión OCL se evalúa siempre para una
única instancia del tipo contextual.
70Ejemplo Modelo Royal and Loyal
71Navegación
- Los extremos de las asociaciones pueden ser
utilizados para navegar de un objeto a otro
Notación Punto. - context CustomerCard
- inv self.owner.programs -gt size() gt 0
72Navegación Tipos
- Contexto CustomerCard
- Tipo(self.owner) Customer
- Contexto CustomerCard
- Tipo(self.owner.programs) Set(LoyaltyProgram)
- Contexto Customer
- Tipo(self.programs) Set(LoyaltyProgram)
- Contexto Customer
- Tipo(self.cards) Set(CustomerCard)
- Contexto LoyaltyProgram
- Tipo(self.Customer.programs)
Bag(CustomerCard)
73OCL Query
- context CustomerCardgetTransactions (from
Date, - until Date) Set(Transaction)
- body transactions -gt select (date.isAfter(from)
and - date.isBefore(until))
- context LoyaltyProgramgetServices()Set(Service)
- body partners.deliveredServices-gtasSet()
- context LoyaltyProgramgetServices(pp
ProgramPartner) Set(Service) - body if partners -gtincludes(pp)
- then pp.deliveredServices else Set() end
74OCL Invariantes
- context Customer
- inv ofAge age gt 18
- context CustomerCard
- inv checkDates validFrom.isBefore(goodThru)
- context CustomerCard
- inv ofAge owner.age gt 18
75OCL Colecciones (Operaciones Estándar)
Operación Descripción
count(obj) Número de ocurrencias de un objeto obj en la colección
excludes (obj) True si obj no pertenece a la colección
excludesAll(c) True si ningún objeto la colección c pertenece a la colección
includes(obj) True si obj pertenece a la colección
includesAll(c) True si todos los objetos c pertenecen a la colección
isEmpty True si la colección está vacía.
notEmpty True si no está vacía.
size() Número de elementos
sum() Suma de todos los elementos
76OCL Colecciones (operaciones con significado
diferente)
- y ltgt
- asBag(), asSet(), asOrderedSet(), asSequence()
- Conversión de un tipo en otro
- including(obj)
- Retorna una nueva colección que incluye a obj
- excluding(obj)
- Retorna una nueva colección en la que se ha
eliminado obj - flatten()
- Trasforma una colección de colecciones en una
única colección - union (col), intersection (col)
77OCL OrderedSet y Sequence
- append(objeto)
- at(index)
- first()
- last()
- insertAt(objeto)
- indexOf(objeto)
78OCL Iteradores
- col -gt isUnique (expr)
- Retorna true si expr tiene el mismo valor para
cada elemento - col -gt iterate ()
- Iterar sobre todos los elementos
- select
- reject
- collect
- forAll
- exist
- sortedBy(expr)
79OCL Colecciones
- context LoyaltyProgram
- inv minServices partners.deliveredServices -gt
size() gt1 - context Customer
- inv sizesAgree programs -gtsize()
- card -gt select(valid true)-gtsize()
- context LoyaltyProgram
- inv participants -gt forAll (age() lt 70)
- context LoyaltyProgram
- inv self.participants -gt forAll (c1, c2
- c1 ltgt c2 implies c1.name ltgt c2.name)
- context LoyaltyProgram
- inv pointsgt0 implies transactions-gtexist(t
t.points gt 0)
80OCL Colecciones
- context LoyaltyAccount
- inv transactions -gt collect (points)-gtexist(
- p Integer p 500)
- context LoyaltyAccount
- inv transactions.points -gt exist(
- p Integer p 500)
81OCL Pre y Postcondiciones
- context LoyaltyAccountenroll(c Customer)
- pre not (participants -gt includes (c))
- post participants participants_at_pre
-gtincluding(c) - context LoyaltyAccountisEmpty() Boolean
- pre -- ninguna
- post result (points 0)
- context CustomerbirthdaysHappens()
- post age age_at_pre 1
- context PersonbirthdaysHappens()
- post age age_at_pre 1
82Perfiles UML (Profiles)
- En vez de definir un nuevo metamodelo MOF se
puede extender un metamodelo existente. - Extensibilidad de los metamodelos (DSL)
- Si el metamodelo elegido es UML
- Extender el metamodelo UML
- Definir un perfil UML
- Mecanismo definido en el propio metamodelo de UML
83Extensión del metamodelo
UMLClass
CMComponent transational bool
- Necesidad de herramientas que permitan
- Manejar el metamodelo
- Asociar una sintaxis concreta a la extensión
84Perfiles UML
- UML es una familia de lenguajes
- Lenguaje core Perfiles
- Un perfil define una extensión de UML mediante la
especialización de un subconjunto del metamodelo
de UML. - Un perfil define una forma específica de usar UML
para un dominio concreto EJB, aplicaciones web,
CORBA, modelado del negocio,.. - Agrupación de un conjunto de estereotipos,
valores etiquetados y restricciones, con su
correspondiente notación. - Usados como lenguajes de los PSM en MDA
85Perfiles UML
- Un perfil se define mediante un modelo formal
UML. - Estereotipos pueden extender cualquier
elemento del metamodelo para definir nuevas
meta-clases, meta-asociaciones,.. - Valores etiquetados definen los atributos de
un estereotipo. - Restricciones semánticas en OCL completan la
definición del perfil. - Se puede asociar una representación gráfica a
cada estereotipo.
86Perfiles UML
ltltmetaclassgtgt UMLClass
Extensión
- Metamodelo de UML 2.0
- Un perfil es una especialización de UMLPackage
- Un estereotipo es una especialización de
UMLClass - Un perfil contiene estereotipos
- Una extensión es una especialización de
UMLAssociation cuyos extremos son una clase y
un estereotipo. - Un perfil se define sobre un metamodelo
referencia (UML u otro perfil) y no puede
modificar las definiciones existentes. - Las herramientas actuales no soportan bien los
perfiles.
87ltltprofilegtgt EJB
ltltstereotypegtgt Bean
UMLComponent
ltltstereotypegtgt SessionBean state StateKind
ltltstereotypegtgt EntityBean
ltltstereotypegtgt Bean
UMLArtifact
ltltenumerationgtgt StateKind stateful stateless
ltltstereotypegtgt Remote
UMLArtifact
ltltstereotypegtgt Home
88Perfiles del OMG
89Perfiles del OMG
- Perfiles definidos por OMG
- CORBA y CCM
- EDOC (Enterprise Distributed Object Computing)
- EAI (Enterprise Application Integration)
- Planificación, Prestaciones, y Tiempo
- Otros perfiles estándares de-facto
- EJB
- Java
- C
90Pasos para definir un Perfil UML
- Definir, si no se dispone, el modelo conceptual
de la plataforma o del dominio de aplicación. - Definir un estereotipo para cada elemento del
modelo conceptual hay que elegir el elemento del
metamodelo UML a extender. - Definir como valores etiquetados los atributos de
los elementos del modelo conceptual. - Definir las restricciones del dominio como
restricciones del perfil.
91Ejemplo de definición de Perfil UML
Modelar conexiones entre elementos de un sistema
de información conectados según la topología
estrella
context MyTopologyMainNode inv
self.localnodes -gtforAll (n Node
n.location self.location)
inv self.target -gtforAll (n MainNode
n.location ltgt self.location )
92Ejemplo de definición de un Perfil UML
93Ejemplo de definición de un Perfil UML
context UMLInfrastructureLibraryCoreConstru
ctsClass inv self.isStereotyped(Node)
implies self.connection -gt select
(isStereotyped(LocalEdge)) -gt size 1 and
self.connection -gt select (isStereotyped(Edge
)) -gtisEmpty context UMLInfrastructureLibrary
CoreConstructsAssociation inv
self.isStereotyped(LocalEdge) implies
self.connection -gt exists (participant.isStere
otyped(MainNode) and multiplicity.min1
and multiplicity.max1) inv
self.isStereotyped(LocalEdge) implies
self.connection -gt select (participant.isStereoty
ped(Node) or participant.isStereotyped(Mai
nNode) ) -gt forAll
(n1, n2 n1.location n2.location) inv
self.isStereotyped(Edge) implies
self.connection -gt select(participant.isStereotype
d(Node))-gtisEmpty and
self.connection-gtselect(participant.isStereotyped(
MainNode) ) -gt forAll (n1, n2 n1.location
ltgt n2.location)
94Cuestiones de metamodelado
Cómo expresar que las instancias de cierta
metaclase Entidad deben implementar cierta
interfaz IA?
Entidad
context Entidad inv realization -gt
exist(realizer oclTypeOf IA)
Entidad
IA
subsets realization
Entidad
IA
95Cuestiones de metamodelado
Varios elementos del metamodelo deben tener un
nombre
ltltinterfacegtgt ElementoConNombre
Servicio
Entidad
Nodo
96Cuestiones de metamodelado
Varios elementos dependen de una interfaz IA
porque invocan sus operaciones
Entidad
IA
Entidad
IA
97Cuestiones de metamodelado
Un elemento Entidad tiene un atributo ID de tipo
String.
context Entidad inv self.attributes -gt select
(name ID)-gtsize 1 self.attributes -gt
select (name ID)-gtforAll( type.name
String)
Entidad
Entidad ID String
98Ejemplo de metamodelo
DSL para crear modelos de características
Attribute type String value String
attributes
MOFClass
MOF
FMFeature
FMSubFeatureGroup
groups
FMGroupKind
kind
1
1
n
1
parent
1
features
n
Feature Model
FMConcept
context FMGroupKind inv value optional
value required value alternative
context FMConcept inv parent null
99Herramientas y metamodelado
- Herramientas UML
- Mayoría no soportan metamodelado
- Tendencia a soportar perfiles
- Herramientas que tiene como entrada modelos
creados con herramientas UML - Entrada es un modelo XMI
- Validadores, Transformación de modelos,
Generadores de código - Herramientas de metamodelado
- Permiten definir metamodelos y generan editores
de modelos - Tienen su propio lenguaje de metamodelado
- Metaedit, GME, DSL Tools, XMF