Una crítica a
             “A UML-Based Pattern Specification
                       Technique”
 Javier E. Buelvas Cueto, Estudiante del programa de especialización en Ingeniería de Software,

                                  Fundación Universitaria Tecnológico Comfenalco



La creciente complejidad de los sistemas informáticos representa un reto importante para los

ingenieros y arquitectos del software. De la preocupación inicial sobre la definición de la

estructura y calidad del código final, se ha pasado a dedicar cada vez más tiempo, atención y

esfuerzo al diseño y modelado del sistema. Los modelos proporcionan un mayor nivel de

abstracción, permitiendo trabajar con sistemas más complejos, y facilitando el proceso de

codificación e implementación del sistema de forma distribuida y en distintas plataformas.



En este nuevo contexto, los Patrones de Diseño ayudan a los desarrolladores de                                             software            a

resolver       problemas          de     diseño orientado a objetos que repetidamente ocurren. Cuando

estos      adaptan        patrones        a     soluciones particulares, muchas veces elaboran modelos usando

UML.        Sin embargo, a menudo, UML no es lo suficientemente expresivo para describir

patrones apropiadamente. Según [1], Cuando se ve desde fuera, un patrón de diseño se representa

como una colaboración parametrizada1. Cuando se ve desde dentro, un patrón e diseño es

simplemente una colaboración y se representa con sus partes estructural y de comportamiento.




 Un patrón representado como una colaboraciones parametrizadas, es un grupo de objetos/clases colaborando entre sí que se pueden abstraer de
un conjunto de escenarios general.
Debido a este tratamiento, se presentan algunas limitaciones para expresar correctamente la

semántica asociada a un patrón, principalmente porque estos tienen propósitos diferentes.



Una colaboración modela la interacción que puede existir entre un conjunto de objetos para

lograr un objetivo específico; un patrón tiene un propósito más general, ya que debe especificar

una solución de diseño desde el punto de vista de su estructura y su comportamiento.



De hecho, cuando instanciamos una colaboración parametrizada el resultado es otra colaboración,

pero la instanciación de un patrón de diseño da lugar a una porción de diseño que debe satisfacer

las restricciones del patrón y que resuelve un problema concreto, pudiendo ser puramente

estructural y no incluir interacción alguna.



Un patrón debería verse como una plantilla capaz de guiar al diseñador en la flexible selección,

creación y validación de los elementos (clases, objetos, relaciones, atributos, métodos, etc.,) que

participan en la solución de un problema típico de diseño, sin embargo,   los “ClassifierRole” o

“AssociationRole”      de     una colaboración parametrizada     dependen de clasificadores o

asociaciones    base    que    deben    existir previamente y donde los         “ClassiferRole” o

“AssociationRole” son una vista de éstos respectivamente. Además, sólo se pueden ligar

clasificadores o asociaciones a un parámetro con la única restricción de que el participante sea

del mismo tipo (o un descendiente del tipo) que el parámetro correspondiente.



Estos inconvenientes representan un problema para poder especificar la esencia de los patrones

de diseño en forma adecuada.
Una aproximación como solución a los problemas planteados anteriormente son los         perfiles

UML (en inglés “UML Profiles”). Estos permiten extender la sintaxis y la semántica d e

UML para modelar elementos de dominios particulares.



Así como los perfiles UML extienden su vocabulario y los patrones de diseño definen para los

diseñadores un vocabulario común;        también    es posible usar perfiles para definir un

vocabulario de patrones en UML. De esta         manera, los perfiles pueden ser usados no

solamente para dominios específicos, sino también para resolver problemas particulares en

diferentes dominios.



El perfil es un mecanismo definido por UML (en inglés,         Unified   Modeling    Language)

[2]   para extender y adaptar UML a una plataforma o dominio particular.         Incluye    tres

elementos:    estereotipos, valores etiquetados y restricciones. Los estereotipos extienden el

vocabulario UML y es posible asociarle valores etiquetados y restricciones. Si bien,          el

lenguaje natural es usado para definir restricciones, debido a su precisión, OCL (por sus siglas

en inglés, Object Constraint Language) es uno de los más adecuados.



Las bondades ofrecidas por los perfiles pueden ser aprovechadas en la transformación de

modelos a otros modelos o a código (facilitando la tarea a los diseñadores de software). En

los últimos años el concepto de perfil ha servido para cubrir distintos dominios; tales

