patrones de diseño en mda. patrones de diseño “descripciones de objetos que se comunican y...

39
Patrones de Patrones de Diseño Diseño en MDA en MDA

Upload: montserrat-luna-salazar

Post on 23-Jan-2016

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Patrones de Patrones de Diseño Diseño en MDAen MDA

Page 2: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Patrones de DiseñoPatrones de Diseño

““descripciones de objetos que se descripciones de objetos que se comunican y clases que son comunican y clases que son personalizadas para resolver un personalizadas para resolver un problema de diseño general en problema de diseño general en un contexto particular”un contexto particular” (Gamma y (Gamma y otros, 1995) otros, 1995)

Page 3: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Patrones de DiseñoPatrones de Diseño

Los patrones de diseño describen Los patrones de diseño describen soluciones a problemas de diseño soluciones a problemas de diseño recurrentes.recurrentes.

Un patrón de diseño nombra, abstrae e Un patrón de diseño nombra, abstrae e identifica los aspectos claves de una identifica los aspectos claves de una estructura de diseño común que lo estructura de diseño común que lo hacen útil para crear un diseño hacen útil para crear un diseño orientado a objetos reusable.orientado a objetos reusable.

Un patrón de diseño identifica las clases Un patrón de diseño identifica las clases que participan y las instancias, sus roles que participan y las instancias, sus roles y colaboraciones, y la distribución de y colaboraciones, y la distribución de responsabilidades. responsabilidades.

Page 4: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metamodelos de Patrones de Metamodelos de Patrones de DiseñoDiseño

El metamodelo de un patrón de El metamodelo de un patrón de diseño dado, describe la familia de diseño dado, describe la familia de modelos que forman el espacio de modelos que forman el espacio de soluciones de ese patrón. soluciones de ese patrón.

Page 5: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metamodelos de Patrones de Metamodelos de Patrones de Diseño en MDADiseño en MDA

Metamodelos en tres niveles:Metamodelos en tres niveles:

PIM:PIM: metamodelos de patrones metamodelos de patrones definidos de manera independiente de definidos de manera independiente de cualquier plataforma o tecnología cualquier plataforma o tecnología específicas. específicas.

PSM:PSM: metamodelos de patrones metamodelos de patrones definidos teniendo en cuenta una definidos teniendo en cuenta una plataforma específica. Por ejemplo plataforma específica. Por ejemplo JAVA, EIFFEL. JAVA, EIFFEL.

ISM:ISM: metamodelos de patrones que metamodelos de patrones que corresponden a un lenguaje de corresponden a un lenguaje de programación específico. programación específico.

Page 6: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metamodelos de Patrones de Metamodelos de Patrones de Diseño en MDADiseño en MDA

Los Metamodelos de Patrones a nivel Los Metamodelos de Patrones a nivel PIM son PIM son

especificados teniendo en cuenta:especificados teniendo en cuenta:

La estructuraLa estructura Los participantesLos participantes ColaboracionesColaboraciones

Page 7: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metamodelos de Patrones de Metamodelos de Patrones de Diseño en MDADiseño en MDA

Metamodelos de Patrones a nivel PSM son Metamodelos de Patrones a nivel PSM son especificados teniendo en cuenta:especificados teniendo en cuenta:

El metamodelo a nivel PIM del patrónEl metamodelo a nivel PIM del patrón Las características de la plataformaLas características de la plataforma. .

Por ejemplo un metamodelo para la Por ejemplo un metamodelo para la plataforma Java restringe la herencia, plataforma Java restringe la herencia, ya que Java no permite herencia ya que Java no permite herencia múltiple, mientras que un metamodelo múltiple, mientras que un metamodelo para la plataforma EIFFEL no tendrá para la plataforma EIFFEL no tendrá esta restricción.esta restricción.

Page 8: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metamodelos de Patrones de Metamodelos de Patrones de Diseño en MDADiseño en MDA

