Title: Patrones de Dise
1Patrones de Diseño en MDA
2Patrones 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)
3Patrones 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.
4Metamodelos 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.
5Metamodelos 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.
6Metamodelos de Patrones de Diseño en MDA
- Los Metamodelos de Patrones a nivel PIM son
- especificados teniendo en cuenta
- La estructura
- Los participantes
- Colaboraciones
7Metamodelos 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.
8Metamodelos 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
9Especificació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.
10Notació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.
11Relaciones entre Modelos y Metamodelos
12Ejemplo Patrón de Diseño Observer
13Patró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).
14Patrón Observer Diagramas de Clases y de
Secuencia UML
15Metamodelo del Patrón de Diseño Observer a
nivel PIM
16Patrón Observer- Metamodelo PIM Diagrama de
Clases
17Patrón de Diseño ObserverMetamodelo PIM
Restricciones
- Metaclase Subject
- Un sujeto, instancia de la metaclase Subject
puede - ser una clase o una interfaz.
- (self.oclIsTypeOf(Class) or self.oclIsTypeOf(Inter
face)
18Patró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-gtnotEmpty( ) and
- self.parameter-gtselect ( param
param.direction in and - param.type oclIsKindOf(Observer)) -gt size( ) 1
19Patró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)
) - and
- self.oclIsTypeOf(InterfaceRealization) implies (
- self.contract.oclIsKindOf(Interface) and
- self.contract.oclIsTypeOf(Subject)
- and self.implementingClassifier.oclIsTypeOf(Concre
teSubject))
20Metamodelo 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
22Metamodelo PSM Eiffel EiffelClass
23Metamodelo PSM Eiffel Routine
24Patrón Observer - Metamodelo PSM-Eiffel Diagrama
de Clases
25Patrón de Diseño Observer Metamodelo PSM Eiffel
Restriciones
AssocEndObserver 1Este extremo de asociación
tiene una multiplicidad cuyo rango será un
subconjunto (posiblemente infinito) de los
enteros no negativos. multiplicity.lower gt 0
and (self.multiplicity.upper gt 0 or
self.multiplicity.upper unlimited) 2Deberá
ser navegable. self.isNavigable( ) Operaciones
Adicionales La rutina observadora isNavigable
indica si este extremo de asociación es
navegable. isNavigable not class -gtisEmpty()
26Especificando Refinamientos en OCLde PIM-UML a
PSM-EIFFEL
27Reglas 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.
28Reglas 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
29Transformació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(Inter
face))? size() - targetModel.ownedElement ? select(oclIsTypeOf(Eiff
elClass))? size()
30Transformació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(Clas
s))? - 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, -
31Transformació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(Inte
rface))? - 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, - . . . ) )
32Metamodelo del Patrón de Diseño Observer a
nivel PSM JAVA
33Metamodelo PSM Java JavaClass
34Metamodelo PSM Java JavaInterface
35Metamodelo PSM Java JavaOperation
36Patrón Observer - Metamodelo Java Diagrama de
Clases
37Patró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)
38Metamodelos 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.
39Bibliografía
- Arnout, Karine (2004). From Patterns to
Components. Ph. D. Thesis, Swiss Institute of
Technology (ETH Zurich) http//se.inf.ethz.ch/peop
le/arnout/publications/arnout_phd_thesis.pdf - 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.
www.omg.org/mda - Meyer (1997). Meyer, Bertrand. Object-Oriented
Software Construction. Prentice Hall PTR, 1997. - OCL (2006). Object Constraint Language. Version
2.0. OMG Available Specification
formal/06-05-01. www.omg.org - UML (2006). Unified Modeling Language
Superstructure. Version 2.0. OMG Specification
formal/05-07-04 www.omg.org