Arquitectura de software dirigida por modelos (Model-Driven Architecture) - PowerPoint PPT Presentation

1 / 92
About This Presentation
Title:

Arquitectura de software dirigida por modelos (Model-Driven Architecture)

Description:

La construcci n de un modelo del dominio, denominado CIM, ... Tipos predefinidos: OCL Collection, tuple, enumerated,... Tipos constructores para associations ... – PowerPoint PPT presentation

Number of Views:53
Avg rating:3.0/5.0
Slides: 93
Provided by: USUA616
Category:

less

Transcript and Presenter's Notes

Title: Arquitectura de software dirigida por modelos (Model-Driven Architecture)


1
Arquitectura de software dirigida por
modelos(Model-Driven Architecture)
  • Liliana Favre
  • UNCPBA
  • 2006

2
  • Model-Driven Development
  • MDD

3
Model-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.

4
MDD (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
6
Transformaciones 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

8
Meta 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

9
MOF
  • 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

10
Limitaciones 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

11
Lenguajes 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

12
Lenguajes 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

13
Formalizació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

14
Formalizació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.

15
Formalización de MOF
  • Interoperabilidad entre diferentes lenguajes
  • formales

Lenguaje Formal intermedio
MOF
Leng.Formales Leng.Programación
Metamodelos
Transformaciones automáticas
16
  • El lenguaje NEREUS

17
El 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.

18
El lenguaje de metamodeladoNEREUS
  • Construcciones NEREUS
  • CLASES
  • ASOCIACIONES
  • PACKAGES
  • Tipos de datos
  • Tipos predefinidos OCL Collection, tuple,
    enumerated,
  • Tipos constructores para associations

19
NEREUSSINTAXIS
  • 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

20
NEREUSSintaxis
  • 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

21
NEREUSSintaxis
  • 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

22
NEREUSSintaxis
  • 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

23
NEREUSSintaxis
  • 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

24
NEREUSSintaxis
  • 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

25
NEREUS La jerarquía Association
Association
Binary Association
...
Aggregation
Non-Shared
Bidirectional
Unidirectional
Shared
1..1
..
26
NEREUS Especificación de asociaciones
  • ASSOCIATION ltrelationNamegt
  • IS ltconstructorTypeNamegt...Class1...Class2
  • ...Role1...Role2 ... mult1 ... mult2
    ...visibility1 ...visibility2
  • CONSTRAINED BY ltconstraintListgt
  • END

27
Especificació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


28
NEREUS 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

29
NEREUS Package
  • PACKAGE packageName
  • IMPORTS lt importListgt
  • INHERITS lt inheritListgt
  • ltelementsgt
  • END-PACKAGE

30
NEREUSPackage 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

31
NEREUSPackage 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

32
NEREUSPackage 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

33
Nereus, el lenguaje intermedio
Leng.Formales Leng.Programación
Metamodelos
NEREUS
MOF
34
Ejemplo 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
35
OCL 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)

36
PM 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
37
PM 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
38
Ejemplo 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)

39
Ejemplo 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)

40
Ejemplo 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

42
Formalizando modelos estáticos UML.Traducción de
Packages
43
Formalizando 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

44
Formalizando 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

45
Formalizando modelos estáticos UML. El esquema
Association
  • ASSOCIATION ___
  • IS __ __ Class1 __Class2 __ Role1__Role2
  • __Mult1 __Mult2 __Visibility1
    __Visibility2
  • CONSTRAINED BY __
  • END

46
Un 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

47
Reglas 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)
48
Reglas OCL/NEREUS
49
Reglas OCL/NEREUS
50
Reglas OCL/NEREUS
51
Reglas OCL/NEREUS
52
Reglas OCL/NEREUS
53
Reglas OCL/NEREUS
54
Desde 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,..
55
Traducción de PM a NEREUS
56
Traducción de PM a NEREUS
  1. Generar una especificación parcial de Person y
    Meeting a partir de la instanciación de BOX.
  2. Generar una especificación de Participates
    instanciando el esquema Association.
  3. Transformar especificaciones OCL a partir del
    sistema de transformaciones.
  4. Generar el Package PM que incluye a las clases
    Person y Meeting y una asociación, Participates.

57
Traducció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
58
Traducció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

59
Traducció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

60
Traducció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

63
Desde NEREUS a EIFFEL
64
Traducció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

65
Generació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

66
Construcció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.

67
Construcció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

68
Construcció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

69
Construcció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)

70
Traducción de asociacionesEl componente
Association
71
Traducción de asociacionesPM
72
Traducción de asociacionesPM
73
Traducción de asociacionesPM
74
Traducción de asociacionesPM
75
Traducción de asociacionesPM
76
  • Traducción de NEREUS
  • a Lenguajes Formales

77
Desde 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

78
Traducción de NEREUS a CASL
  • Clases
  • Relaciones
  • Herencia
  • Cliente
  • Funciones
  • Higher-order
  • Visibilidad
  • Asociaciones
  • Packages

79
Traducció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
80
Traducció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

81
Traducció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)

82
Traducció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

83
Traducció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

84
Traducció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

85
Traducció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

87
Un Megamodelode componentes para MDA


88
Megacomponentes El patrón Observer
megacomponente instancia del megamodelo

89
Un esquema de transformaciónpara refinamientos
90
Formalizació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
91
Resumen
Lenguaje NEREUS
MOF
Leng.Formales Leng.Programación
Metamodelos
Transformaciones automáticas
92
Resumen
  • 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
Write a Comment
User Comments (0)
About PowerShow.com