Metamodelos de Patrones a nivel ISM Metamodelos de Patrones a nivel ISM son son

especificados teniendo en cuenta:especificados teniendo en cuenta:

La gramática del lenguaje de La gramática del lenguaje de programación específicoprogramación específico

Page 9: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Especificación de los Especificación de los Metamodelos de Patrones de Metamodelos de Patrones de

DiseñoDiseño

La especificación del espacio de La especificación del espacio de soluciones de un patrón de diseño se soluciones de un patrón de diseño se logra a través de la especialización logra a través de la especialización del metamodelo UML y la del metamodelo UML y la especificación de un conjunto de especificación de un conjunto de restricciones escritas en OCL.restricciones escritas en OCL.

Page 10: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Notación de los Metamodelos Notación de los Metamodelos de Patrones de Diseñode Patrones de Diseño

Para la especificación de los metamodelos de Para la especificación de los metamodelos de los patrones se usa la notación de la los patrones se usa la notación de la especificación de UML de manera semi-formal especificación de UML de manera semi-formal usando la combinación de notación gráfica, usando la combinación de notación gráfica, lenguaje natural y lenguaje formal:lenguaje natural y lenguaje formal:

Sintaxis abstracta:Sintaxis abstracta: diagrama de clases UML diagrama de clases UML (metaclases que definen las construcciones y (metaclases que definen las construcciones y sus relaciones) junto con una descripción en sus relaciones) junto con una descripción en lenguaje natural.lenguaje natural.

Restricciones:Restricciones: son provistas usando el son provistas usando el lenguaje OCL y un lenguaje natural.lenguaje OCL y un lenguaje natural.

Semántica:Semántica: el significado de las el significado de las construcciones es definido usando lenguaje construcciones es definido usando lenguaje natural. natural.

Page 11: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Relaciones entre Modelos y Relaciones entre Modelos y MetamodelosMetamodelos

MMooddeell TTrraannssffoorrmmaattiioonn

IInnssttaannccee ooff

MMeettaammooddeell RReellaattiioonn

UML/OCL PIM

JAVA-CODE EIFFEL-CODE

C# -CODE

C++-CODE

PSM-J2EE PSM-EIFFEL PSM-.NET

Model

PSM

ISM

PIM

ISM

PSM

UML/OCL PSM-J2EE

UML/OCL PSM-EIFFEL

JAVA

UML/OCL PSM-.NET

EIFFEL

C++

PIM

Metamodel

UML/OCL PIM Metamodel

… … …

Page 12: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Ejemplo:Ejemplo:

Patrón de Diseño Patrón de Diseño ObserverObserver

Page 13: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Patrón de Diseño Patrón de Diseño ObserverObserver

El patrón de diseño Observer “define una dependencia uno a muchos entre objetos de manera tal que cuando un objeto cambia de estado, todos sus dependientes son notificados y actualizados automáticamente” (Gamma y otros, 1995).

Page 14: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Patrón Observer : Diagramas de Clases y de Patrón Observer : Diagramas de Clases y de Secuencia UMLSecuencia UML

Observer

update()

Subject

attach(Observer)detach(Observer)notify()

0..*1..*

observers

0..*1..*

ConcreteSubject

subjectState

getState()setState()

ConcreteObserver

observerState

update()

1..*

0..*subject

1..*

0..*

result= subjectState

observerState= subject->getState()

post: observers -> forAll(o:Observer | o->update())

aConcreteObserver : ConcreteObserver

aConcreteSubject : ConcreteSubject

anotherConcreteObserver : ConcreteObserver

setState( )

notify( )

update( )

update( )getState( )

getState( )

a. Class Diagram

b. Sequence Diagram

Page 15: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metamodelo del Metamodelo del Patrón de Diseño Observer Patrón de Diseño Observer

a nivel PIMa nivel PIM