como, tiempo real, procesos de negocio, y otros.
Cuando los desarrolladores de software modelan soluciones usando UML, muchas veces

encuentran que UML no es lo suficientemente                    expresivo para describir patrones

apropiadamente.



Numerosos trabajos de investigación se ocuparon de la descripción de patrones con diferentes

enfoques. Algunos trabajos estudiaron el uso de UML para definir y documentar patrones.

Por ejemplo, Le Guennec, Sunyé y Jézéquel en [5] modificaron el metamodelo 1.3 para

permitir colaboraciones en el meta-nivel         y     restricciones   OCL,     en   lugar    de

colaboraciones parametrizadas. La idea era mejorar el modelo de colaboración y las plantillas

UML para una mejor definición de los roles de los patrones.



La OMG en [10] introdujo la noción de “Paquete de Patrón de Negocio” (consideró que las

reglas que gobiernan los conceptos de negocio pueden ser representados con un patrón con

restricciones) para definir un patrón, y “Ligamiento de Patrón de Negocio” para aplicar un

patrón.



Fontoura y Lucena en [6] extendieron UML representando una clase de patrones de

diseño llamados “patrones de configuración”. La extensión a             UML    fue   desarrollada

expresando un diagrama abstracto que permite mostrar diferentes formas de implementación;

y representando, además, un patrón de instanciación.



Una técnica de especificación para patrones fue propuesta por France, Kim y Song en [9].

Definieron un     lenguaje   de   metamodelado       (usando    UML    y restricciones OCL) para
especificar perspectivas de patrones; tales como estructura estática e iteraciones. Una

especificación de patrón define una familia de modelos UML en términos de roles.



Otros trabajos, como [7] y [8], estuvieron menos orientados               a   la   especificación    de

patrones para documentación, pero mostraron otras interesantes características. Sanada y

Adams en [7] extendieron UML para soportar patrones de diseño en diagramas de clases. Dang

y Yang en [8] presentaron un perfil UML para una mejor visualización de patrones de diseño

en diagramas de clases.



Barotto    y   Demonte     en    [11]     propusieron   una definición de patrones de diseño a

través    del metamodelo        UML.      Utilizaron    estereotipos   con restricciones OCL para

especificar los elementos que componen un patrón. Sin embargo, no utilizaron la noción de

“perfil UML” definido en UML 2.0 [4], sino conceptos anteriores a dicha versión.



EL USO DE PERFILES UML PARA DEFINICIÓN DE PATRONES DE DISEÑO



Algunas investigaciones están orientadas a la definición de Patrones de Diseño con Perfiles

UML. Estas, analizan las ventajas de los perfiles para definir, documentar              y     visualizar

patrones de diseño. Al definir un perfil por cada patrón, estas van conformando una librería

de patrones especificados con perfiles UML.             Además,    de cierta forma intentan     mostrar

que       las herramientas UML          son suficientes para introducir perfiles de     patrones, sin

implementar una herramienta específica para patrones.
Algunos resultados parciales



Para comenzar se seleccionaron los patrones diseño denominados “estructurales” de [3]. La

experiencia inicial consistió en la definición del patrón “Composite”.



Se     definieron     tres     estereotipos   de   clase: “Component”,        “Leaf”       and

“Composite”; y un esterotipo de asociación, “Children” (ver Figura 1).



Fueron establecidas restricciones OCL sobre         los estereotipos, la cuales son mostradas a

continuación (el metamodelo UML es mostrado en la Figura 2 para entender mejor las

especificaciones OCL).



Children:(Core::Association)

inv:

self.connection->exists

(participant.isSterotyped (“Composite”) and multiplicity.min=1 and

multiplicity.max=1) and

