Академический Документы
Профессиональный Документы
Культура Документы
PIM
Transformaciones automáticas
MDA- Beneficios
Productividad
Portabilidad
Interoperabilidad
Metamodelos
Modelos, Transformaciones y
Metamodelos
OMG provee un framework conceptual y estándares
para expresar modelos, relaciones y transformaciones
modelo-a-modelo.
UML/OCL Modelos
MOF Metamodelos
(Meta Object Facility)
QVT Transformaciones
(Query-View-Transformation)
Arquitectura de metamodelado
Arquitectura de metamodelado de 4 niveles:
Meta-metamodelo
(MOF) MOF
Metamodelo
“es-una-instancia”
Transformaciones y metamodelos
Metamodelo
PIM
“es-instancia-de” PIM
Metamodelo
PSM PSM
“es-instancia-de”
MDA y Reingeniería
Domain Model
CIM
Target
1
1
Adaptee
1
OCL 1
1..*
0..* OCL
Constraints Constraints
0.. * AdapteeAdapter
T
argetAdapter
Assoc EndAdaptee
1..* Attribute
TargetAdapter 0..* 1 1..* 0..*
AdapteeAdapter 1
1 1
1..* AdapterAdaptee
0..* Adapter
1
1 1 0..* Adaptees
1
Adapter 1
1 {or} 0.. * AssocEndAdapter 1 1
GetAdaptees
1 Operat ion
Class AssociationEnd 1
SetAdaptees
Patterns
Rules + Strategies
Components
PSM Metamodel PSM Metamodel
+supplier DirectedRelationshi p
Rules
NamedElement Dependency
1..* (from Kernel )
*
+client
1..* * +supplier
NamedElement Dependency
OCL
1..*
OCL
*
Op
aq ue Expression +client
0..1 0..1 Abstraction
(from Kernel) Usa
ge
1..* *
Constraints Constraints
+mapping
0..1 0..1
OpaqueExpression
Realizati o
n Abstraction Usage
(from Kern
el)
+contract Realization
Su
bstitution * Classifier
1
* 1
Rules + Strategies
Components
ISM Metamodel ISM Metamodel
Rules
+declari ngClass
0..1
+declari ngInterface 0..* JavaClass
Interface +declarin gClass
OCL OCL
+declaredClass isPublic DataType
(Jav
a_Li br ary) 0..1
isAbstract +declaringIn terface
isFi nal Interfac e 0..* JavaClass
+declaredInte rface +declaredClass isPublic
+declaringClass isAbstrac t
Constraints Constraints
isFinal
+declarin gClass
+declaringInterface
TypedElement
* +client +declaredClass
1 +client
*
+jav
aExceptions * *
Member
Member
isFinal
isFi nal * isStatic
* isStatic
NewClass
Method
isAbstra ct
1..* isNat ive
+localAtt Fi eld isSyncronized
Method
isConstru cto r
i sAbstract *
i sNative JavaParameter
*
i sSyncronized {ordered}
i sConstr uctor
Refactoring
Rules + Strategies
Especificación de transformaciones
como contratos OCL
TRANSFORMATION transformationName
PARAMETERS<parameterList>
PRE: <preconditionList>
POST: <postconditionList>
Additional Operations
def:…
def:…
END
Ejemplo
BON-Metamodel simplificado
Model
* abstractions
source.target Abstraction
2
Dynamic Static
Abstraction Abstraction
Object Object
Cluster Cluster Class
name:String
0..1
feature 1
Relationship type
parameters
Attribute
Static Message
Relationship Routine
parameters
NameSpace Packageable
Element
Package
owningPackage *
0..1 ownedMember PackageableElement
Ejemplo
Metamodel UML simplificado
Classifier Structural
Feature Classifier Relationship
memberEnd Association
class ownedAttribute Property
Class 0..1 redefinedProperty
*
isDerived:Boolean ownedEnd 0..1
isComposite:Boolean
Type
aggregation….
0..1
superclasss 1..*
subsettedProperty
opposite
0..1 * Operation
ownedOperation
0..1
* Classifier
nestedClassifier
Ejemplo
Metamodel UML simplificado
Behavioral Feature
0..1 precondition
* Constraint
0..1 postcondition
*
type
0..1 Type
Especificación de transformaciones
TRANSFORMATION BASIC PACKAGE
PARAMETERS
source: UMLMetamodel :: Package
target: BON-PSM-Metamodel :: Model
PRE:
-- source es un Package simple, que sólo contiene clases y asociaciones
source.ownedMember ->
forAll (s / s.oclIsTypeOf (Class) or s.oclIsTypeOf(Association))
POST:….
Especificación de transformaciones
POST:
-- para cada clase en source existe una clase target que
tiene
--el mismo nombre
source.ownedMember ->
select (oclIsTypeOf (Class)) ->
forAll(classSource|target.abstractions->
select(oclIsTypeOf (Class)) ->
exists(classTarget|classSource.name=
classTarget.name )and …
Especificación de transformaciones
--para cada clase en el conjunto de superclases de
--source existe una relación de herencia en el target con
--el mismo nombre
classSource.superclasses ->
forAll (classParent |
target.relationships–>select(oclIsTypeOf(inheritance) ->
exists (rel | (rel.name = classParent.name)))
and …
Especificación de transformaciones
--para cada operación/atributo en source
--existe una rutina/atributo en el target…
classSource.ownedOperation ->
forAll (op |target.abstractions ->
select(oclIsTypeOf(Routine)->
exists(op1| operTransf (op, op1)))
and
classSource.ownedAttribute ->
forAll (at| target.abstractions ->
select(oclIsTypeOf(Attribute))->
exists(at1|attribTransf(at, at1))) )
Especificación de transformaciones
POST:
--para cada asociación en source existe una en
target..
source.ownedMember->
select(oclIsTypeOf(Association) ->
forAll (assoc|
exists(assoc1|assocTransf (assoc, assoc1))
…
Additional Operations
Especificación de transformaciones
Additional Operations
def:operTransf(O:Package::operation,F:Model::feature): Boolean =
if O.stereotype.name = ´constructor´
then F.name = ´make´ else F.name = O.name endif
and (F.type.conformsTo.O.type)
and O.parameters -> size () <= F.parameters ->size()
and Sequence { 1..(O.parameters ->size())} -> forAll (i:Integer |
F.parameters -> (at(i).name = O.parameters -> at(i).name) and
O.parameters ->at(i).type.conformsTo.(F.parameters->at(i).type))
def:
attribTransf(S:Package::Attribute,T:Model::Attribute):Boolean
def:
assocTransf(S:Package::Association,T:Model::Association):Boolean.
END-TRANSFORMATION