Page 16: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Patrón Observer- Metamodelo PIM : Diagrama Patrón Observer- Metamodelo PIM : Diagrama

de Clasesde Clases

Classifier

Operation

Association

Property

DirectedRelationship

Class

Association

- - - - - - - - - - - - - - - - - {redefines class}

Update

Observer

1..*

1

1..* {subsets ownedOperation}

1{redefines

class}

AssocEndObservers

0..1

1

0..1

+participant 1

RelationshipObserver

11 {redefinestarget}

SubjectObserver 1

1

1

{subsets memberEnd}

+association

1

{redefines association}

ConcreteObserver

1

1

1{subsetsownedElement}

1{redefines source}

AssocEndSubject1

1+association

1

{redefines association}1

{subsets memberEnd}

Attach Detach Notify

AssocEndConcreteObserver

1

1

1

+participant 1

Subject

0..1

1

0..1

+participant1

1..*

1

1..*

1

1..*

1

1..*

1

1..*

1

1..*

1

ObserverSubject1

1

1

{subsets memberEnd}

+association

1

{redefines association}

RelationshipSubject

11{redefines

target}

AssocEndConcreteSubject1

1 +association

1

{redefines association}1

{subsets memberEnd}

GetState

SetState

Property

ConcreteSubject

1

1

1 {subsetsownedElement}

1

{redefinessource}

1

1

1

+participant1

1..*

1

+getState

1..*

{subsets member}

1 1..*1

+setState

1..*

{subsets member}

1

1..*1

+state

1..*

{subsets member}

1

- - - - - - - - - - - - - - - - - - - - - - - - - - -{subset ownedOperation}

Page 17: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Patrón de Diseño ObserverPatrón de Diseño ObserverMetamodelo PIM: Restricciones Metamodelo PIM: Restricciones

Metaclase SubjectMetaclase Subject

Un sujeto, instancia de la metaclase Un sujeto, instancia de la metaclase Subject Subject puede puede

ser una clase o una interfaz. ser una clase o una interfaz.