self.connection->forAll (c1,c2|

c1.participant.isSterotyped (“Composite”)

and

c2.participant.isSterotyped (“Component”)

implies c1.aggregation=#composite and c2.aggregation=#none )
Conclusiones y trabajos futuros



Los perfiles UML pueden ser útiles para definir, documentar y visualizar patrones de diseño.

Además cuentan con la ventaja de que si las herramientas UML permiten introducir perfiles

de patrones, no es necesario implementar una herramienta específica para patrones.



El trabajo futuro está dirigido a buscar información de herramientas UML que permitan definir

perfiles UML. El análisis de las bondades de las diferentes herramientas, permitirá elaborar

una propuesta general para la especificación de patrones usando herramientas UML.



Además se pretende mostrar que al usar perfiles para especificar patrones; el perfil está siendo

utilizado no solamente para definir un dominio específico (tal como originariamente se pensó),

sino también para definir un dominio general.



De la misma forma que con “Composite”, se realizará la especificación de otros patrones

de diseño. Luego del análisis de las especificaciones resultantes, se podrá empezar           a

desarrollar una arquitectura para patrones usando perfiles UML.
Referencias



[1] G. Booch, J. Rumbaugh, I. Jacobson, El Lenguaje Unificado de Modelado, Addison-Wesley,

2006, pp. 429-430.



[2]    ISO/IEC, Unified Modeling Language (UML), Version 1.5, International Standard

ISO/IEC 19501.



[3]    E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns. Elements of Reusable

Object- Oriented Software, Addison-Wesley. 1995.



[4]    UML 2.0,      Infraestructure Specification, http://www.omg.org/technology/ documents,

Agosto del 2004.



[5]    A. Le Guennec, G. Sunyé, J. Jézéquel, “Precise Modeling of Design Patterns”, In UML

2000, Vol. 1939 LNCS, 2000, pp. 482-496.



[6]    M. Fontoura, C. Lucena, “Extending UML to Improve the Representation     of     Design

Patterns”, Journal of Object Technology, 2000.



[7]    Y. Sanada, R. Adams, “Representing Design Patterns and Frameworks in UML. Towards

a Comprehensive Approach”, Journal of Object Technology, Vol.1(2), 2002, pp.143–154.
[8]    J. Dong, S. Yang, “Visualizing Design Patterns With A UML Profile”, IEEE Symposium

on Human Centric Computing Languages and Environments (HCC 2003), 2003.



[9]    R. France, D. Kim, E. Song, “A UML-Based Pattern            Specification      Technique”,

       IEEE Transactions     on       Software       Engineering, Vol.30(3), 2004, pp.193-206.



[10]   OMG, “UML Profile for                Patterns Specification”, Parte del “UML Profile

for Enterprise          distributed        Object.          Computing (EDOC) Specification”,

http://www.omg.org/technology/        documents, 2004.



[11] V.      Barotto,        M.       Demonte,       D.     Riesco. “Definición de Patrones de

Diseño a través del metamodelo UML”. Tesis de              Licenciatura en Ciencias      de      la

Computación. Universidad Nacional de Río IV, Argentina. 2005.

Crítica A UML - Based Pattern

  • 1.
    Una crítica a “A UML-Based Pattern Specification Technique” Javier E. Buelvas Cueto, Estudiante del programa de especialización en Ingeniería de Software, Fundación Universitaria Tecnológico Comfenalco La creciente complejidad de los sistemas informáticos representa un reto importante para los ingenieros y arquitectos del software. De la preocupación inicial sobre la definición de la estructura y calidad del código final, se ha pasado a dedicar cada vez más tiempo, atención y esfuerzo al diseño y modelado del sistema. Los modelos proporcionan un mayor nivel de abstracción, permitiendo trabajar con sistemas más complejos, y facilitando el proceso de codificación e implementación del sistema de forma distribuida y en distintas plataformas. En este nuevo contexto, los Patrones de Diseño ayudan a los desarrolladores de software a resolver problemas de diseño orientado a objetos que repetidamente ocurren. Cuando estos adaptan patrones a soluciones particulares, muchas veces elaboran modelos usando UML. Sin embargo, a menudo, UML no es lo suficientemente expresivo para describir patrones apropiadamente. Según [1], Cuando se ve desde fuera, un patrón de diseño se representa como una colaboración parametrizada1. Cuando se ve desde dentro, un patrón e diseño es simplemente una colaboración y se representa con sus partes estructural y de comportamiento. Un patrón representado como una colaboraciones parametrizadas, es un grupo de objetos/clases colaborando entre sí que se pueden abstraer de un conjunto de escenarios general.
  • 2.
    Debido a estetratamiento, se presentan algunas limitaciones para expresar correctamente la semántica asociada a un patrón, principalmente porque estos tienen propósitos diferentes. Una colaboración modela la interacción que puede existir entre un conjunto de objetos para lograr un objetivo específico; un patrón tiene un propósito más general, ya que debe especificar una solución de diseño desde el punto de vista de su estructura y su comportamiento. De hecho, cuando instanciamos una colaboración parametrizada el resultado es otra colaboración, pero la instanciación de un patrón de diseño da lugar a una porción de diseño que debe satisfacer las restricciones del patrón y que resuelve un problema concreto, pudiendo ser puramente estructural y no incluir interacción alguna. Un patrón debería verse como una plantilla capaz de guiar al diseñador en la flexible selección, creación y validación de los elementos (clases, objetos, relaciones, atributos, métodos, etc.,) que participan en la solución de un problema típico de diseño, sin embargo, los “ClassifierRole” o “AssociationRole” de una colaboración parametrizada dependen de clasificadores o asociaciones base que deben existir previamente y donde los “ClassiferRole” o “AssociationRole” son una vista de éstos respectivamente. Además, sólo se pueden ligar clasificadores o asociaciones a un parámetro con la única restricción de que el participante sea del mismo tipo (o un descendiente del tipo) que el parámetro correspondiente. Estos inconvenientes representan un problema para poder especificar la esencia de los patrones de diseño en forma adecuada.
  • 3.
    Una aproximación comosolución a los problemas planteados anteriormente son los perfiles UML (en inglés “UML Profiles”). Estos permiten extender la sintaxis y la semántica d e UML para modelar elementos de dominios particulares. Así como los perfiles UML extienden su vocabulario y los patrones de diseño definen para los diseñadores un vocabulario común; también es posible usar perfiles para definir un vocabulario de patrones en UML. De esta manera, los perfiles pueden ser usados no solamente para dominios específicos, sino también para resolver problemas particulares en diferentes dominios. El perfil es un mecanismo definido por UML (en inglés, Unified Modeling Language) [2] para extender y adaptar UML a una plataforma o dominio particular. Incluye tres elementos: estereotipos, valores etiquetados y restricciones. Los estereotipos extienden el vocabulario UML y es posible asociarle valores etiquetados y restricciones. Si bien, el lenguaje natural es usado para definir restricciones, debido a su precisión, OCL (por sus siglas en inglés, Object Constraint Language) es uno de los más adecuados. Las bondades ofrecidas por los perfiles pueden ser aprovechadas en la transformación de modelos a otros modelos o a código (facilitando la tarea a los diseñadores de software). En los últimos años el concepto de perfil ha servido para cubrir distintos dominios; tales como, tiempo real, procesos de negocio, y otros.
  • 4.
    Cuando los desarrolladoresde software modelan soluciones usando UML, muchas veces encuentran que UML no es lo suficientemente expresivo para describir patrones apropiadamente. Numerosos trabajos de investigación se ocuparon de la descripción de patrones con diferentes enfoques. Algunos trabajos estudiaron el uso de UML para definir y documentar patrones. Por ejemplo, Le Guennec, Sunyé y Jézéquel en [5] modificaron el metamodelo 1.3 para permitir colaboraciones en el meta-nivel y restricciones OCL, en lugar de colaboraciones parametrizadas. La idea era mejorar el modelo de colaboración y las plantillas UML para una mejor definición de los roles de los patrones. La OMG en [10] introdujo la noción de “Paquete de Patrón de Negocio” (consideró que las reglas que gobiernan los conceptos de negocio pueden ser representados con un patrón con restricciones) para definir un patrón, y “Ligamiento de Patrón de Negocio” para aplicar un patrón. Fontoura y Lucena en [6] extendieron UML representando una clase de patrones de diseño llamados “patrones de configuración”. La extensión a UML fue desarrollada expresando un diagrama abstracto que permite mostrar diferentes formas de implementación; y representando, además, un patrón de instanciación. Una técnica de especificación para patrones fue propuesta por France, Kim y Song en [9]. Definieron un lenguaje de metamodelado (usando UML y restricciones OCL) para
  • 5.
    especificar perspectivas depatrones; tales como estructura estática e iteraciones. Una especificación de patrón define una familia de modelos UML en términos de roles. Otros trabajos, como [7] y [8], estuvieron menos orientados a la especificación de patrones para documentación, pero mostraron otras interesantes características. Sanada y Adams en [7] extendieron UML para soportar patrones de diseño en diagramas de clases. Dang y Yang en [8] presentaron un perfil UML para una mejor visualización de patrones de diseño en diagramas de clases. Barotto y Demonte en [11] propusieron una definición de patrones de diseño a través del metamodelo UML. Utilizaron estereotipos con restricciones OCL para especificar los elementos que componen un patrón. Sin embargo, no utilizaron la noción de “perfil UML” definido en UML 2.0 [4], sino conceptos anteriores a dicha versión. EL USO DE PERFILES UML PARA DEFINICIÓN DE PATRONES DE DISEÑO Algunas investigaciones están orientadas a la definición de Patrones de Diseño con Perfiles UML. Estas, analizan las ventajas de los perfiles para definir, documentar y visualizar patrones de diseño. Al definir un perfil por cada patrón, estas van conformando una librería de patrones especificados con perfiles UML. Además, de cierta forma intentan mostrar que las herramientas UML son suficientes para introducir perfiles de patrones, sin implementar una herramienta específica para patrones.
  • 6.
    Algunos resultados parciales Paracomenzar se seleccionaron los patrones diseño denominados “estructurales” de [3]. La experiencia inicial consistió en la definición del patrón “Composite”. Se definieron tres estereotipos de clase: “Component”, “Leaf” and “Composite”; y un esterotipo de asociación, “Children” (ver Figura 1). Fueron establecidas restricciones OCL sobre los estereotipos, la cuales son mostradas a continuación (el metamodelo UML es mostrado en la Figura 2 para entender mejor las especificaciones OCL). Children:(Core::Association) inv: self.connection->exists (participant.isSterotyped (“Composite”) and multiplicity.min=1 and multiplicity.max=1) and self.connection->forAll (c1,c2| c1.participant.isSterotyped (“Composite”) and c2.participant.isSterotyped (“Component”) implies c1.aggregation=#composite and c2.aggregation=#none )
  • 7.
    Conclusiones y trabajosfuturos Los perfiles UML pueden ser útiles para definir, documentar y visualizar patrones de diseño. Además cuentan con la ventaja de que si las herramientas UML permiten introducir perfiles de patrones, no es necesario implementar una herramienta específica para patrones. El trabajo futuro está dirigido a buscar información de herramientas UML que permitan definir perfiles UML. El análisis de las bondades de las diferentes herramientas, permitirá elaborar una propuesta general para la especificación de patrones usando herramientas UML. Además se pretende mostrar que al usar perfiles para especificar patrones; el perfil está siendo utilizado no solamente para definir un dominio específico (tal como originariamente se pensó), sino también para definir un dominio general. De la misma forma que con “Composite”, se realizará la especificación de otros patrones de diseño. Luego del análisis de las especificaciones resultantes, se podrá empezar a desarrollar una arquitectura para patrones usando perfiles UML.
  • 8.
    Referencias [1] G. Booch,J. Rumbaugh, I. Jacobson, El Lenguaje Unificado de Modelado, Addison-Wesley, 2006, pp. 429-430. [2] ISO/IEC, Unified Modeling Language (UML), Version 1.5, International Standard ISO/IEC 19501. [3] E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns. Elements of Reusable Object- Oriented Software, Addison-Wesley. 1995. [4] UML 2.0, Infraestructure Specification, http://www.omg.org/technology/ documents, Agosto del 2004. [5] A. Le Guennec, G. Sunyé, J. Jézéquel, “Precise Modeling of Design Patterns”, In UML 2000, Vol. 1939 LNCS, 2000, pp. 482-496. [6] M. Fontoura, C. Lucena, “Extending UML to Improve the Representation of Design Patterns”, Journal of Object Technology, 2000. [7] Y. Sanada, R. Adams, “Representing Design Patterns and Frameworks in UML. Towards a Comprehensive Approach”, Journal of Object Technology, Vol.1(2), 2002, pp.143–154.
  • 9.
    [8] J. Dong, S. Yang, “Visualizing Design Patterns With A UML Profile”, IEEE Symposium on Human Centric Computing Languages and Environments (HCC 2003), 2003. [9] R. France, D. Kim, E. Song, “A UML-Based Pattern Specification Technique”, IEEE Transactions on Software Engineering, Vol.30(3), 2004, pp.193-206. [10] OMG, “UML Profile for Patterns Specification”, Parte del “UML Profile for Enterprise distributed Object. Computing (EDOC) Specification”, http://www.omg.org/technology/ documents, 2004. [11] V. Barotto, M. Demonte, D. Riesco. “Definición de Patrones de Diseño a través del metamodelo UML”. Tesis de Licenciatura en Ciencias de la Computación. Universidad Nacional de Río IV, Argentina. 2005.