La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Patrones de Diseño en MDA

Presentaciones similares


Presentación del tema: "Patrones de Diseño en MDA"— Transcripción de la presentación:

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ño
El 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 MDA
Metamodelos 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 MDA
Los Metamodelos de Patrones a nivel PIM son especificados teniendo en cuenta: La estructura Los participantes Colaboraciones

7 Metamodelos de Patrones de Diseño en MDA
Metamodelos 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 MDA
Metamodelos 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ño
La 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ño
Para 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 Observer
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).

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: Restricciones
Metaclase 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 : Restricciones
Metaclase 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 : Restriciones
Metaclase 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 : Restriciones
AssocEndObserver [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ón
La 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ón
En 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-EIFFEL
Transformation 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-EIFFEL
post: -- 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-EIFFEL
post: -- 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: Restricciones
Metaclase 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: Ventajas
Un 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/


Descargar ppt "Patrones de Diseño en MDA"

Presentaciones similares


Anuncios Google