(self.oclIsTypeOf(Class) (self.oclIsTypeOf(Class) oror self.oclIsTypeOf(Interface)self.oclIsTypeOf(Interface)

Page 18: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Patrón de Diseño Observer Patrón de Diseño Observer Metamodelo PIM : RestriccionesMetamodelo PIM : Restricciones

Metaclase AttachMetaclase Attach

[1] [1] Esta operación cambia el estado del sujetoEsta operación cambia el estado del sujeto..not not self.isQueryself.isQuery

[2] [2] Esta operación tiene un conjunto no vacío Esta operación tiene un conjunto no vacío de parámetros y uno de ellos debe ser de de parámetros y uno de ellos debe ser de entrada (direction= #in) y del tipo Observer.entrada (direction= #in) y del tipo Observer.

self.parameter->notEmpty( ) self.parameter->notEmpty( ) andand

self.parameter->select ( param | param.direction= self.parameter->select ( param | param.direction= #in #in andand

param.type= oclIsKindOf(Observer)) -> size( ) = 1param.type= oclIsKindOf(Observer)) -> size( ) = 1

Page 19: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Patrón de Diseño Observer Patrón de Diseño Observer Metamodelo PIM : RestricionesMetamodelo PIM : Restriciones

Metaclase RelationshipSubjectMetaclase RelationshipSubjectUna instancia de esta relación está restringida a ser una Una instancia de esta relación está restringida a ser una

generalización o una realización de interfaz. generalización o una realización de interfaz.

self.oclIsTypeOf( Generalization) self.oclIsTypeOf( Generalization) oror (self.oclIsTypeOf(InterfaceRealization))(self.oclIsTypeOf(InterfaceRealization))

and and

self.oclIsTypeOf(Generalization) self.oclIsTypeOf(Generalization) impliesimplies ( (self.general.oclIsKindOf(Class) self.general.oclIsKindOf(Class)

andand self.general.oclIsTypeOf(Subject) self.general.oclIsTypeOf(Subject)

andand self.specific.oclIsTypeOf(ConcreteSubject) ) self.specific.oclIsTypeOf(ConcreteSubject) )

andand

self.oclIsTypeOf(InterfaceRealization) self.oclIsTypeOf(InterfaceRealization) implies implies ( ( self.contract.oclIsKindOf(Interface) self.contract.oclIsKindOf(Interface) andand

self.contract.oclIsTypeOf(Subject) self.contract.oclIsTypeOf(Subject)

andand self.implementingClassifier.oclIsTypeOf(ConcreteSubject)) self.implementingClassifier.oclIsTypeOf(ConcreteSubject))

Page 20: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metamodelo del Metamodelo del Patrón de Diseño Observer Patrón de Diseño Observer

a nivel PSM Eiffel a nivel PSM Eiffel

Page 21: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

El Metamodelo del patrón Observer El Metamodelo del patrón Observer a nivel PSM Eiffel es una a nivel PSM Eiffel es una especialización del Metamodelo PSM especialización del Metamodelo PSM EIFFELEIFFEL

Page 22: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metamodelo PSM Eiffel: Metamodelo PSM Eiffel: EiffelClassEiffelClass

Classifier (from Template)

Operation (from Kernel)

Property (from Kernel)

Class (fromKernel) *0..1

+ownedOperation

*

+class

0..1

*0..1

+ownedAttribute

*

+class

0..1

AssociationEnd

Routine

isDeferred {redefines isAbstract}isFrozen {redefines isLeaf}

Generalization (from Kernel)

Attribute

isFrozen {redefines isLeaf}

Constraint

EiffelClass

isDeferred {redefines is Abstract}isExpanded : Boolean

*

0..1

*

{subsets ownedAttribute}+class

0..1{redefines class}

*

1

+ownedRoutine *{redefines ownedOperation}

+class

1{redefines class}

*1 *

+heir

1

{redefines specific}

1+parent

1

{redefines general}

*

1

*

{subsets ownedAttribute}+class

1{redefines class}

*

+/parents

*

{redefines supperclass}

*0..1

+invariant *{redefines ownedRule}

+class

0..1

{redefines namespace}

Page 23: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metamodelo PSM Eiffel: Metamodelo PSM Eiffel: RoutineRoutine

Parameter

Constraint

Type

Operation (from Kernel)

isQuery : Boolean = False

*

+redefinedOperation

*

*0..1

+ownedParameter

*

+operation

0..1

*0..1

+precondition *+preContext

0..1

*0..1

+postcondition *+postContext

0..1

0..10..1

+bodyCondition

0..1

+bodyContext

0..1

*+raisedException *

0..1+type

0..1

Procedure

isConstructor : Boolean

Type

Function

1+returnType 1 {redefines type}

Attribute

isFrozen {redefines isLeaf}

Routine

isDeferred {redefines isAbstract}isFrozen {redefines isLeaf}

Implementation

procedure : Expression

*

1

+referencedAttribute *

1

0..11

+body

0..1

+signature

1

* 1

+invokedRoutine

* 1

Page 24: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Patrón Observer - Metamodelo PSM-Eiffel: Patrón Observer - Metamodelo PSM-Eiffel: Diagrama de ClasesDiagrama de Clases

EiffelClass

Routine

Association

AssociationEnd

Generalization

Association

AssociationEnd

EiffelClass

- - - - - - - - - - - - - - - - - - - - - - - - {redefines class}

Update

Observer

1..*1..* {subsetsownedRoutine}

AssocEndObserver

1

1

1

+participant 1

Relationship Observer

1+parent

1{redefinesgeneral}

SubjectObserver1

1

1

{subset memberEnd}

+association

1{redefines association}

EffectiveObserver

1

1

1{subsetsgeneral ization}

+heir1

{redefinesspecific}

AssocEndSubject1

1

+association

1{redefines association}1

{subsets memberEnd}

Attach Detach Notify

AssocEndEffectiveObserver

1

1

1

+participant 1

Subject

1

1

1

+participant1

1..*1..*

1..*1..*

{subsetownedRoutine}

1..*1..*

ObserverSubject 1

1

1{subsets memberEnd}

+association

1

{redefines association}

Relationship Subject

1+parent 1{redefinesgeneral}

AssocEndEffectiveSubject

1

1+association

1

{redefines association}1

{subset memberEnd}

SetState

GetState

Attribute

EffectiveSubject

1

1

1 {subsetsgeneral ization}

+heir

1{redefinesspecific}

1

1

1

+participant1

1..*1..*{subsets member}

1..*1..*{subsets

member}1..*

1

+state1..*

{subsetsmember}

1

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {subsets ownedRoutine}

Page 25: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Patrón de Diseño Observer Patrón de Diseño Observer Metamodelo PSM Eiffel : Metamodelo PSM Eiffel :

RestricionesRestricionesAssocEndObserverAssocEndObserver[1]Este extremo de asociación tiene una multiplicidad [1]Este extremo de asociación tiene una multiplicidad

cuyo rango será un subconjunto (posiblemente cuyo rango será un subconjunto (posiblemente infinito) de los enteros no negativos.infinito) de los enteros no negativos.

multiplicity.lower >= 0 multiplicity.lower >= 0 andand

(self.multiplicity.upper > 0 (self.multiplicity.upper > 0 oror self.multiplicity.upper = #unlimited)self.multiplicity.upper = #unlimited)

[2]Deberá ser navegable.[2]Deberá ser navegable.

self.isNavigable( )self.isNavigable( )

Operaciones AdicionalesOperaciones Adicionales

La rutina observadora isNavigable indica si este La rutina observadora isNavigable indica si este extremo de asociación es navegable. extremo de asociación es navegable.

isNavigable = not class ->isEmpty()isNavigable = not class ->isEmpty()

Page 26: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Especificando Refinamientos Especificando Refinamientos en OCL:en OCL:

de PIM-UML a PSM-EIFFELde PIM-UML a PSM-EIFFEL

Page 27: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Reglas de Reglas de TransformaciónTransformación

La especificación de los metamodelos La especificación de los metamodelos en los tres niveles, permite construir en los tres niveles, permite construir la definición de transformación de la definición de transformación de modelo a modelo.modelo a modelo.

Las reglas de transformación que Las reglas de transformación que constituyen una definición de constituyen una definición de transformación describen como puede transformación describen como puede transformarse un modelo en un transformarse un modelo en un lenguaje origen en un modelo en un lenguaje origen en un modelo en un lenguaje destino. lenguaje destino.

Page 28: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Reglas de transformaciónReglas de transformaciónEn el caso del patrón de diseño observer, las reglas usan los En el caso del patrón de diseño observer, las reglas usan los metamodelos definidos en los distintos niveles para definir metamodelos definidos en los distintos niveles para definir

las las transformaciones. transformaciones. Transformación PIM-PSM:Transformación PIM-PSM:

Metamodelo Origen: “UML especializado del patrón Metamodelo Origen: “UML especializado del patrón Observer” Observer”

Metamodelo Destino: “UML especializado del patrón Metamodelo Destino: “UML especializado del patrón Observer en una plataforma específica”.Observer en una plataforma específica”.

Transformación PSM-ISM:Transformación PSM-ISM:

Metamodelo Origen: “UML especializado del patrón Metamodelo Origen: “UML especializado del patrón Observer en una plataforma específica”.Observer en una plataforma específica”.

Metamodelo Destino: “UML especializado del patrón Metamodelo Destino: “UML especializado del patrón Observer en un lenguaje de programación específico”Observer en un lenguaje de programación específico”

Page 29: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Transformación de PIM-UML A PSM-Transformación de PIM-UML A PSM-EIFFELEIFFEL

Transformation Transformation PIM-UML TO PSM-EIFFELPIM-UML TO PSM-EIFFEL { {parametersparameters

sourceModel: Design Pattern Metamodel :: PackagesourceModel: Design Pattern Metamodel :: PackagetargetModel: Design Pattern Metamodel-EIFFEL :: ProjecttargetModel: Design Pattern Metamodel-EIFFEL :: Project

pre:pre:-- El paquete SourceModel no importa otros paquetes.-- El paquete SourceModel no importa otros paquetes.sourceModel.importedElement sourceModel.importedElement isEmpty isEmpty

post:post:-- el número de clases del modelo target es igual al número de -- el número de clases del modelo target es igual al número de

clases más el número de interfaces del modelo source.clases más el número de interfaces del modelo source.sourceModel.ownedMembersourceModel.ownedMember select(oclIsTypeOf(Class)) select(oclIsTypeOf(Class))

size() +size() +sourceModel.ownedElementsourceModel.ownedElement select(oclIsTypeOf(Interface)) select(oclIsTypeOf(Interface))

size()=size()=targetModel.ownedElement targetModel.ownedElement

select(oclIsTypeOf(EiffelClass))select(oclIsTypeOf(EiffelClass)) size() size()

Page 30: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Transformación de PIM-UML A PSM-Transformación de PIM-UML A PSM-EIFFELEIFFEL

post:post:-- Para cada clase en sourceModel existe una clase Eiffel en -- Para cada clase en sourceModel existe una clase Eiffel en

targetModel tal que:targetModel tal que:sourceModel.ownedElement sourceModel.ownedElement select(oclIsTypeOf(Class)) select(oclIsTypeOf(Class)) forAll ( sourceClass | targetModel.ownedElement forAll ( sourceClass | targetModel.ownedElement select(oclIsTypeOf(EiffelClass))select(oclIsTypeOf(EiffelClass)) exists ( targetClass | exists ( targetClass |

-- sourceClass y targetClass tienen el mismo nombre y-- sourceClass y targetClass tienen el mismo nombre ysourceClass.name = targetClass.name andsourceClass.name = targetClass.name and

--- tienen el mismo conjunto de operaciones y- tienen el mismo conjunto de operaciones ysourceClass.member sourceClass.member select (oclIsTypeOf(Operation)) = select (oclIsTypeOf(Operation)) =targetClass.member targetClass.member select (oclIsKindOf(Routine)) and select (oclIsKindOf(Routine)) and

-- tienen las mismas clases padres y -- tienen las mismas clases padres y las mismas clases las mismas clases hijas,hijas,

……

Page 31: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Transformación de PIM-UML A PSM-Transformación de PIM-UML A PSM-EIFFELEIFFEL

post:post:-- Para cada interface en sourceModel existe una clase -- Para cada interface en sourceModel existe una clase

Eiffel en targetModel tal que:Eiffel en targetModel tal que:sourceModel.ownedElement sourceModel.ownedElement

select(oclIsTypeOf(Interface))select(oclIsTypeOf(Interface)) forAll ( sourceInterface /targetModel.ownedElement forAll ( sourceInterface /targetModel.ownedElement select(oclIsTypeOf(EiffelClass))select(oclIsTypeOf(EiffelClass)) exists ( targetClass / exists ( targetClass /

-- sourceInterface y targetClass tienen el mismo nombre y-- sourceInterface y targetClass tienen el mismo nombre ysourceInterface.name = targetClass.name andsourceInterface.name = targetClass.name and

--- tienen el mismo conjunto de operaciones y- tienen el mismo conjunto de operaciones ysourceInterface.member sourceInterface.member select (oclIsTypeOf(Operation)) select (oclIsTypeOf(Operation))

==targetClass.member targetClass.member select (oclIsKindOf(Routine)) and select (oclIsKindOf(Routine)) and

-- tienen las mismas clases padres y -- tienen las mismas clases padres y las mismas clases hijas,las mismas clases hijas,. . . . . . ) ) ) )

Page 32: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metamodelo del Metamodelo del Patrón de Diseño Observer Patrón de Diseño Observer

a nivel PSM JAVA a nivel PSM JAVA

Page 33: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metamodelo PSM Java: Metamodelo PSM Java: JavaClassJavaClass

Operation (from Kernel)

Class (from Kernel)

*0..1

+ownedOperation

*

+class

0..1

Type Property

(from Kernel)*

0..1

+ownedAttribute

*

+class

0..1

11

{redefines type}

AssociationEnd

Field

isFinal : Boolean {redefines isLeaf}isVolatile : Boolean

JavaOperation

JavaClass

isFinal {redefines is Leaf}1

+/superClass

1

{redefines superClass}

*

0..1

*

{subsets ownedAttribute}

+class

0..1

{redefines class}

*

0..1

+nestedClass

*

{subsets nestedClassifier}

0..1

*

0..1

*

{subsets ownedAttribute}

+class

0..1

{redefines class}

*

*

+javaExceptions

*

{redefines raisedException} *

*0..1 *

{redefines ownedOperation}+class

0..1

{redefines class}

Classifier (from Template)

Page 34: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metamodelo PSM Java: Metamodelo PSM Java: JavaInterfaceJavaInterface

Method

isAbstract : BooleanisSynchronized : BooleanisFinal {redefines isLeaf}

Field

isFinal : Boolean {redefines isLeaf}isVolatile : Boolean

AssociationEndJavaInterface

*0..1 *

{redefines ownedOperation}+interface

0..1

{redefines interface}

*

0..1

*

{subsets ownedAttribute}

+interface

0..1

{redefines interface}

*

0..1

*

{subsets ownedAttribute}

+interface

0..1

{redefines interface}

1

+/superInterface

1

{redefines general}

*

0..1

+nestedInterface

*

{subsets nestedClassifier}

0..1

Operation (from Interface)

Property (from Kernel)

Interface (from Interfaces) *0..1

+ownedOperation

*

+class

0..1

*0..1

+ownedAttribute

*

+class

0..1

JavaOperation

Page 35: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metamodelo PSM Java: Metamodelo PSM Java: JavaOperationJavaOperation

Constructor

Parameter

Constraint

Type

Operation (from Kernel)

isQuery : Boolean = False *0..1

+ownedParameter

*

+operation

0..1

*0..1

+postcondition

*

+postContext

0..1

0..10..1

+bodyCondition

0..1

+bodyContext

0..1

*0..1

+precondition

*

+preContext

0..1

*

+raisedException

*

0..1

+/type

0..1*

+redefinedOperation

*

JavaOperation

Field

isFinal : Boolean {redefines isLeaf}isVolatile : Boolean

Method

isAbstract : BooleanisSynchronized : BooleanisFinal {redefines isLeaf}

Implementation

procedure : Expression0..11

+body

0..1

+signature

1

*

1

+referencedField *

1

*

1

+invokedMethod*

1

Page 36: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Patrón Observer - Metamodelo Java: Diagrama Patrón Observer - Metamodelo Java: Diagrama de Clasesde Clases

Method

Association

AssociationEnd

DirectedRelationship

Association

AssociationEnd

Classifier

- - - - - - - - - - - - - - - - - {redefines class}

Update

Observer

1..*1..*

AssocEndObserver

1

1

1

+participant 1

Relationship Observer

11{redefinescontract}

SubjectObserver 1

1

1

{subset memberEnd}

+association

1{redefines association}

ConcreteObserver

1

1

1{subsetsinterfaceRealization}

1

{redefinesimplementing

Classifier}

AssocEndSubject1

1

+association

1{redefines association}1

{subsets memberEnd}

Attach Detach Notify

AssocEndConcreteObserver

1

1

1

+participant 1

Subject

1

1

1

+participant1

1..*1..*1..*1..*

1..*1..*

{subsetsownedOperation}

ObserverSubject 1

1

1{subsets memberEnd}

+association

1

{redefines association}

Relationship Subject

11{redefinescontract}

AssocEndConcreteSubject

1

1 +association

1

{redefines association}1

{subset memberEnd}

SetStateGetState

Field

ConcreteSubject

1

1

1{subsets

interfaceRealization}

1

{redefinesimplementing

Classifier}

1

1

1

+participant1

1..*1..*{subsets member}

1..*1..*{subsets

member}

1..*

1

+state 1..*

{subsetsmember}1

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {subsets ownedOperation}

JavaClass

Page 37: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metaclase SubjectMetaclase Subject

Un sujeto, instancia de la metaclase Un sujeto, instancia de la metaclase Subject Subject puede puede

ser una clase Java o una interfaz Java. ser una clase Java o una interfaz Java.

(self.oclIsTypeOf(JavaClass) (self.oclIsTypeOf(JavaClass) oror

self.oclIsTypeOf(JavaInterface)self.oclIsTypeOf(JavaInterface)

Patrón Observer – Metamodelo PSM-Patrón Observer – Metamodelo PSM-Java: RestriccionesJava: Restricciones

Page 38: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

Metamodelos de patrones de Metamodelos de patrones de diseño: Ventajasdiseño: Ventajas

Un metamodelo UML para un patrón de Un metamodelo UML para un patrón de diseño permite detectar la presencia de diseño permite detectar la presencia de un patrón en un modelo. un patrón en un modelo.

La especificación de los metamodelos en La especificación de los metamodelos en los tres niveles, permite construir la los tres niveles, permite construir la definición de transformaciones de modelo definición de transformaciones de modelo a modelo, logrando una generación de a modelo, logrando una generación de código más completa. código más completa.

Page 39: Patrones de Diseño en MDA. Patrones de Diseño “descripciones de objetos que se comunican y clases que son personalizadas para resolver un problema de

BibliografíaBibliografía

Arnout, Karine (2004). “From Patterns to Components”. Ph. D. Arnout, Karine (2004). “From Patterns to Components”. Ph. D. Thesis, Swiss Institute of Technology (ETH Zurich) Thesis, Swiss Institute of Technology (ETH Zurich) http://se.inf.ethz.ch/people/arnout/publications/arnout_phd_thesihttp://se.inf.ethz.ch/people/arnout/publications/arnout_phd_thesis.pdfs.pdf

Gamma y Otros (1996). Gamma E., Richard H., Ralph J. y Gamma y Otros (1996). Gamma E., Richard H., Ralph J. y Vlissides J. “Design Patterns. Elements of reusable Object-Vlissides J. “Design Patterns. Elements of reusable Object-Oriented Software”. Addisson-Wesley.Oriented Software”. Addisson-Wesley.

MDA (2006). The Model Driven Architecture. MDA (2006). The Model Driven Architecture. www.omg.org/mdawww.omg.org/mda

Meyer (1997). Meyer, Bertrand. “Object-Oriented Software Meyer (1997). Meyer, Bertrand. “Object-Oriented Software Construction”. Prentice Hall PTR, 1997.Construction”. Prentice Hall PTR, 1997.

OCL (2006). Object Constraint Language. Version 2.0. OMG OCL (2006). Object Constraint Language. Version 2.0. OMG Available Specification: formal/06-05-01. Available Specification: formal/06-05-01. www.omg.orgwww.omg.org

UML (2006). Unified Modeling Language: Superstructure. UML (2006). Unified Modeling Language: Superstructure. Version 2.0. OMG Specification: formal/05-07-04 Version 2.0. OMG Specification: formal/05-07-04 www.omg.orgwww.omg.org