Title: Arquitectura de software dirigida por modelos (Model-Driven Architecture)
1Arquitectura de software dirigida por
modelos(Model-Driven Architecture)
- Liliana Favre
- UNCPBA
- 2006
2- Model-Driven Development
- MDD
3Model-driven Development (MDD)
- Un desarrollo MDD distingue al menos las
siguientes - etapas
- La construcción de un modelo del dominio,
denominado CIM, que expresa la lógica del negocio
desde una perspectiva independiente de la
computación. - La construcción de un modelo, denominado PIM,
que expresa la funcionalidad del sistema en forma
independiente de las características de
plataformas de implementación específicas. - La transformación de un PIM en uno o más modelos
en una plataforma específica, denominados PSM. - La transformación de modelos PSM a modelos de
implementación, denominados ISM.
4MDD (Model-Driven Development)
CIM
PIM
PSM J2EE
PSM REL
PSM dotNET
CODE
CODE
CODE
5 MDD- Modelos y metamodelos
PIM METAMODEL
PIM MODEL
PSM -.NET METAMODEL
PSM-REL METAMODEL
PSM-J2EE METAMODEL
PSM-J2EE
PSM-REL
PSM-.NET
CODEMETAMODEL
CODE METAMODEL
CODE METAMODEL
CODE
CODE
CODE
6Transformaciones y metamodelos
Metamodelo PIM
PIM
es-instancia-de
Refinamiento PIM-PSM
Refinamiento PIM-PIMmetamodelo
PSM- PSMmetamodelo
Metamodelo PSM
PSM
es-instancia-de
7- Formalización de metamodelos MOF
8Meta Object FacilityMOF
- MOF captura la diversidad de estándares de
- modelamiento para integrar diferentes tipos de
- modelos y metadatos e intercambiarlos entre
- diferentes herramientas.
- UML 2.0 está alineado con MOF, es una
- instancia de MOF. El núcleo de UML y de MOF
- comparten los elementos de metamodelado.
- En UML 2.0 los conceptos de MOF y de UML
- Superstructure derivan de conceptos de UML
- Infrastructure
9MOF
- Las construcciones de modelamiento son un
subconjunto - del núcleo de UML.
- Construcciones de modelamiento
- Clases, que modelan metaobjetos MOF.
- Asociaciones que modelan relaciones binarias
entre metaobjetos. - Tipos de datos, que modelan tipos primitivos
(Integer, String,) - Packages, que modularizan los modelos.
- Especificaciones en OCL
- Lenguaje natural
10Limitaciones de los metamodelos MOF
- En MDDs, los diferentes lenguajes de modelado y
de - programación deben definirse en forma consistente
y - precisa.
- La semántica de MOF está definida mediante
UML/OCL - UML y OCL son imprecisos y ambiguos para
verificación, simulación y validación. - Si bien OCL es un lenguaje textual su contexto
sintáctico está determinado gráficamente - OCL no tiene el sólido background de los
lenguajes formales
11Lenguajes formales versus OCL
- Lenguajes formales
- Sintaxis
- Semántica que describe los modelos asociados a
la especificación - Sistema de inferencia que permite describir
deducciones que pueden hacerse desde la
especificación formal - OCL
- El contexto sintáctico de OCL está determinado
gráficamente. - Semántica (notación matemática en un estilo de
teoría de conjuntos) - No tiene cálculo de pruebas, deducción
automatizada
12Lenguajes formales versus OCL
- OCL
- Análisis sintáctico y de tipos.
- Validación dinámica de invariantes,
precondiciones y postcondiciones generando
instantáneas de un modelo y comparándolas con
el modelo especificado. - Deducciones lógicas
- Síntesis y verificación de código
13Formalización de MOF
- Para lograr un alto grado de automatización en
- herramientas CASE la semántica de MOF debería ser
- precisa
- Automatizar
Formalizar - Formalización de MOF
- Diagramas estáticos UML
- OCL
14Formalización de MOF
- En qué lenguaje?
- Textual y formal.
- Alineado a MOF
- MDD involucra diferentes lenguajes de modelado
- y de programación que deberían estar alineados
- con MOF y definidos en forma precisa y
- consistente.
15Formalización de MOF
- Interoperabilidad entre diferentes lenguajes
- formales
Lenguaje Formal intermedio
MOF
Leng.Formales Leng.Programación
Metamodelos
Transformaciones automáticas
16 17El lenguaje de metamodeladoNEREUS
- NEREUS es un lenguaje para especificar
metamodelos basados en MOF. - NEREUS es un intermediario entre metamodelos MOF
y variedad de lenguajes formales y de
programación. - Las relaciones en NEREUS son entidades de primera
clase.
18El lenguaje de metamodeladoNEREUS
- Construcciones NEREUS
- CLASES
- ASOCIACIONES
- PACKAGES
- Tipos de datos
- Tipos predefinidos OCL Collection, tuple,
enumerated, - Tipos constructores para associations
19NEREUSSINTAXIS
- CLASS className ltparameterListgt
- IMPORTS ltimportsListgt
- INHERITSltinheritsListgt
- IS-SUBTYPE-OF ltsubtypeListgt
- ASSOCIATESltassociatesListgt
- DEFERRED
- TYPES lttypesListgt
- FUNCTIONS ltfunctionListgt
- EFFECTIVE
- TYPES lttypesListgt
- FUNCTIONS ltfunctionListgt
- AXIOMS ltvarListgt
- ltaxiomListgt
- END-CLASS
20NEREUSSintaxis
- CLASS Collection Elem
- IMPORTS Boolean, Nat
- GENERATED-BY create, add
- DEFERRED
- TYPES Collection
- FUNCTIONS
- create ? Collection
- add Collection x Elem ? Collection
- count Collection x Elem ? Nat
- iterate Collection x (Elem x Acc ANY) x ( -gt
Acc ) -gt Acc - EFFECTIVE
- FUNCTIONS
- isEmpty Collection -gtBoolean
- size Collection ? Nat
21NEREUSSintaxis
- EFFECTIVE
- FUNCTIONS
- isEmpty Collection -gtBoolean
- size Collection ? Nat
- includes Collection x Elem -gtBoolean
- includesAll Collection x Collection -gtBoolean
- excludes Collection x Elem -gt Boolean
- forAll Collection X (Elem-gtBoolean) -gtBoolean
- exists CollectionX(Elem-gtBoolean) -gtBoolean
- select Collection X (Elem-gtBoolean) -gt
Collection -
22NEREUSSintaxis
- AXIOMS c Collection e Elem f Elem-gtBoolean
- g Elem x Acc-gt Acc base -gt Acc
- isEmpty ( c ) (size (c ) 0 )
- iterate (create, g, base ) base
- iterate (add (c, e), g, base)
- g (e, iterate (c, g, base))
- count (c,e) LET
- FUNCTIONS
- f1 Elem x Nat -gtNat
- AXIOMS e1Elem iNat
- f1(e1, i) if e e1 then
i1 else i - IN iterate (c, f1, 0)
- END-LET
23NEREUSSintaxis
- AXIOMS c Collection e Elem f Elem-gtBoolean
- g Elem x Acc-gt Acc base -gt Acc
-
- includes (create , e ) False
- includes (add (c, e), e1)
- if e e1 then True else includes (c, e1)
- forAll (create , f ) True
- forAll (add(c,e), f ) f (e) and forAll (c, f)
- exists (create, f ) False
- exists (add (c, e)) f (e) or exists (c, f )
- select (create, f) create
- select (add (c,e), f) if f(e) then add
(select(c,f ),e) - else select (c, f)
- END-CLASS
24NEREUSSintaxis
- AXIOMS c Collection e Elem f Elem-gtBoolean
- g Elem x Acc-gt Acc base -gt Acc
-
- includes (create , e ) False
- includes (add (c, e), e1)
- if e e1 then True else includes (c, e1)
- forAll (create , f ) True
- forAll (add(c,e), f ) f (e) and forAll (c, f)
- exists (create, f ) False
- exists (add (c, e)) f (e) or exists (c, f )
- select (create, f) create
- select (add (c,e), f) if f(e) then add
(select(c,f ),e) - else select (c, f)
- END-CLASS
25NEREUS La jerarquía Association
Association
Binary Association
...
Aggregation
Non-Shared
Bidirectional
Unidirectional
Shared
1..1
..
26NEREUS Especificación de asociaciones
- ASSOCIATION ltrelationNamegt
- IS ltconstructorTypeNamegt...Class1...Class2
- ...Role1...Role2 ... mult1 ... mult2
...visibility1 ...visibility2 - CONSTRAINED BY ltconstraintListgt
- END
27Especificación de asociacionesEjemplo
- CLASS C_Package
- ASSOCIATES ltltClass_Packagegtgt,...
nestedpackages 0..1
0.. 0..
Class
Interface
source
Package
1
owner
nameString
nameString
1
other End
1 target
owner 1
1
Parents
Association
End
Association
nameString
associationEnd
2
upperbound Int
nameString
association
lowerbound Int
1
28NEREUS Especificación de asociaciones
- CLASS C_Package
- ASSOCIATES ltltClass_Packagegtgt,...
- ASSOCIATION Class_Package
- IS Bidirectional-1 C_Class class1 C_Package
class2 - class role1 owner role2 mult1 1 mult2
visibility1 - v isibility2
- CONSTRAINED BY
- END
29NEREUS Package
- PACKAGE packageName
- IMPORTS lt importListgt
- INHERITS lt inheritListgt
- ltelementsgt
- END-PACKAGE
30NEREUSPackage Core
- PACKAGE Core
- CLASS C_Class
- ASSOCIATESltltA_parentsgtgt, ltltClass_Packagegtgt,
- ltltA-allParentsgtgt, ltltA_sourcegtgt, ltltA_targetgtgt,
- FUNCTIONS
- name C_Class -gt String
- END-CLASS
- CLASS C_Package
- ASSOCIATESltltAssociation_Packagegtgt,ltltClass_Packagegt
gt, - ltltA_allNestedgt,ltltA_ownerPackgtgt
- FUNCTIONS
- name C_Package -gt String
- END-CLASS
31NEREUSPackage Core
- CLASS C_Association
- CLASS C_AssociationEnd
- CLASS Interface
- ASSOCIATION A_parents
- IS Unidirectional-2C_Classclass1
C_Classclass2 classrole1 parentsrole2
1mult1 mult2 visibility1 visibility2 - END
- ASSOCIATION A_target
- ASSOCIATION Class_Package
- IS Bidirectional-1 C_Class class1
C_Packageclass2 class - role1 ownerrole2 mult1 1mult2
- visibility1visibility2
- END-PACKAGE
32NEREUSPackage Core
- CLASS C_Association
- CLASS C_AssociationEnd
- CLASS Interface
- ASSOCIATION A_parents
- IS Unidirectional-2C_Classclass1
C_Classclass2 classrole1 parentsrole2
1mult1 mult2 visibility1 visibility2 - END
- ASSOCIATION A_target
- ASSOCIATION Class_Package
- IS Bidirectional-1 C_Class class1
C_Packageclass2 class - role1 ownerrole2 mult1 1mult2
- visibility1visibility2
- END-PACKAGE
33Nereus, el lenguaje intermedio
Leng.Formales Leng.Programación
Metamodelos
NEREUS
MOF
34Ejemplo Package PersonMeeting
PM
Meeting titleString startStrin
g endString isConfirmedBoolean duration()
Time checkDate () Bool cancel() numConfirmedParti
cipants()Nat
Person nameString AffiliationSt
ring AddressString numMeetingNat numConfirmedMe
eting ()Nat
Participates 2..
participants
meetings
Hussmann, H. et al. Abstract Data Types and UML,
Report DISI-TR-99-15
35OCL Specifications PersonMeeting
- context Person numMeeting ( ) Nat
- post result self.meetings -gt size
- context Meeting isConfirmed () Bool
- post result self.checkDate() and
- self.numConfirmedParticipan
ts gt 2 - context Meeting checkDate()Bool
- post result self.participants-gtcollect(meetings
) -gt - forAll(m mltgt self and
m.isConfirmed implies
(after(self.end,m.start) or after(m.end,self.start
))) - context Person numMeetingConfirmed ( ) Nat
- post result self.meetings -gt select
(isConfirmed) -gt size - context Meeting duration ( ) Time
- post result timeDifference (self.end,
self.start)
36PM en NEREUS
- PACKAGE PM
- CLASS Person
- IMPORTS String, Nat
- ASSOCIATES ltltParticipatesgtgt
- GENERATED-BY Create_Person
- EFFECTIVE
- TYPE Person
- FUNCTIONS
- createPerson
- String x String x String -gt Person
- name Person -gt String
- affiliation Person -gt String
- address Person -gt String
- set-name Person x String -gt Person
- set-affiliation
- Person x String -gt Person
- set-address Person x String -gt Person
AXIOMS pPerson m Meeting s, s1, s2, s3
String pa Participates name(createPerson(s1,s2,
s3)) s1 affiliation (createPerson (s1, s2, s3)
) s2 address (createPerson (s1, s2, s3))
s3 set-name ( createPerson (s1, s2, s3), s)
createPerson (s,s2,s3)) set-affiliation
(createPerson( s1,s2, s3), s) createPerson (s1,
s, s3)) numConfirmedMeetings (p)
size(selectm getMeetings(Participates,p),
isConfirmed (m))
numMeetings (p) size (getMeetings
(Participates, p)) END-CLASS
37PM en NEREUS
- CLASS Meeting
- IMPORTS String, Date, Boolean, Time
- ASSOCIATES ltltParticipatesgtgt
- EFFECTIVE
- TYPE Meeting
- GENERATED-BY createMeeting
- FUNCTIONS
- createMeeting
- String x Date x Date x Boolean- gtMeeting
- tittle Meeting -gt String
- start Meeting -gt Date
- end Meeting -gt Date
- isConfirmed Meeting -gt Boolean
- set-tittle Meeting x String -gt Meeting
- set-start Meeting x Date -gt Meeting
- set-end Meeting x Date -gt Meeting
- set-isConfirmed
- Meeting x Boolean -gt Boolean
AXIOMS s String d, d1, Date b
Boolean title( createMeeting (s, d, d1, b) )
s start ( createMeeting (s, d, d1, b)) d end (
createMeeting (s, d, d1, b)) d1 isConfirmed(crea
teMeeting(s,d,d1,b)) b ... END-CLASS ASSOCIATIO
N Participates IS Bidirectional-Set Person
Class1 Meeting Class2 participants Role1
meetings Role2 Mult1 Mult2
Visibility1 Visibility2 END END-PACKAGE
38Ejemplo PMAsociación Bidirectional-Set
- RELATION SCHEME Bidirectional-Set
- INHERITS BinaryAssociation Class1 -gtPerson,
Class2-gtMeeting - IMPORTS Set_Person Set Person, Set_Meeting
SetMeeting - EFFECTIVE
- FUNCTIONS name, frozen , changeable , addOnly
, getRole1, getRole2, getMult1, getMult2,
getVisibility1, getVisibility2, isRelated,
isEmpty, rightCardinality, leftCardinality - create Typename-gtParticipates
- addLinkParticipates(b) x Person(p) x
Meeting(m)-gt Participates - pre not isRelated(a,p,m)
- isRightLinked Participates x Person -gt Boolean
- isLeftLinked Participates x Meeting -gt Boolean
- getMeetings Participates(a) x Person(p) -gt
Set_Meeting - pre isRightLinked(a,p)
- getParticipants Participates(a) x Meeting(m)-gt
Set_Person - pre isLeftLinked(a,m)
- remove Participates (a) x Person (p) x Meeting
(m) -gt Participates - pre isRelated(a,p,m)
39Ejemplo PMAsociación Bidirectional-Set
- AXIOMS aParticipates p,p1 Person
m,m1Meeting tTypeName - name(create(t)) t
name(add(a,p,m)) name(a) - isEmpty (create(t)) True isEmpty(addLink(a,p
,m)) False - frozen (a) False
- changeable (a) True
- addOnly (a) False
- getRole1(a) participants
- getRole2 (a) meetings
- getMult1(a)
- getMult2(a)
- getVisibility1(a)
- getVisibility2(a)
40Ejemplo PMAsociación Bidirectional-Set
- isRelated (create(t),p,m) False
- isRelated(addLink(a,p,m),p1,m1)
- (pp1 and mm1) or isRelated (a,p1,m1)
- isRightLinked (create(t),p) False
- isRightLinked (addLink (a,p,m),p1)
- if pp1 then True else isRightLinked(a,p1)
- rightCardinality(create(t),p) 0
- rightCardinality(addLink(a,p,m),p1)
- if pp1 then 1 rightCardinality(a,p1)else
rightCardinality(a,p1) - getMeetings(addLink(a,p,m),p1) if pp1
- then including (getMeetings(a,p1), m)else
getMeetings(a,p1) - getParticipants (addLink (a,p,m),m1) if mm1
- then including (getParticipants(a,m1) , m) else
getParticipants(a,m1) - END-RELATION
41- Traducción de metamodelos MOF
42Formalizando modelos estáticos UML.Traducción de
Packages
43Formalizando modelos estáticos UML. El esquema BOX
- CLASS Name
- IMPORTS TP1,..., TPm, T-attr1, T-attr2,...,
Tattrn - INHERITS B1,B2,..., Bm
- ASSOCIATES
- ltltAggregation-E1gtgt,...,ltltAggregation-Emgtgt,
- ltlt Composition-C1gtgt,...,ltltComposition-Ckgtgt,
- ltlt Association-D1gtgt,...,ltltAssociation-Dkgtgt
- EFFECTIVE
- TYPE Name
- FUNCTIONS
- createName T-attr1 x ... x T-attrn -gt Name
- seti Name x T-attri -gt Name
- geti Name -gt T-attri 1ltiltn
44Formalizando modelos estáticos UML. El esquema BOX
- DEFERRED
- FUNCTIONS
- meth1 Name x TPi1 x TPi2 x TPin -gt TPij
- ...
- methr Name x TPr1 x TPr2 ... x TPin -gt TPij
- AXIOMS t1,t1 T-attr1 t2,t2T-attr2...
tn,tnT-attrn - geti(create(t1,t2,...,tn)) ti 1 ? i ?
n - seti (create (t1,t2,...,tn), ti) create
(t1,t2,...ti,...,tn) - END-CLASS
45Formalizando modelos estáticos UML. El esquema
Association
- ASSOCIATION ___
- IS __ __ Class1 __Class2 __ Role1__Role2
- __Mult1 __Mult2 __Visibility1
__Visibility2 - CONSTRAINED BY __
- END
46Un puente entre UML/OCL y NEREUS
- Un sistema de reglas de transformación
- para traducir
- Tipos OCL predefinidos
- Expresiones básicas OCL
- Precondiciones
- Postcondiciones
- Invariantes
- Constraints de asociaciones
47Reglas OCL/NEREUS
OCL
NEREUS
v. operation(v) v-gtoperation (v)
operation (v,v) v.attribute
attribute (v ) context A object.rolename
getRolename (A, object) e.op
op
(Translate NEREUS (e)) collection-gt op (vElem
b-expr-with-v) op select forAll reject
exists LET FUNCTIONS
f Elem -gtBoolean
AXIOMS v Elem
f(v) TranslateNEREUS (b-expr-with-v
) IN op (collection, f) END-LET ----
------------------------------------------
opv(collection,f(v)) concise notation T ? Op
(?parameterList?)ReturnType post expr
AXIOMS t T, ...
TranslateNEREUS
(exp)
48Reglas OCL/NEREUS
49Reglas OCL/NEREUS
50Reglas OCL/NEREUS
51Reglas OCL/NEREUS
52Reglas OCL/NEREUS
53Reglas OCL/NEREUS
54Desde OCL a NEREUS Traducción de una
postcondición
- context Person numMeetingConfirmed ( ) Nat
OCL - post result self.meetings -gt select
(isConfirmed) -gt size - T ? Op (?parameterList?)
ReturnType - post result expr
-
- AXIOMS tT, ...
- Op (t, ?parameterList?)
TranslateNEREUS (expr) - T-gt select (v Type
boolean-expr-with-v) - selectv (TranslateNEREUS
(T), TranslateNEREUS (boolean-expr-with-v) -
-
NEREUS - AXIOMS pPerson mMeetingPaParticipates
- numMeetingsConfirmed (p)
- size(selectm (getMeetings(Pa,p), isConfirmed m)
RULE 1
RULE 2
RULES 1,2,..
55Traducción de PM a NEREUS
56Traducción de PM a NEREUS
- Generar una especificación parcial de Person y
Meeting a partir de la instanciación de BOX. - Generar una especificación de Participates
instanciando el esquema Association. - Transformar especificaciones OCL a partir del
sistema de transformaciones. - Generar el Package PM que incluye a las clases
Person y Meeting y una asociación, Participates.
57Traducción de PM a NEREUSLa clase Person
- CLASS Person
- IMPORTS String, Nat
- ASSOCIATES ltltParticipatesgtgt
- GENERATED-BY create_Person
- DEFERRED
- TYPES Person
- FUNCTIONS create_Person String x _-gt Person
- EFFECTIVE
- FUNCTIONS name Person -gt String
- numMeetings Person -gt Nat
numConfirmedMeeting Person -gt Nat - set-name Person x String -gt Person
- set-numMeetings Person x Nat -gt Person
- set-numConfirmedMeeting Person x Nat -gt Person
- AXIOMS pPerson mMeeting s,s String
- name(create_Person(s)) s
- set-name(create_Person(s), s) create_Person
(s) - END-CLASS
PASO 1
58Traducción de PM a NEREUSLa clase Meeting
- CLASS Meeting
- IMPORTS String, Date, Boolean, Time
- ASSOCIATES ltltParticipatesgtgt
- GENERATED-BY create_Meeting
- DEFERRED
- TYPES Meeting
- FUNCTIONS create_Meeting String x Date x Date
x Boolean -gt Meeting - EFFECTIVE
- isConfirmed Meeting -gt Boolean
- AXIOMS s, sString d, d, d1, d1Date b,
bBoolean - title (create_Meeting (s,d,d1,b)) s
- start (create_Meeting (s,d,d1,b)) d
- end (create_Meeting (s,d,d1,b)) d1
- set-tittle (create_Meeting (s,d,d1,b),s)
create_Meeting (s,d,d1,b) - set-start(create_Meeting (s,d,d1,b),d)
create_Meeting (s,d,d1,b) - set-end(create_Meeting (s,d,d1,b),d1)
create_Meeting (s,d,d1,b) - END-CLASS
59Traducción de PM a NEREUSLa asociación
Participates
- ASSOCIATION Participates
- IS Bidirectional-Set Person Class1
- Meeting Class2 participants Role1
- meetingsRole2 Mult1 Mult2
Visibility1 - Visibility2
- END
- RELATION SCHEME Bidirectional-Set --
- Bidirectional / to / as Set
- IS-SUBTYPE-OF
- BinaryAssociation PersonClass1
MeetingClass2
60Traducción de PM a NEREUSLa clase Person
- CLASS Person
- IMPORTS String, Nat
- ASSOCIATES ltltParticipatesgtgt
- GENERATED-BY create_Person
- ...
- AXIOMS p Person s, s String Pa
Participates - name (create_Person(s)) s
- set-name (create_Person(s), s)
create_Person(s) - numConfirmedMeetings (p)
- size(selectm (getMeetings(Pa,p), isConfirmed
(m) ) Reglas 10,15 - numMeetings (p) size (getMeetings (Pa, p))
Reglas 10 - END-CLASS
PASO 3
61 Traducción de PM a NEREUSLa clase Meeting
- CLASS Meeting
- AXIOMS m,m1Meeting s,sString
d,d,d1,d1Date PaParticipates - title (create_Meeting(s,d,d1,b)) s
- start (create_Meeting(s,d,d1,b)) d
- end (create_Meeting(s,d,d1,b)) d1
- set-tittle (create_Meeting(s,d,d1,b),s)
create_Meeting(s,d,d1,b) - set-start(create_Meeting(s,d,d1,b),d)
create_Meeting(s,d,d1,b) - set-end(create_Meeting(s,d,d1,b),d1)
create_Meeting(s,d,d1,b) - duration (m) timeDifference (end(m),start(m))
Regla 10 - isConfirmed (cancel(m)) False
- isConfirmed (m)checkDate(m) and
NumConfirmedParticipants (m) gt 2 - checkDate(m) forAllme(collectp(getParticipants(P
a,m), -
getMeetings (Pa, p)), consistent(m,me) )
- consistent(m,m1) not (isConfirmed(m1))
Reglas 10,15,16 - or (end(m)ltstart(m1) or end(m1)ltstart(m))
- NumConfirmedParticipants (m) size
(getParticipants(Pa,m)) - END-CLASS
62- Traducción de NEREUS a LOO
63Desde NEREUS a EIFFEL
64Traducción de clases
- CLASS Name ltparameterListgt clase
Eiffel - IMPORTS ltimportsListgt
relación cliente
- IS-SUBTYPE-OF ltsubtypeListgt
- INHERITS ltinheritsListgt
herencia - DEFERRED
- TYPES ltsortListgt
- FUNCTIONS ltfunctionListgt
feature diferidos
precondiciones -
- EFFECTIVE
- TYPES ltsortListgt
- FUNCTIONS ltfunctionListgt
feature efectivo -
precondiciones - AXIOMS ltvarListgt ltaxiomsListgt
postcondiciones
invariantes - END-CLASS
65Generación de contratos EIFFEL
- Transformación de precondiciones
- Transformación de axiomas
-
- Heurística para generar invariantes
- Heurística para generar postcondiciones
- Heurística para generar implementaciones
66Construcción de invariantes
- Heurística
- Identificar correspondencias entre los términos
- de un axioma y los features de una clase que
sólo - dependan del estado actual del objeto.
- Un axioma puede traducirse a un invariante si
- los únicos subtérminos del tipo de interés que
- existen son variables.
67Construcción de invariantesUn ejemplo
- CLASS BSTACK ? G ?
- ....
- EFFECTIVE
- TYPES BSTACK
- FUNCTIONS
- capacityBSTACK? Integer
- count BSTACK? Integer
- full BSTACK? Boolean
- emptyBSTACK ? Boolean
- ......
- AXIOMS s BSTACK s G
- full(s) ? (capacity(s) count(s) )
- empty(s)? (count(s)o)
- END-CLASS
- class BSTACK?G?
- .....
- capacityINTEGER ....
- countINTEGER...
- fullBOOLEAN...
- emptyBOOLEAN...
- invariant
- full (countcapacity)
- empty (count 0)
- .....
- end
68Construcción de postcondiciones
- Heurística
- Identificar en un axioma un término
- op(ltlista-de-variablesgt) donde op es el nombre de
una operación y ltlista-devariablesgt contiene una
variable del tipo de interés y todos los
restantes términos dependen solamente de
constantes o las restantes variables de
ltlista-de-variablesgt - Si op(ltlista-de-variablesgt) es un término del
tipo de interés se lo asocia a Current y la
variable del tipo de interés a old - Si op(ltlista-de-variablesgt) no es un término del
tipo de interés se lo asocia a Result
69Construcción de postcondicionesUn ejemplo
- CLASS SET?G?
- ...
- EFFECTIVE
- TYPES SET
- FUNCTIONS
- has SET x G ? BOOLEAN
- count SET? INTEGER
- extend SET x G ? SET
- empty SET ? BOOLEAN
- AXIOMS sSET vG
- has(s,v)?not empty(s)
- count(extend(s,v))
- if has(s,v) then count(s)
- else plus(count(s) ,1)
- END-CLASS
- class SET?G?
- ....
- emptyBOOLEAN
-
- has(vG)BOOLEAN
- .......
- ensure
- Result implies not empty
- ......
- extend( v G)
- ..................
- ensure
- old has(v) implies countold count
- not old has(v)
- Implies (countold count 1)
70Traducción de asociacionesEl componente
Association
71Traducción de asociacionesPM
72Traducción de asociacionesPM
73Traducción de asociacionesPM
74Traducción de asociacionesPM
75Traducción de asociacionesPM
76- Traducción de NEREUS
- a Lenguajes Formales
77Desde NEREUS a lenguajes formales
- Se seleccionó como lenguaje formal a CASL (Common
- Algebraic Specification Language)
- Lenguaje de especificación algebraica de
propósito - general
- Tiene una definición semántica sólida
- Es soportado por herramientas
- Facilita interoperabilidad con otros prototipos y
herramientas formales
78Traducción de NEREUS a CASL
- Clases
- Relaciones
- Herencia
- Cliente
- Funciones
- Higher-order
- Visibilidad
- Asociaciones
- Packages
79Traducción de asociaciones NEREUS/ CASL
- Paso 1 Reagrupar las operaciones de las clases A
y B distinguiendo operaciones locales a A y a B y
locales a A, B y Assoc.
A
B
Assoc
LOCAL
OPERACIONES
/ATRIBUTOS Person name Meeting
tittle, start, end, duration Person, Meeting,
Participates cancel,isConfirmed,
numConfirmedMeetings, checkDate,
numMeetings
80Traducción de asociaciones NEREUS/ CASL
Paso 2 Construir las especificaciones C y D a
partir de A y B donde C y D
incluyen operaciones locales a A y B
respectivamente
- spec PERSON given STRING, NAT
- then generated type Person create-Person
(String) - ops
- name Person -gt String
- setName Person x String -gt Name
- end
- spec MEETING given STRING, DATE
- then
- generated type Meeting create-Meeting (
String Date Date) - Ops
- tittle Meeting -gt String
- set-title Meeting x String -gt Meeting
- start Meeting -gt Date
- set-start Meeting x Date -gt Meeting
- isEnd Meeting -gt Date
- set-end Meeting x Date -gt Meeting
- end
81Traducción de asociacionesNEREUS/CASL
Paso 3 Construir las especificaciones
CollectionC y Collection D a partir de
esquemas reusables
- spec SET-PERSON given NAT PERSON and
BAGPERSON and - then
- generated type SetPerson create
including (SetPerson Person) - ops
- union SetPerson x SetPerson -gt Set Person
- intersection SetPerson x SetPerson -gt Set
Person - count SetPerson x Person -gt Nat
-
- spec SET-MEETING given NAT MEETING and
BAGMEETING and - then
- generated type Set Meeting create
including (SetMeeting Meeting) -
82Traducción de asociacionesNEREUS/CASL
Paso 4 Construir una especificación Assoc
(con CollectionC y
CollectionD) instanciando esquemas reusables en
el
componente Association
- spec PARTICIPATES SET-PERSON and SET-MEETING
and - BINARY-ASSOCIATION PERSONMEETING with
BinaryAssociation-gt Participates - pred
- isRightLinked Participates x Person
- isLeftLinked Participates x Meeting
- isRelated Participates x Person x Meeting
- ops
- addLink Participates x Person x Meeting -gt
Participates - getParticipants Participates x Meeting -gt Set
Person - getMeetings Participates x Person -gt
SetMeeting - remove Participates x Person x Meeting -gt
Participates - a Participates p,p1 Person m,m1 Meeting
- def addLink (a,p,m) ? not isRelated (a,p,m)
- def getParticipants (a, m) ? isLeftLinked (a,m)
- def getMeetings (a, m) ? isRightLinked ( a, m)
- def remove (a,p,m) ? isRelated (a, p, m)
- end
83Traducción de asociaciones NEREUS/CASL
Paso 5 Construir la especificación AssocAB
extendiendo Assoc
con C, D y las
operaciones locales a C, D y Assoc.
- spec PERSONMEETING PARTICIPATES
- then
- ops
- numMeeting Participates x Person -gt Nat
- numConfirmedMeeting Participates x Person -gt
Nat - isConfirmed Participates x Meeting -gt Boolean
- numConfirmedParticipants Participates x Meeting
-gt Nat - checkDate Participates x Meeting -gt Participates
- select Participates x SetMeeting -gt
SetMeeting - collect Participates x SetPerson -gt
BagMeeting - pred
- forall Participates x SetMeeting x Meeting
84Traducción de asociacionesNEREUS/CASL
Paso 5
- ?s SetMeeting mMeeting paParticipates
pPerson mMeeting - spSetPerson bm BagMeeting
- forall (pa, including(s,m),m1)
isConsistent(m,m1) and - forall(pa, s, m1)
- select(pa, create-Meeting) create-Meeting
- select (pa, including (s,m))
including(select(s,pa),m) -
when isConfirmed (pa, m)
else
select (s,pa) - collect (pa, create-Person,s) asBag
(create-Person) - collect (pa, including (sp, p) ) asBag
(including (collect (pa,sp), p)) - numMeeting( pa, p) size (getMeetings(pa, p))
- isConfirmed (pa, m)checkDate (pa,m) and
NumConfirmedParticipants(pa,m) gt2 - numConfirmedMeeting (pa, p) size (select
(getMeetings (pa,p)) - checkDate (pa, m) forall (pa, collect
(getParticipants(pa,m), m) - isConsistent (pa, m, m1) not (isConfirmed
(pa,m1)) or (end(m) lt start (m1) or - end (m1) lt start(m))
- numParticipantsConfirmed (pa, m) size(
getParticipants (pa, m)) - end
85Traducción de asociacionesNEREUS/CASL
numMeetings numConfirmedMeetings isConfirmed check
Date cancel
forAll select collect
PersonMeeting
getMeetings getParticipates
Participates
SetPerson
SetMeeting
tittle start end duration
Person
name
Meeting
86- Especificando transformaciones
- en NEREUS
87Un Megamodelode componentes para MDA
88 Megacomponentes El patrón Observer
megacomponente instancia del megamodelo
89Un esquema de transformaciónpara refinamientos
90Formalización de refinamientos
CLASS PimUmlToPsmEiffel ObserverMetamodel
source
ObserverMetamodelEiffel target ...
FUNCTIONS create -gt PimUmlToPsmEiffel addLink
PimUmlToPsmEiffel (t) x ObserverMetamodel (m1) x
ObserverMetamodelEiffel (m2) -gt
PimUmlToPsmEiffel pre isEmpty(get_importedEl
ements(ElementImport-PackageableElement, m1)
isRelated PimUmlToPsmEiffel x
ObserverMetamodel x ObserverMetamodelEiffel -gt
Boolean ... AXIOMS t PimUmlToPsmEiffel, m1
ObserverMetamodel , m2 ObserverMetamodelEiffel
isRelated(t,m1,m2) implies size( select
s(get_ownedElement(Element-Element,m1),
oclIsTypeOf(Class,s) or oclIsTypeOf(Interface,
s) ) size(select e (get_ownedElement(Element-El
ement,m2), oclIsTypeOf(EiffelClass,e))
and forAll
sourceClass(select source (get_ownedElement(Elemen
t-Element,m1), exists targetClass (select
tc (get_ownedElement(Element-Element), m2),
oclIsTypeOf(EiffelClass, tc)),
name(sourceClass) name(targetClass) and
... END-CLASS
91Resumen
Lenguaje NEREUS
MOF
Leng.Formales Leng.Programación
Metamodelos
Transformaciones automáticas
92Resumen
- NEREUS provee las ventajas de un lenguaje
intermedio - Es textual, alineado con MOF
- Metamodelos
- Gramáticas
- Interoperabilidad a nivel de lenguajes
- Semántica más precisa de UML 2.0 y OCL 2.0
- Traducciones constructivas que permiten
automatización