Patrones de Diseño en MDA

1 Patrones de Diseño en MDA ...
Author: Montserrat Luna Salazar
0 downloads 2 Views

1 Patrones de Diseño en MDA

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

3 Patrones de Diseño Los patrones de diseño describen soluciones a problemas de diseño recurrentes. Un patrón de diseño nombra, abstrae e identifica los aspectos claves de una estructura de diseño común que lo hacen útil para crear un diseño orientado a objetos reusable. Un patrón de diseño identifica las clases que participan y las instancias, sus roles y colaboraciones, y la distribución de responsabilidades.

4 Metamodelos de Patrones de DiseñoEl metamodelo de un patrón de diseño dado, describe la familia de modelos que forman el espacio de soluciones de ese patrón.

5 Metamodelos de Patrones de Diseño en MDAMetamodelos en tres niveles: PIM: metamodelos de patrones definidos de manera independiente de cualquier plataforma o tecnología específicas. PSM: metamodelos de patrones definidos teniendo en cuenta una plataforma específica. Por ejemplo JAVA, EIFFEL. ISM: metamodelos de patrones que corresponden a un lenguaje de programación específico.

6 Metamodelos de Patrones de Diseño en MDALos Metamodelos de Patrones a nivel PIM son especificados teniendo en cuenta: La estructura Los participantes Colaboraciones

7 Metamodelos de Patrones de Diseño en MDAMetamodelos de Patrones a nivel PSM son especificados teniendo en cuenta: El metamodelo a nivel PIM del patrón Las características de la plataforma. Por ejemplo un metamodelo para la plataforma Java restringe la herencia, ya que Java no permite herencia múltiple, mientras que un metamodelo para la plataforma EIFFEL no tendrá esta restricción.

8 Metamodelos de Patrones de Diseño en MDAMetamodelos de Patrones a nivel ISM son especificados teniendo en cuenta: La gramática del lenguaje de programación específico

9 Especificación de los Metamodelos de Patrones de DiseñoLa especificación del espacio de soluciones de un patrón de diseño se logra a través de la especialización del metamodelo UML y la especificación de un conjunto de restricciones escritas en OCL.

10 Notación de los Metamodelos de Patrones de DiseñoPara la especificación de los metamodelos de los patrones se usa la notación de la especificación de UML de manera semi-formal usando la combinación de notación gráfica, lenguaje natural y lenguaje formal: Sintaxis abstracta: diagrama de clases UML (metaclases que definen las construcciones y sus relaciones) junto con una descripción en lenguaje natural. Restricciones: son provistas usando el lenguaje OCL y un lenguaje natural. Semántica: el significado de las construcciones es definido usando lenguaje natural.

11 Relaciones entre Modelos y Metamodelos

12 Ejemplo: Patrón de Diseño Observer

13 Patrón de Diseño ObserverEl 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).

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

15 Metamodelo del Patrón de Diseño Observer a nivel PIM

16 Patrón Observer- Metamodelo PIM : Diagrama de Clases

