Descargar la presentación
La descarga está en progreso. Por favor, espere
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/
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.