17 Patrón de Diseño Observer Metamodelo PIM: RestriccionesMetaclase Subject Un sujeto, instancia de la metaclase Subject puede ser una clase o una interfaz. (self.oclIsTypeOf(Class) or self.oclIsTypeOf(Interface)

18 Patrón de Diseño Observer Metamodelo PIM : RestriccionesMetaclase Attach [1] Esta operación cambia el estado del sujeto. not self.isQuery [2] Esta operación tiene un conjunto no vacío de parámetros y uno de ellos debe ser de entrada (direction= #in) y del tipo Observer. self.parameter->notEmpty( ) and self.parameter->select ( param | param.direction= #in and param.type= oclIsKindOf(Observer)) -> size( ) = 1

19 Patrón de Diseño Observer Metamodelo PIM : RestricionesMetaclase RelationshipSubject Una instancia de esta relación está restringida a ser una generalización o una realización de interfaz. self.oclIsTypeOf( Generalization) or (self.oclIsTypeOf(InterfaceRealization)) and self.oclIsTypeOf(Generalization) implies ( self.general.oclIsKindOf(Class) and self.general.oclIsTypeOf(Subject) and self.specific.oclIsTypeOf(ConcreteSubject) ) self.oclIsTypeOf(InterfaceRealization) implies ( self.contract.oclIsKindOf(Interface) and self.contract.oclIsTypeOf(Subject) and self.implementingClassifier.oclIsTypeOf(ConcreteSubject))

20 Metamodelo del Patrón de Diseño Observer a nivel PSM Eiffel

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

22 Metamodelo PSM Eiffel: EiffelClass

23 Metamodelo PSM Eiffel: Routine

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

25 Patrón de Diseño Observer Metamodelo PSM Eiffel : RestricionesAssocEndObserver [1]Este extremo de asociación tiene una multiplicidad cuyo rango será un subconjunto (posiblemente infinito) de los enteros no negativos. multiplicity.lower >= 0 and (self.multiplicity.upper > 0 or self.multiplicity.upper = #unlimited) [2]Deberá ser navegable. self.isNavigable( ) Operaciones Adicionales La rutina observadora isNavigable indica si este extremo de asociación es navegable. isNavigable = not class ->isEmpty()

26 Especificando Refinamientos en OCL: de PIM-UML a PSM-EIFFEL

27 Reglas de TransformaciónLa especificación de los metamodelos en los tres niveles, permite construir la definición de transformación de modelo a modelo. Las reglas de transformación que constituyen una definición de transformación describen como puede transformarse un modelo en un lenguaje origen en un modelo en un lenguaje destino.

28 Reglas de transformaciónEn el caso del patrón de diseño observer, las reglas usan los metamodelos definidos en los distintos niveles para definir las transformaciones. Transformación PIM-PSM: Metamodelo Origen: “UML especializado del patrón Observer” Metamodelo Destino: “UML especializado del patrón Observer en una plataforma específica”. Transformación PSM-ISM: Metamodelo Origen: “UML especializado del patrón Observer en una plataforma específica”. Metamodelo Destino: “UML especializado del patrón Observer en un lenguaje de programación específico”

29 Transformación de PIM-UML A PSM-EIFFELTransformation PIM-UML TO PSM-EIFFEL { parameters sourceModel: Design Pattern Metamodel :: Package targetModel: Design Pattern Metamodel-EIFFEL :: Project pre: -- El paquete SourceModel no importa otros paquetes. sourceModel.importedElement  isEmpty post: -- 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. sourceModel.ownedMember select(oclIsTypeOf(Class)) size() + sourceModel.ownedElement select(oclIsTypeOf(Interface)) size()= targetModel.ownedElement  select(oclIsTypeOf(EiffelClass)) size()

30 Transformación de PIM-UML A PSM-EIFFELpost: -- Para cada clase en sourceModel existe una clase Eiffel en targetModel tal que: sourceModel.ownedElement  select(oclIsTypeOf(Class)) forAll ( sourceClass | targetModel.ownedElement  select(oclIsTypeOf(EiffelClass)) exists ( targetClass | -- sourceClass y targetClass tienen el mismo nombre y sourceClass.name = targetClass.name and -- tienen el mismo conjunto de operaciones y sourceClass.member  select (oclIsTypeOf(Operation)) = targetClass.member  select (oclIsKindOf(Routine)) and -- tienen las mismas clases padres y las mismas clases hijas,

31 Transformación de PIM-UML A PSM-EIFFELpost: -- Para cada interface en sourceModel existe una clase Eiffel en targetModel tal que: sourceModel.ownedElement  select(oclIsTypeOf(Interface)) forAll ( sourceInterface /targetModel.ownedElement  select(oclIsTypeOf(EiffelClass)) exists ( targetClass / -- sourceInterface y targetClass tienen el mismo nombre y sourceInterface.name = targetClass.name and -- tienen el mismo conjunto de operaciones y sourceInterface.member  select (oclIsTypeOf(Operation)) = targetClass.member  select (oclIsKindOf(Routine)) and -- tienen las mismas clases padres y las mismas clases hijas, ) )

32 Metamodelo del Patrón de Diseño Observer a nivel PSM JAVA

33 Metamodelo PSM Java: JavaClass

34 Metamodelo PSM Java: JavaInterface

35 Metamodelo PSM Java: JavaOperation

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

37 Patrón Observer – Metamodelo PSM-Java: RestriccionesMetaclase Subject Un sujeto, instancia de la metaclase Subject puede ser una clase Java o una interfaz Java. (self.oclIsTypeOf(JavaClass) or self.oclIsTypeOf(JavaInterface)

38 Metamodelos de patrones de diseño: VentajasUn metamodelo UML para un patrón de diseño permite detectar la presencia de un patrón en un modelo. La especificación de los metamodelos en los tres niveles, permite construir la definición de transformaciones de modelo a modelo, logrando una generación de código más completa.

39 Bibliografía Arnout, Karine (2004). “From Patterns to Components”. Ph. D. Thesis, Swiss Institute of Technology (ETH Zurich) Gamma y Otros (1996). Gamma E., Richard H., Ralph J. y Vlissides J. “Design Patterns. Elements of reusable Object-Oriented Software”. Addisson-Wesley. MDA (2006). The Model Driven Architecture. Meyer (1997). Meyer, Bertrand. “Object-Oriented Software Construction”. Prentice Hall PTR, 1997. OCL (2006). Object Constraint Language. Version 2.0. OMG Available Specification: formal/ UML (2006). Unified Modeling Language: Superstructure. Version 2.0. OMG Specification: formal/