generador de patrones de diseño (gepadi)

103
REPÚBLICA BOLIVARIANA DE VENEZUELA UNIVERSIDAD DEL ZULIA FACULTAD EXPERIMENTAL DE CIENCIAS DIVISIÓN DE PROGRAMAS ESPECIALES LICENCIATURA EN COMPUTACIÓN GENERADOR DE PATRONES DE DISEÑO (GEPADI) Trabajo presentado para optar al ascenso de la categoría de Profesor Asociado de la Universidad del Zulia Autor: Profa. Yaskelly Yedra Maracaibo, 16 de mayo de 2012

Upload: yaskelly-yedra

Post on 16-Jan-2017

48 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Generador de Patrones de Diseño (GEPADI)

REPÚBLICA BOLIVARIANA DE VENEZUELA UNIVERSIDAD DEL ZULIA

FACULTAD EXPERIMENTAL DE CIENCIAS DIVISIÓN DE PROGRAMAS ESPECIALES

LICENCIATURA EN COMPUTACIÓN

GENERADOR DE PATRONES DE DISEÑO (GEPADI)

Trabajo presentado para optar al ascenso de la categoría de Profesor Asociado de la Universidad del Zulia

Autor: Profa. Yaskelly Yedra

Maracaibo, 16 de mayo de 2012

Page 2: Generador de Patrones de Diseño (GEPADI)
Page 3: Generador de Patrones de Diseño (GEPADI)

Yedra Hernández, Yaskelly Yubisay. GENERADOR DE PATRONES DE DISEÑO. Trabajo de Ascenso presentado para optar a la categoría de Profesora Asociada. Universidad del Zulia. Facultad Experimental de Ciencias. Departamento de Computación. Maracaibo. Venezuela. 2012. 115 p.

RESUMEN

Un patrón es la abstracción de una forma concreta que puede repetirse en contextos específicos. Este concepto se aplica en el desarrollo de software, surgiendo distintos tipos de patrones como los de análisis, de arquitectura de software, de usabilidad o de interfaz, entre otros y los de diseño que son el punto central del presente trabajo de ascenso. El objetivo principal de este trabajo fue desarrollar un Generador de Patrones de Diseño (GEPADI) que sirva para implementar cualquier plantilla como solución a un problema dado. La metodología utilizada para desarrollar este generador fue la aplicada por GoF en su libro Patrones de Diseño: Elementos de Software Orientados a Objetos Reutilizables. Como resultado se obtuvo una herramienta que genera patrones de diseño en cualquier dominio del desarrollo de software y a su vez se pueden integrar estos patrones a cualquier aplicación, ya que están guardados en formato XML. Para validar la herramienta se desarrolló un catálogo de patrones en el dominio específico de gobierno electrónico creando patrones para este entorno. Se concluyó que el GEPADI puede generar patrones de diseño para entornos de dominio específico. Palabras clave: patrón, patrones de diseño, patrones GoF, generador de patrones de diseño (GEPADI). Correo electrónico: [email protected]

Page 4: Generador de Patrones de Diseño (GEPADI)

Yedra Hernández, Yaskelly Yubisay. GENERADOR DE PATRONES DE DISEÑO. Trabajo de Ascenso presentado para optar a la categoría de Profesora Asociada. Universidad del Zulia. Facultad Experimental de Ciencias. Departamento de Computación. Maracaibo. Venezuela. 2012. 115 p.

ABSTRACT

A pattern is the abstraction of a concrete form that can be replicated in specific contexts. This concept is applied in the development of software; different types of patterns emerge as the analysis, software architecture, usability or interface, including design and are the focus of this work for promotion. The main objective of this work was to develop a Design Pattern Generator (GEPADI) to serve as a template to implement any solution to a given problem. The methodology used to develop this generator was applied for in his book GoF Design Patterns: Elements of Reusable Object-Oriented Software. The result was a tool that generates design patterns in any domain of software development and in turn these patterns can be integrated to any application, since they are stored in XML format. To validate the tool was developed a catalog of patterns in the specific domain of e-government standards for creating this environment. It was concluded that GEPADI can create design patterns for domain-specific environments.

Key words: pattern, design patterns, GoF patterns, design pattern generator (GEPADI) E-mail: [email protected]

Page 5: Generador de Patrones de Diseño (GEPADI)

ÍNDICE GENERAL

pp

VEREDICTO

RESUMEN

ABSTRACT

ÍNDICE GENERAL

ÍNDICE DE ILUSTRACIONES

ÍNDICE DE TABLAS

INTRODUCCIÓN……………………………………………………………………………………. 1

1. PATRONES EN EL DESARROLLO DE SOFTWARE…………………………………….. 2

1.1. Planteamiento del problema……………………………………………………………… 2

1.2. Definición de patrón……………………………………………………………………….. 4

1.3. Patrones de software……………………………………………………………………… 4

1.4. Patrones de diseño………………………………………………………………………… 7

1.4.1. Patrones de diseño de GRASP…………………………………………………... 11

1.4.2. Patrones de diseño de GoF………………………………………………………. 16

2. ESTADO DEL ARTE…………………………………………………………………………… 20

2.1. Generadores de patrones de diseño…………………………………………………….. 20

2.2. Herramientas de modelados de UML……………………………………………………. 25

3. GENERADOR DE PATRONES DE DISEÑO (GEPADI)…………………………………… 27

3.1. Requisitos del Generador de Patrones de Diseño (GEPADI)………………………. 27

3.1.1. Requisitos de software…………………………………………………………….. 27

3.1.2. Requisitos de hardware…………………………………………………………… 27

3.1.3. Requisitos humanos……………………………………………………………….. 27

3.1.4. Requisitos legales………………………………………………………………….. 27

3.1.5. Requisitos funcionales…………………………………………………………….. 28

3.1.6. Requisitos no funcionales…………………………………………………………. 31

3.2. Metodología de trabajo……………………..……………………………………………... 31

3.3. Interfaces de usuario de GEPADI……………………………………………………… 33

3.3.1. Interfaz principal……………………………………………………………………. 33

Page 6: Generador de Patrones de Diseño (GEPADI)

3.3.2. Interfaz de Patrones…………………………………………………….…………. 34

3.3.3. Interfaz de Consultar………………………………………………………………. 38

3.3.4. Interfaz de Ayuda……………..……………………………………………………. 40

3.4. Beneficios del Generador de Patrones de Diseño...…………………………………… 33

4. VALIDACIÓN DEL GENERADOR…………………………………………………………… 43

4.1. Gobierno Electrónico.……………..………………………………………………………. 43

4.2. Patrones de Diseño en el Gobierno Electrónico...……………………………………... 46

4.2.1. Patrones de Gobierno Electrónico “Info”………………………………………… 47

4.2.2. Patrones de Gobierno Electrónico “Datos del Personal”……..………..……… 49

4.2.3. Patrones de Gobierno Electrónico “Formulario”………………………………… 50

4.2.4. Patrones de Gobierno Electrónico “Formulario BD”….……………………..…. 53

CONCLUSIONES…………………………………………………………………………………….. 57

RECOMENDACIONES………………………………………………………………………………. 59

REFERENCIAS BIBLIOGRÁFICAS………………………………………………………………... 61

ANEXOS………………………………………………………………………………………………. 64

Patrones Ejemplo de Gobierno Electrónico………………………………………….……………. 65

Page 7: Generador de Patrones de Diseño (GEPADI)

ÍNDICE DE ILUSTRACIONES

pp

Figura 1. Pantalla de PatternBox……………………………………………………………… 21

Figura 2. Pantalla de Pattern Wizard…………………………………………………………. 23

Figura 3. Pantalla de DPAToolkit……………………………………………………………… 24

Figura 4. Plantilla del Patrón abstracto

Figura 5. Vista previa

Figura 6. Vista de código

Figura 7. Pantalla principal del generador…………………………………………………… 29

Figura 8. Barra de título………………………………………………………………………… 30

Figura 9. Barra de menú……………………………………………………………………….. 30

Figura 10. Menú desplegable de Patrones…………………………………………………… 33

Figura 11. Menú desplegable de Patrones/Patrones Abstracto…………………………….. 34

Figura 12. Menú desplegable de Patrones/Patrones Abstracto/Agregar..………………..

Figura 13. Menú desplegable de Patrones/Patrones Ejemplos…………………………….. 34

Figura 14. Menú desplegable de Patrones/Exportar…………………………………………. 34

Figura 15. Menú desplegable Consultar……………………………………………………….. 35

Figura 16. Menú desplegable Consultar/Consultar Patrones……………………………….. 36

Figura 17. Menú desplegable Consultar/Consultar Patrones/Abstracto…………………… 37

Figura 18. Menú desplegable Consultar/Consultar Patrones/Ejemplo……………………... 38

Figura 19. Menú desplegable Ayuda…………………………………………………………… 41

Figura 20. Ventana de Ayuda…………………………………………………………………… 41

Figura 21. Ventana de metodología de Trabajo………………………………………………. 42

Figura 22. Acerca del Generador de Patrones de Diseño…………………………………… 42

Figura 23. Estructura del patrón “Info”…………………………………………………………. 47

Figura 24. Estructura del patrón “Datos del Personal”………………………………………. 49

Figura 25. Estructura del patrón “Formulario”…………………………………………………. 51

Figura 26. Estructura del patrón “Formulario BD”…………………………………………….. 53

Page 8: Generador de Patrones de Diseño (GEPADI)

ÍNDICE DE TABLAS

pp

Tabla 1. Niveles de Automatización de Patrones…………………………………………... 25

Tabla 2. Componentes del modelo de estado del gobierno electrónico…………………. 46

Tabla 3. Patrones de Gobierno Electrónico “Info”………………………………………….. 48

Tabla 4. Patrones de Gobierno Electrónico “Datos del Personal”………………………... 50

Tabla 5. Patrones de Gobierno Electrónico “Formulario”………………………………….. 52

Tabla 6. Patrones de Gobierno Electrónico “Formulario BD”……………………………... 55

Page 9: Generador de Patrones de Diseño (GEPADI)

INTRODUCCIÓN

El estudio de patrones abarca diferentes áreas de estudio como la música y la literatura, el

arte, la arquitectura y la psicología. Los recientes enfoques en ingeniería de software

adoptando los patrones de software fueron altamente influenciados por Christopher

Alexander, un investigador de la Universidad de California, Berkeley, quien ha escrito

muchos trabajos sobre patrones encontrados en la arquitectura para casas, edificios, y

comunidades.

Muchas áreas del saber usan patrones de varias maneras: en música y literatura, un patrón

es la estructura o el diseño coherente de una canción o de un libro. En arte, un patrón es la

composición o plan de un trabajo de arte gráfico o plástico. En arquitectura, un patrón es un

diseño o un estilo arquitectónico, o los patrones de comportamiento de las personas, estudio

del que se encarga la psicología.

Los patrones de diseño se presentan como una disciplina de problema-solución que está en

constate evolución entre los diseñadores y desarrolladores que trabajan en el área del

desarrollo de software. Junto a esta evolución han surgido patrones no sólo de diseño, sino

también de análisis, usabilidad y arquitectónicos, pero que no son temas de este trabajo de

ascenso.

Dentro de los patrones de diseño se puede decir que existe dos grandes grupos: los

Patrones Generales de Software para Asignación de Responsabilidades (GRASP) y los

Patrones de diseño de GoF (Gang of Four). Los primeros ayudan al descubrimiento y

asignación de las responsabilidades que deben ser cumplidas en cada caso de uso. Estos

patrones hacen referencia a cuestiones básicas, comunes y fundamentales en el diseño.

Los segundos patrones de diseño, GoF más conocidos como la Banda de los Cuatro), cuyos

autores Gamma, Helm, Johnson y Vlissides publicaron un libro en 1995 que se volvió un

bestseller denominado Patrones de Diseño: Elementos de Software Orientados a Objetos

Reutilizables, donde los patrones de diseño se convierten en imprescindibles para todos los

diseñadores y desarrolladores de software orientado a objetos.

Basado en este bestseller, la autora de este trabajo de ascenso se propuso diseñar y

desarrollar un Generador de Patrones de Diseño (GEPADI) basado en los patrones de

diseño de GoF, en cuanto a sus basamentos teóricos y estructurales. Cabe destacar que

para seleccionar los patrones de GoF se realizó una investigación documental de todos los

Page 10: Generador de Patrones de Diseño (GEPADI)

2

patrones de diseño que existen en el desarrollo de software. Se seleccionó estos tipos de

patrones porque la aplicación que resultaría del diseño y desarrollo del Generador de

Patrones de Diseño (GEPADI) resulta un aporte académico, que sirve para el aprendizaje de

los alumnos de la Licenciatura en Computación.

Page 11: Generador de Patrones de Diseño (GEPADI)

1. PATRONES EN EL DESARROLLO DE SOFTWARE

Como introducción al capítulo uno (1) se plantea de forma breve el entorno en el cual

se desenvuelve el problema a investigar, así como sus objetivos. Luego se hace un

análisis sobre los patrones y cómo estos se adaptan al desarrollo de software. Se

clasifican según su nivel de abstracción y detalle, y el contexto particular en el cual se

aplican. Para luego entrar en más detalle en los patrones de diseño, específicamente

los de GoF que es el objetivo central de este trabajo de ascenso.

1.1. Planteamiento del problema

Uno de los paradigmas que maneja la programación orientada a objetos es la técnica

de la reutilización y en los últimos años se viene aplicando para el desarrollo de

software. Esto es debido a las ventajas que presenta la reutilización como lo son:

reducción de tiempos, disminución del esfuerzo de mantenimiento, eficiencia,

consistencia, fiabilidad y protección de la inversión en desarrollos, entre otros.

Para aplicar la reutilización existen diferentes mecanismos como los componentes, los

frameworks, los objetos distribuidos y los patrones de diseño. De estos mecanismos

de reutilización, los patrones de diseño son los que se van estudiar para poder

desarrollar el trabajo de ascenso

Este trabajo tiene como objetivo fundamental desarrollar una herramienta que genere

patrones de diseño que sirva de apoyo la enseñanza académica de los mismos. La

idea es que de un modo didáctico la herramienta sirva para la comprensión y

utilización de patrones de diseño de forma clara y correcta en la construcción de

software.

En la búsqueda de una herramienta de software libre que sirva para la generación de

patrones de diseño, sólo se encontraron aquellas que funcionan en forma de plug-in

de eclipse y sólo una está disponible para la plataforma Windows y cuya instalación no

funciona de manera óptima. Por otro lado existen herramientas de modelados de UML

que podría utilizarse como generador de patrones de diseño pero que son

herramientas propiamente creadas para tal fin. De esta manera se pudo constatar que

Page 12: Generador de Patrones de Diseño (GEPADI)

3

existe un vacío en desarrollo de los patrones de software en cuanto a la ausencia de

una herramienta específica de generación de patrones de diseño.

Formulación del problema

Por los motivos expuestos anteriormente se propone la creación de una herramienta

que funciones como Generador de Patrones de Diseño (GEPADI) que diseñe y

desarrolle catálogos de patrones que sirvan luego para ser exportados a otras

plataformas de trabajo y cumplan así su función de elementos reusables.

Pregunta de investigación

¿Es posible desarrollar un generador de patrones de diseño ejecutable que trabaje de

manera manual y automática, cuyos patrones creados puedan ser incorporados a

cualquier aplicación fácilmente?

Objetivos del Trabajo de Ascenso

El objetivo principal fue el siguiente:

Desarrollar un Generador de Patrones de Diseño (GEPADI) que sirva para

implementar cualquier plantilla como solución a un problema dado.

Para desarrollar este objetivo general es necesario cumplir los siguientes objetivos

específicos:

Analizar los patrones de diseño desde el punto de vista de un enfoque para

poder focalizar mejor su estudio y así poder llevar la teoría a la práctica a

través del desarrollo de una herramienta.

Estudiar el estado del arte de las herramientas utilizadas como generadores de

patrones de diseño para encontrar un punto de partida en esta investigación y

también para evaluar la originalidad de la herramienta que se está

proponiendo.

Analizar cada uno de los requisitos que son necesarios para poner en marcha

la herramienta.

Diseñar cada uno de las interfaces que va a contener el generador de patrones

de diseño para que el usuario pueda interactuar con ella de manera intuitiva.

Desarrollar cada uno de los módulos de las interfaces a nivel de programación

para que el generador pueda actuar de manera automática.

Page 13: Generador de Patrones de Diseño (GEPADI)

4

Validar la herramienta a través de la creación de un catálogo de patrones

perteneciente a un dominio específico para poder demostrar la utilidad que

tiene el generador a nivel académico y científico.

1.2. Definición de patrón

El concepto de patrón nace de Christopher Alexander cuando en 1977 un libro sobre el

tema, que describen los patrones de utilidad para el diseño y construcción, en el área

de la arquitectura. Esto incluye los patrones de diseño de toda una comunidad, de las

tierras agrícolas a los centros comerciales a lugares de culto y cementerios. Este libro

explica los patrones similares a los grupos de diseño de edificios, como una mansión o

en la escuela, arreglar habitaciones en una casa de acuerdo a su propósito, y el

paisaje exterior del edificio.

Este concepto es transportado al ámbito del desarrollo de software orientado a objetos

y se aplica al diseño. De allí es adoptado para el desarrollo en general y actualmente

se aplica en la mayoría de las etapas del proceso. Los patrones podrían quedar

definidos como soluciones simples y elegantes a problemas específicos y comunes del

diseño orientado a objetos. Son soluciones basadas en la experiencia y que se ha

demostrado que funcionan.

Un patrón se podría definir como una solución recurrente para un problema en un

contexto establecido. Podríamos entender un contexto como un entorno, situación o

condiciones interrelacionadas dentro de las cuales existe algo. Un problema se podría

ver como una cuestión insatisfecha, algo que se necesita investigar y resolver. Un

problema se puede especificar mediante un conjunto de causas y efectos.

Normalmente un problema está restringido al contexto en el que ocurre. La solución

puede hacer alusión a la respuesta al problema dentro del contexto, que nos permite

resolver las dificultades.

Un patrón se puede agrupar en un catálogo de acuerdo a sus principales

características: contexto, problema y solución, junto con otros aspectos importantes,

como causas y consecuencias.

1.3. Patrones de software

Los patrones de software son un conjunto de soluciones que se le dan a determinados

problemas, y que pueden ser utilizados en diferentes contextos de trabajo. Los

Page 14: Generador de Patrones de Diseño (GEPADI)

5

patrones de software deben documentarse para formar un catálogo de referencia

según sea el contexto de aplicación. De esta manera se optimiza el tiempo de los

desarrolladores de software ya que cuentan con soluciones prediseñadas, que sólo en

algunos casos deben tener creatividad para adaptarlos a las necesidades del dominio.

Los patrones pueden aplicarse a nivel de: el análisis de requisito, el diseño de la

arquitectura, el diseño detallado, la interacción con el usuario y el código (Bonillo,

2006). Por lo tanto, los patrones se pueden clasificar en patrones de análisis, de

arquitectura, de usabilidad y los que vamos a estudiar en este trabajo que son los

patrones de diseño. A continuación se hace una pequeña descripción de esta

clasificación para luego entrar en detalle en los patrones de diseño.

Patrones de análisis: este tipo de patrones los dio a conocer por primera vez Fowler

(1997) en su libro “Analysis Patterns”, los define como un grupo de conceptos que

representan una construcción común en el modelado de negocios. Puede ser

relevante para un único dominio, o puede abarcar muchos dominios. La idea central es

la construcción de escenarios utilizando patrones. Se pretende tener una visión más

conceptual y estructural de las situaciones, con el fin de identificar la naturaleza

intrínseca de las mismas. Con esa visión, es posible determinar el tipo de escenario

correspondiente a cada situación y así, elegir un patrón de un catálogo, rehusando su

estructura con el fin de derivar el escenario más fácil y directamente. Estos patrones

son importantes porque nos ayudan a entender cómo la gente percibir el mundo y de

esta manera se pueden hallar soluciones informáticas a problemas dentro de un

contexto.

Patrones de arquitectura: son esquemas que expresan la estructura fundamental de

un sistema de software. Proporciona un conjunto predefinido de subsistemas,

especifica sus responsabilidades, e incluye las normas y directrices para la

organización de las relaciones entre ellos (Buschmann, Meunier, Rohnert, Sommmerld

y Stal, 1996). Los patrones más conocidos dentro de esta categoría son: Master-View-

Controller, Page Template, Page Controller y Front Controller, entre otros

Patrones de usabilidad

Para Perzel (1999), un patrón de usabilidad se define como la descripción de

soluciones que mejoran los atributos de usabilidad. Los aspectos de usabilidad

tratados con estos patrones se refieren básicamente a aspectos de interacción entre el

Page 15: Generador de Patrones de Diseño (GEPADI)

6

usuario y el sistema. Para ello, se centran en la esencia de un problema y su solución,

abstrayendo los aspectos del diseño necesarios para aportar las soluciones.

Dentro del concepto de patrones de usabilidad entra también la definición de patrón de

interacción o patrón de interfaz de usuario, que describe una solución exitosa a un

problema recurrente concerniente a interfaz, en un contexto dado. También se puede

decir que un patrón de interacción es un medio de comunicación que se expresa en

una notación sencilla, a fin de ser entendida por las personas del equipo de diseño de

la interacción (Mahemoff y Johnston, 1998).

A continuación, se nombran algunos de los trabajos donde se recopilan los patrones

más relevantes en el área del desarrollo de interfaces de usuario.

Patrones de usabilidad de Perzel (1999) para ambientes Web: describen una serie

de patrones orientados a problemas de usabilidad en la Web, abarcando tanto los

ambientes de web estáticos como dinámicos.

Patrones de interacción de Welie y Traetteberg (2000): están centrados en

presentar soluciones a los problemas que el usuario final tienen al interactuar con

los sistemas. El trabajo de estos dos autores analiza y presenta los patrones de

interacción en las interfaces de usuario donde la usabilidad es la esencia en la

calidad del diseño, en su trabajo exponen patrones que facilitan el diseño de la

interfaces de usuario.

Colección de patrones de usabilidad de Brighton (Griffiths, 2002): define un

conjunto pequeño de patrones de usabilidad que está orientado más al mundo

industrial que al académico, ya que estos patrones carecen de publicaciones que

destaquen en ambientes académicos. Aun así, son muy referenciados por el resto

de autores dentro del contexto de los patrones de usabilidad, por lo que tienen un

gran reconocimiento dentro de la comunidad científica.

Patrones de diseño de la interacción de Tidwell (2005): estos patrones son

similares a los propuestos por Wilie y col. (2000) y Perzel (1999). Los protones

propuestos por Tidwell patrones están más orientados a representar aspectos del

diseño de la interfaz que a aspectos de usabilidad exclusivamente. Para Tidwell,

los patrones de interacción son una ayuda para diseñar el modelo conceptual que

hay detrás de la interfaz. Esto quiere decir que los diseñadores empiezan el

Page 16: Generador de Patrones de Diseño (GEPADI)

7

desarrollo del sistema por el diseño de la interfaz; según las necesidades del

usuario y después diseñan el modelo conceptual que hay detrás de esa interfaz.

También se puede hablar de otros tipos de patrones software, como son:

Patrones de programación concurrente.

Patrones de organización del código.

Patrones de optimización de código.

Patrones de robustez de código.

Patrones de la fase de prueba.

Patrones en la ingeniería de requerimientos

La diferencia entre estos tipos de patrones está en los diferentes niveles de

abstracción y detalle, y del contexto particular en el cual se aplican o de la etapa en el

proceso de desarrollo. Así, Los patrones de análisis se refieren a la etapa de análisis

del ciclo de vida de construcción de software. Los patrones de arquitectura son

estrategias de alto nivel que involucran a los componentes, las propiedades y

mecanismos globales de un sistema.

Para el propósito del presente trabajo de ascensor se consideró necesario analizar en

particular los Patrones de Diseño.

1.4. Patrones de diseño

Orígenes de los patrones de diseño

Las ideas de Alexander fueron utilizadas por Ward Cunningham y Kent Beck para

desarrollar un lenguaje de patrones (compuesto por cinco patrones) como guía de

iniciación a la programación en Smalltalk, presentando su trabajo en la OOPSLA’87

(Object-Oriented Programming Systems and Languages). Posteriormente, Coplien

(1992) fue recopilando y creando un catálogo de Idioms (es un tipo de patrón) propios

de C++ que fue posteriormente publicado en 1992 en su libro Advanced C++

Programming Styles and Idioms.

Durante los años comprendidos entre 1990 y 1994 diversos workshops sobre el tema

tuvieron lugar, especialmente en las diversas ediciones de la OOPSLA, hasta que en

el congreso de OOPSLA’94 Gamma, Helm, Jonhson y Vlissides (normalmente

referenciados como la Banda de los Cuatro – The Gang of Four – o simplemente por

GoF), recopilado su trabajo, que sería publicado en el afamado libro Design Patterns:

Page 17: Generador de Patrones de Diseño (GEPADI)

8

Elements of Reusable Object-Oriented Software en 1995. Este libro fue considerado

como el mejor libro de orientación a objeto de 1995 y el mejor libro de orientación al

objeto de todos los tiempos por la revista JOOP (Journal of Object Oriented

Programming) en su número de septiembre de 1995. Para conocer con un mayor

detalle la historia de los patrones software se puede visitar la página HistoryOfPatterns

(2011) en el WikiWiki Web de Cunningham.

Definición de los patrones de diseño

Alexander (1977) dice que “Cada patrón describe un problema que ocurre una y otra

vez en nuestro entorno, para describir después el núcleo de la solución a ese

problema, de tal manera que esa solución pueda ser usada más de un millón de veces

sin hacerlo siquiera dos veces de la misma forma”.

Elementos esenciales de un patrón: según Alexander (1977) estos son los cuatro

(4) elementos fundamentales que deben contener toda plantilla de un patrón.

1. Nombre del patrón: describe de alguna manera el problema, la solución y

consecuencia en una o dos palabras. Ampliando de esta manera nuestro

vocabulario de diseño.

2. Problema: aquí se describe el problema y su contexto. Puede ser que se describa

los problemas específicos de diseño, como la forma de representar los algoritmos

como objetos. Se podría describir las clases u objetos de estructuras que son

sintomáticos de un diseño flexible.

3. Solución: describen los elementos que componen el diseño, sus relaciones,

responsabilidades y colaboraciones. La solución no describe un diseño particular de

hormigón o de aplicación, ya que un patrón es como una plantilla que se puede aplicar

en muchas situaciones diferentes. En cambio, el patrón proporciona una descripción

abstracta de un problema de diseño y la forma en la disposición general de los

elementos (Clases y objetos en nuestro caso) los que resuelve.

4. Consecuencia: son los resultados y compromisos de aplicar el patrón. Las

consecuencias para el software se refieren a menudo al espacio y el tiempo de las

compensaciones. Pueden abordar los problemas del lenguaje y la aplicación. Dado

que la reutilización es a menudo un factor en el diseño orientado a objetos, las

consecuencias de un modelo son su impacto en la flexibilidad del sistema,

Page 18: Generador de Patrones de Diseño (GEPADI)

9

extensibilidad, o la portabilidad. El llistado de estas consecuencias de forma explícita

ayuda a entender y a evaluarlos.

Cualidades de un patrón de diseño

Lea (1994), en su artículo “Christopher Alexander: an Introduction for Object-Oriented

Designers” describe las cualidades que debe tener un patrón de diseño, las cuales se

resumen a continuación:

Encapsulación: cada patrón encapsula un problema bien definido y su solución en un

dominio particular. Los patrones deberían de proporcionar límites claros que ayuden a

cristalizar el entorno del problema y el entorno de la solución empaquetados en un

entramado distinto, con fragmentos interconectados. Los patrones son independientes,

específicos, y formulan con precisión suficiente para dejar en claro cuándo se aplican y

se capturan problemas reales.

Abstracción: los patrones sirven como abstracciones que contienen dominios

conocidos y experiencia, y podrían ocurrir en distintos niveles jerárquicos de

granularidad conceptual.

Extensión y variabilidad: cada patrón debería ser abierto por extensión o

parametrización por otros patrones, de tal forma que pueden aplicarse juntos para

solucionar un gran problema. Un patrón solución debería ser también capaz de realizar

una variedad infinita de implementaciones (de forma individual, y también en

conjunción con otros patrones). Los patrones pueden extenderse hasta arbitrariamente

niveles de detalle fino. Los patrones son utilizados en el desarrollo de software

mediante la búsqueda de una colección de entradas frente a las características

deseables de proyectos en cuestión, donde cada uno de estos a su vez puede requerir

sub-patrones de otros. La experimentación con posibles variantes y las pruebas de las

relaciones entre patrones junto con las limitaciones, ajustes y especializaciones

forman situaciones específicas y de refinamientos. Por ejemplo, mientras que sólo un

pequeño conjunto de patrones normalmente se aplican en el diseño de una cierta

comunidad de viviendas, cada casa será a su vez un micro-patrón. Debido a que los

detalles de las instancias de los patrones están encapsulados, estos pueden variar

dentro de los límites establecidos. Estos datos a menudo impactan y limitan aún más

los de otros modelos relacionados. Pero, de nuevo, esta variabilidad se mantiene

dentro de las fronteras de alto nivel de limitaciones.

Page 19: Generador de Patrones de Diseño (GEPADI)

10

Generatividad y composición: cada patrón, una vez aplicado, genera un contexto

resultante, el cual concuerda con el contexto inicial de uno o más de uno de los

patrones del catálogo. Está subsecuencia de patrones podría luego ser aplicada

progresivamente para conseguir el objetivo final de generación de un “todo” o solución

completa. Los patrones son aplicados por el principio de evolución fragmentación.

Pero los patrones no son simplemente de naturaleza lineal, más bien esos patrones en

un nivel particular de abstracción y granularidad podrían guiar hacia o ser compuestos

con otros patrones para modificar niveles de escala.

Equilibrio: cada patrón debe realizar algún tipo de balance entre sus efectos y sus

restricciones. Cada patrón se identifica con un espacio de soluciones que contiene un

invariante que minimiza el conflicto entre las fuerzas y sus limitaciones. Cuando un

modelo se utiliza en una aplicación, el equilibrio proporciona una razón para cada paso

del diseño, se remonte las limitaciones del problema. El fundamento que la solución

cumple con este equilibrio puede ser formal, derivación teórica, una abstracción de lo

empírico datos, las observaciones de la estructura en forma natural o los objetos

tradicionales, una serie de ejemplos convincentes, análisis de las soluciones deficiente

o errónea, o cualquier mezcla de estos.

Consecuencias del uso de patrones de diseño

Los patrones guardan experiencias de diseño orientado a objetos. Además

nombran, evalúan y explican diseños que se repiten a menudo en los sistemas

orientados a objetos.

Facilitan el aprendizaje de diseñadores junior, y permiten ahorro de tiempo en

la elaboración de diseños puesto que la toma de decisiones es automática;

debido a que ayudan a escoger alternativas de diseño.

Facilitan la comunicación entre diseñadores debido a que establecen un marco

de referencia de terminología y justificación, puesto que son conocidas las

clases que intervienen en ellos y las interacciones entre los objetos.

Mejoran la documentación y el mantenimiento de las aplicaciones.

Page 20: Generador de Patrones de Diseño (GEPADI)

11

Existen dos tipos de patrones de diseño: patrones de diseño GRASP y los patrones de

diseño de GoF los cuales se explican a continuación.

1.4.1. Patrones de diseño GRASP (General Responsability Assignment Software

Patterns)

Los Patrones Generales de Software para Asignación de Responsabilidades como se

le denomina en español, “describen los principios fundamentales de diseño de objetos

y la asignación de responsabilidades, expresados como patrones” Craig Larman

(2004).

Las responsabilidades están relacionadas con las obligaciones de un objeto en cuanto

su comportamiento, estás se representa a través de diagramas de interacción. Las

responsabilidades pueden pertenecer principalmente a dos categorías: hacer y

conocer.

Entre las responsabilidades de un objeto relacionadas con hacer podemos encontrar:

• Hacer algo en uno mismo.

• Iniciar una acción en otros objetos.

• Controlar y coordinar actividades en otros objetos.

Entre las responsabilidades relacionadas con conocer se encuentran:

• Estar enterado de los datos privados encapsulados.

• Estar enterado de la existencia de objetos conexos.

• Estar enterado de cosas que se puede derivar o calcular.

Las responsabilidades se asignan a las clases de los objetos durante el diseño de

objetos. Por ejemplo, podría declarar que “una Venta es responsable de la creación de

una LineaDeVenta” (un hacer), o “una Venta es responsable de conocer su total” (un

conocer”. Las responsabilidades relevantes relacionadas con conocer a menudo se

pueden inferir a partir del modelo del dominio, debido a los atributos y asociaciones

que describe.

Cada clase tiene ciertas responsabilidades, que son cumplidas a través de sus

métodos, y por la forma en que colabora con las otras clases. Las decisiones poco

acertadas sobre la asignación de responsabilidades de cada clase, dan origen a

Page 21: Generador de Patrones de Diseño (GEPADI)

12

sistemas y componentes frágiles y difíciles de mantener, entender, reutilizar o

extender.

Estructura de los Patrones GRASP

Al igual que otros autores en el área de patrones de software, Larman (2004) propone

su propia estructura para explicar los patrones de diseño que propone en su libro

“UML y Patrones” donde expones los patrones de GRASP.

Nombre del patrón: Experto en información

Solución: Asignar una responsabilidad a la clase que tiene la información para cumplirla.

Problema que resuelve: ¿Cuál es el principio básico mediante el cual asignaremos responsabilidades a los objetos?

Esta estructura es la que utiliza Larman (2004) para explicar cada uno de los patrones

generales de software de asignación de responsabilidades que propones. Y a través

de esta estructura se puede apreciar que un patrón, es una es una descripción de un

problema y la solución, a la que se da un nombre, y que se puede aplicar a nuevos

contextos.

Tipos de Patrones de GRASP:

Patrón Experto en Información

Solución: Asignar una responsabilidad al experto en información, la clase que

cuenta con la información necesaria para cumplir la responsabilidad.

Problema: ¿Cuál es el principio fundamental en virtud del cual se asignan las

responsabilidades en diseño orientado a objetos?

Un modelo de clase puede definir docenas y hasta cientos de clases de

software, y una aplicación tal vez requiera el cumplimiento de cientos o miles

de responsabilidades. Durante el diseño orientado a objetos, cuando se definen

las interacciones entre los objetos, tomamos decisiones sobre la asignación de

responsabilidades a las clases. Si se hacen de forma adecuada los sistemas

tienden a ser más fáciles de entender, mantener y ampliar, y se nos presenta la

oportunidad de reutilizar los componentes en futuras aplicaciones.

Page 22: Generador de Patrones de Diseño (GEPADI)

13

Patrón Creador

Solución: Asignar a la clase B la responsabilidad de crear una instancia de

clase A en uno de los siguientes casos:

• B agrega los objetos A.

• B contiene los objetos A.

• B registra las instancias de los objetos A.

• B utiliza específicamente los objetos A.

• B tiene los datos de inicialización que serán transmitidos a A cuando

este objeto sea creado (así que B es un experto respecto a la creación

de A).

B es un Creador de los objetos A.

Si existe más de una opción, prefiera a la clase B que contenga la clase A.

Problema: ¿Quién debería ser responsable de crear una nueva instancia de

alguna clase?

La creación de objetos es una de las actividades más frecuentes en un sistema

orientado a objetos. En consecuencia, es conveniente contar con un principio

general para asignar las responsabilidades concernientes a ella. El diseño bien

asignado, puede soportar un bajo acoplamiento, una mayor claridad, el

encapsulamiento y la reutilización.

Patrón Bajo Acoplamiento

Solución: Asignar una responsabilidad para mantener bajo acoplamiento.

Problema: ¿Cómo dar a una clase dependencia escasa y a un aumento de la

reutilización?

El acoplamiento es una medida de la fuerza con que la clase está conectada a

otras clases, con que las conoce y con que recurre a ellas. Una clase con bajo

acoplamiento no depende de muchas otras, depende del contexto.

Una clase con Alto acoplamiento recurre a muchas otras, este tipo de clases no

es conveniente, pues presentan los siguientes problemas:

• Los cambios de las clases afines ocasionan cambios locales.

• Son más difíciles de entender cuando están aisladas

Page 23: Generador de Patrones de Diseño (GEPADI)

14

• Son más difíciles de reutilizar por que se requiere la presencia de otras

clases de las que dependen.

Patrón Alta cohesión

Solución: Asignar una responsabilidad de modo que la cohesión siga siendo

alta.

Problema: ¿Cómo mantener la complejidad dentro de límites manejables?

En la perspectiva del diseño orientado a objetos, la cohesión es una medida de

cuan relacionadas y enfocadas están las responsabilidades de una clase. Una

alta cohesión caracteriza a las clases con responsabilidades estrechamente

relacionadas que no realicen un trabajo enorme.

Una clase con baja cohesión hace muchas cosas no afines o un trabajo

excesivo. No conviene este tipo de clases pues presentan los siguientes

problemas:

• Son difíciles de comprender.

• Son difíciles de reutilizar.

• Son difíciles de conservar.

• Son delicadas, las afectan constantemente los cambios.

Las clases con baja cohesión a menudo representan un alto grado de

abstracción o han asumido responsabilidades que deberían haber delegado a

otros objetos.

Controlador

Solución: Asignar la responsabilidad del manejo de un mensaje de los eventos

de un sistema a una clase que represente una de las siguientes opciones:

• El sistema global (controlador de fachada).

• La empresa u organización global (controlador de fachada).

• Algo en el mundo real que es activo (por ejemplo el papel de una

persona) y que pueda participar en la tarea (controlador de tareas).

• Un manejador artificial de todos los eventos del sistema de un caso de

uso, generalmente denominados “Manejador <nombre caso de uso>”

(Controlador de casos de uso).

Page 24: Generador de Patrones de Diseño (GEPADI)

15

Se debe usar la misma clase de controlador con todos los eventos del sistema

en el mismo caso de uso. En la lista no figuran las clases ventana, aplicación,

vista ni documento, estas clases no deben ejecutar las tareas asociadas a los

eventos del sistema; generalmente las reciben y las delegan al controlador.

Problema: ¿Quién debería encargarse de atender un evento del sistema.

Un evento del sistema es un evento de alto nivel generado por un actor

externo; es un evento de entrada externa. Se asocia a operaciones del sistema:

las que emite en respuesta a los eventos del sistema.

Polimorfismo

Solución: Cuando las alternativas o comportamientos relacionados varían

según el tipo (clase), asigne la responsabilidad para el comportamiento,

(utilizando operaciones polimórficas) a los tipos para los que varía el

comportamiento1. No deben hacerse comprobaciones acerca del tipo del objeto

y no debe utilizarse la lógica condicional para llevar a cabo alternativas

diferentes basadas en el tipo.

Problema: ¿Cómo manejar las alternativas basadas en el tipo?

• La variación condicional es fundamental en el desarrollo de software

• Si se diseña una programa utilizando sentencias de la lógica

condicional, en el momento que aparezca una nueva variación, se

requerirán modificaciones en la lógica de los casos.

• Esto dificulta que el software se extienda con facilidad como nuevas

variaciones porque se tiende a necesitar cambios en varios sitios.

¿Cómo crear componentes software conectables?

• Viendo los componentes en las relaciones cliente-servidor, ¿cómo se

puede sustituir un componente servidor por otro, sin afectar al cliente?

Fabricación Pura

Solución: Asignar un conjunto de responsabilidades altamente cohesivo a una

clase artificial o de conveniencia que no representa un concepto del dominio

del problema, algo inventariado para soportar alta cohesión, bajo acoplamiento

y reutilización.

1 El polimorfismo tiene varios significados relacionados. En este contexto, significa, “asignar el mismo nombre a

servicios en diferentes objetos” (Coad, 1995) cuando los servicios son parecidos o están relacionados.

Page 25: Generador de Patrones de Diseño (GEPADI)

16

Problema: ¿Qué objetos deberían tener la responsabilidad cuando no quiere

violar los objetos del Patrón de Alta Cohesión y Bajo Acoplamiento, u otro, pero

las soluciones que ofrece el Expertos (por ejemplo) no son adecuadas?

Indirección

Solución: Asignar la responsabilidad a un objeto intermedio que medie entre

otros componentes o servicios de manera que no se acoplen directamente. El

intermediario crea una indirección entre los otros componentes.

Problema: ¿Dónde asignar una responsabilidad, para evitar el acoplamiento

directo entre dos (o más) cosas? ¿Cómo desacoplar los objetos de manera que

se soporte el bajo acoplamiento y el potencial para reutilizar permanezca más

alto?

Variaciones Protegidas

Solución: Identifique los puntos de variaciones previstas o de inestabilidad;

asigne responsabilidades para crear una interfaz estable alrededor de ellos.

Problema: ¿Cómo diseñar objetos, subsistemas y sistemas de manera que las

variaciones o inestabilidades en estos elementos no tengan un impacto no

deseable en otros elementos?

1.4.2. Patrones de diseño GoF

Los patrones GoF, llamados así por Gang of Four, que en español significa Banda de

los Cuatro, formada por Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides,

publicaron un libro en 1995 titulado: “Patrones de Diseño: Elementos de Software

Orientados a Objetos Reutilizables” donde describen 23 patrones clasificados según

su propósito. Con este libro se abrió un nuevo capítulo en el diseño y desarrollo de

software. Ellos clasifican los patrones de diseño en tres (3) categorías basadas en su

propósito: creacionales, estructurales y de comportamiento. A continuación se explican

cada uno de ellos y los patrones que lo contienen.

Page 26: Generador de Patrones de Diseño (GEPADI)

17

De Creación: estos patrones tratan de crear instancias de objetos. Ayudan a crear un

sistema independiente de cómo los objetos se crean, componen, y representar. Un

patrón de creación de clase utiliza la herencia como un mecanismo para lograr la

instanciación de la clase, mientras que un patrón creacional de objeto va a delegar la

creación de instancias de otro objeto. Dentro de estos patrones se encuentran:

Abstract Factory: Proporciona una interfaz para crear familias de objetos

relacionados sin especificar sus clases concretas

Builder: Separa la construcción de un objeto complejo de su representación

Factory Method: Define una interfaz para crear un objeto, pero deja que sean

las subclases las que decidan que clase instanciar.

Prototype: Especifica los tipos de objetos a crear por medio de una instancia

prototípica, y crea nuevos objetos copiando este prototipo

Singleton: Garantiza que una clase solo tenga una instancia y proporciona un

punto de acceso global a la misma.

De Estructura: estos patrones describen cómo las clases y los objetos se componen

para formar estructuras más grandes y proporcionar de esa manera nuevas

funcionalidades. Los patrones estructurales de clase utilizan la herencia para

componer interfaces o implementaciones. Los patrones estructurales de objetos crean

objetos complejos agregando objetos individuales, de esta manera se llega a las

grandes estructuras. Dentro de estos patrones se encuentran:

Adapter: Convierte la interfaz de una clase en otra distinta, que es la que

esperan los clientes.

Bridge: Desacopla una abstracción de su implementación, de manera que

puedan variar de forma independiente.

Composite: Combina objetos en estructuras de árboles para representar

jerarquías de parte-todo.

Decorator: Añade dinámicamente nuevas responsabilidades a un objeto.

Alternativa de la herencia.

Facade: Proporciona una interfaz unificada para un conjunto de interfaces de

un subsistema.

Flyweight: Usa el compartimiento para permitir un gran número de objetos de

grano fino de forma eficiente.

Page 27: Generador de Patrones de Diseño (GEPADI)

18

Proxy: Proporciona un sustituto o representante de otro objeto para controlar el

acceso a este.

De Comportamiento: tienen que ver con los algoritmos y la asignación de

responsabilidades entre objetos. Los patrones del comportamiento no sólo describir los

patrones de los objetos o clases, sino también los patrones de comunicación entre

ellos. Los patrones de comportamiento de clase usan la herencia para distribuir el

comportamiento entre clases. Los patrones de comportamiento de objetos nos

permiten analizar los patrones de comunicación entre objetos interconectados. Dentro

de estos patrones se encuentran:

Chain of Responsibility: Evita acoplar el emisor de una petición a su receptor, al

dar a más de un objeto la posibilidad de responder a la petición.

Command: Encapsula una petición en un objeto, permitiendo así entre otras

cosas parametrizar a los clientes con distintas peticiones, encolar o llevar un

registro de las mismas.

Interpreter: Dado un lenguaje, define una representación de su gramática junto

con un intérprete que usa dicha representación para interpretar las sentencias

del lenguaje.

Iterator: Proporciona un modo de acceder secuencialmente a los elementos de

un objeto agregado sin exponer su representación interna

Mediator: Define un objeto que encapsula cómo interactúan un conjunto de

objetos.

Memento: Representa y externaliza el estado interno de un objeto sin violar su

encapsulación

Observer: Defina una dependencia de uno a muchos entre objetos, de forma

que cuando un objeto cambia de estado, se notifican y se actualizan

automáticamente todos los objetos que dependen de él.

State: Permite que un objeto modifique su comportamiento cada vez que

cambia su estado interno.

Strategy: Define una familia de algoritmos, encapsula cada uno de ellos y los

hace intercambiables.

Template Method: Define en una operación el esqueleto de un algoritmo

delegando en las subclases algunos de sus pasos.

Page 28: Generador de Patrones de Diseño (GEPADI)

19

Visitor: Representa una operación sobre los elementos de una estructura de

objetos. Permite definir una nueva operación sin cambiar las clases de los

elementos sobre los que opera.

Page 29: Generador de Patrones de Diseño (GEPADI)

2. ESTADO DEL ARTE

Desde que Gamma, Helm, Johnson y Vlissides se unieron en 1995 para escribir el libro

“Patrones de Diseño: Elementos de Software Orientados a Objetos Reutilizables”, el

número de patrones de diseño se vio incrementado y hoy podemos contar con una

infinidad de patrones. Existen en Internet muchos repositorios de patrones de diseño que

son continuamente actualizados, mantenidos y documentados. Uno de los primeros

establecidos en 1995 se llama “Portland Pattern Repository” y se mantienen por Ward

Cunningham. Pero, en estos repositorios muchas veces no se consiguen patrones de

diseño para ciertos dominios específicos, y de allí la necesidad de recurrir a un generador

de patrones de diseño.

A parte de que existen estos repositorios de patrones de diseños existen en área de

investigación del desarrollo de software algunos generadores de patrones de software que

han surgido y otras herramientas como los modeladores de UML que se prestan para esta

tarea pero que no están creadas para tal fin. Este capítulo trata sobre el estado del arte de

estas herramientas, esto se hizo con la finalidad de encontrar un punto de partida para

esta investigación y para también evaluar la originalidad de la herramienta que se está

proponiendo.

2.1. Generadores de patrones de diseño

En el área de los generadores de patrones de diseño se encontraron tres (3) herramientas

que funcionan en forma de plug-in1 bajo Eclipse, y una (1) que se puede correr o ejecutar

(.exe) bajo el sistema operativo Windows, a continuación se describen de forma breve:

PatternBox (2011) es un editor de patrones de diseño para Eclipse, este editor

crea las clases en Java y las interfaces se pueden personalizar según las

necesidades de la aplicación. La mayoría de los enfoques son dominados por el

asistente, esto significa que el usuario debe completar la instancia de los patrones

de diseño una vez terminado el proceso de generación del patrón. Una de las

1 es una aplicación que se relaciona con otra para aportarle una función nueva y generalmente muy específica. Esta aplicación adicional es ejecutada por la aplicación principal e interactúan por medio de la API (Interfaz de programación de aplicaciones).

Page 30: Generador de Patrones de Diseño (GEPADI)

21

ventajas que presenta el PatternBox es que tiene la libertad y flexibilidad para

introducir nuevos patrón cuando se desee.

PatternBox (2011) tiene un generador de plantillas basado en código. El generador

hace uso de las herramientas de Eclipse Java Development Tooling (JDT) y el

Plug-in Development Environment (PDE). Ambas herramientas deben estar

disponibles para ejecutar el plug-in. El mecanismo de plantilla basado en XML

permite definir las plantillas de código propio. El plug-in de PatternBox incluye 16

patrones de diseño de GoF. En la Figura 1 se muestra una pantalla de

PatternBox.

Figura 1. Pantalla de PatternBox (2011)

Page 31: Generador de Patrones de Diseño (GEPADI)

22

Comparado el PatternBox con el GEPADI, el GEPADI no es un plu-in de Eclipse,

es un ejecutable (.exe) bajo la plataforma de Windows. También tiene un

generador de plantillas que trabaja con XML. Aún no contiene ningún patrón de

diseño de GoF pero se pueden incluir en su biblioteca como cualquier otro patrón

de diseño.

AlphaWorks Design Pattern Toolkit (2011): Este es un plug-in de Eclipse en la

misma línea como PatternBox. En el portal de la aplicación hacen mención a: “El

patrón se puede considerar como una transformación entre la definición de la

aplicación de entrada y el conjunto de artefactos de origen generado. Hay

etiquetas de plantilla que le permiten transformar la definición de la aplicación en

una forma intermedia XML”.

Comparado el AlphaWorks Design Pattern Toolkit con el GEPADI, el GEPADI no

es un plu-in de Eclipse, es un ejecutable (.exe) bajo la plataforma de Windows y se

puede decir que trabaja con plantillas una vez que están creadas en la biblioteca,

pero también se pueden ir creando a través del llenado de formulario que son

guardado en formato XML.

Pattern Wizard (Vandyke, 2009): es un plug-in que funciona bajo la plataforma de

Eclipse. Este es un generador de patrones de diseño que utiliza Wizard para su

creación y generación. Funciona de la siguiente manera: el control comienza con

el objeto PatternWizard. Se pasa el control a la página principal, que muestra una

selección de modelos y lenguajes. Con base en esa entrada, el Wizard genera una

nueva página y la presenta al usuario al hacer clic en el botón Siguiente. Esta

nueva página pide al usuario que añada archivos al modelo, en diferentes

funciones dependiendo del modelo específico. Esta página se llama MainPage

<pattern>, donde <pattern> es el nombre específico elegido. Si el Wizard requiere

más información para generar el modelo, el control pasa a otra página del

asistente. Esta página se llama MatchPage <pattern>, en este sentido el usuario

coincide con la información del patrón. En cualquier caso, la última página hace las

modificaciones necesarias para que el código y el control vuelvan al Pattern

Page 32: Generador de Patrones de Diseño (GEPADI)

23

Wizard para cerrar la herramienta. En la Figura 2 se muestra una pantalla de

Pattern Wizard.

Comparado el Pattern Wizard con el GEPADI, este no utiliza Wizard para la

creación de sus patrones de diseño, la construcción del mismo se basa en el

llenado de un formulario.

Figura 2. Pantalla de Pattern Wizard

Design Pattern Automation Toolkit (DPAToolkit, 2011): es una herramienta para

ayudar en el desarrollo de software a través de patrones de diseño. El diseño se

puede visualizar a través de diagramas de clases y los patrones de diseño que se

generan se pueden incorporar en cualquier diseño fácilmente.

DPAToolkit contiene los 23 patrones de diseño de GoF. Aparte de estos, los

usuarios pueden desarrollar sus propios patrones de diseño y añadirlos a sus

diseños o intercambiarlos con otras aplicaciones, esto es gracias a que están

Page 33: Generador de Patrones de Diseño (GEPADI)

24

guardados en formato XML. DPAToolkit viene con los generadores de código

siguiente: C#, C++, Java, VB.NET. Nuevos generadores de código puede ser

fácilmente conectado a la aplicación.

Esta herramienta muestra el uso de patrones de diseño en varios idiomas. Tiene

una manera de crear nuevos patrones de diseño (que no sean los patrones GoF)

desde el lado del cliente utilizando un lenguaje de descripción de patrones. Sin

embargo, esta herramienta no modificar el código existente para ajustarse al

patrón, sólo la que ésta genera. Para su instalación se requiere Windows Vista,

XP, NT o 2000, además del Microsoft .NET Framework Version 3.5 o el más

reciente. En la Figura 3 se muestra una pantalla de DPAToolkit.

Figura 3. Pantalla de DPAToolkit (2011)

Comparado el DPAToolkit con el GEPADI, el GEPADI también puede visualizarse

los patrones de diseño a través de los diagramas de clase y se pueden exportar a

cualquier diseño que permita XML. El GEPADI aún no contienes los 23 patrones

Page 34: Generador de Patrones de Diseño (GEPADI)

25

de diseño de GoF pero se pueden incluir en su biblioteca como cualquier otro

patrón de diseño. Y al igual que DPAToolkit trabaja bajo la plataforma de Windows

y genera código en Java, VB.NET y C#.

2.2. Herramientas de modelados de UML

Existen otras herramientas específicamente de UML (área de modelado de UML) que se

pueden adaptar a la generación de patrones de diseño, pero que no están diseñadas

propiamente para este fin, como lo son: MVCASE Tool (2003) y las que se muestran en la

Tabla 1, tomada de Bulka (2003).

Tabla 1 Niveles de Automatización de Patrones

(Bulka; 2003)

Nivel de Automatización

Descripción Ventaja Desventaja

Plantillas Simples ej. UMLStudio

Almacena la estructura de la solución de un patrón. Inserta un grupo relacionado de clases en el área de trabajo.

Estructuras pre construidas que ahorran tiempo en la construcción de modelos.

Es necesario el manual de personalización.

Plantillas Parametrizadas ej. TogetherJ ej. ModelMaker ej. Cogent

Solicita la clase en el cuadro de dialogo y el nombre de los método antes de insertar un grupo de clases relacionadas al área de trabajo.

Integra las clases de patrones recién creados con las clases existen.

Introducir los nombres de las clases y los métodos puede ser tedioso y propenso a errores.

Patrones Inteligentes ej. ModelMaker

Las clases que se han insertado como parte de los patrones automáticamente e inteligentemente responden a cambios en otras partes del modelo de UML.

La integridad de los patrones se mantiene.

Si no se es conocedor del área, el desarrollo puede tenderse a confusión a sentirse limitado cuando el modelo se autocambia.

Hay que dejar en claro que estas son herramientas de automatización de diseño que al

final, crean clases y métodos específicos en el área de trabajo de UML. No automatizan el

diseño, el usuario al final debe analizar el contexto y luego elegir el patrón de uso.

Page 35: Generador de Patrones de Diseño (GEPADI)

26

El enfoque de Plantillas Simples se puede definir como un cátalo de patrones de diseño

por el cual el usuario navega y visualiza miniaturas de varios diseños. El usuario

selecciona una aplicación de patrones de diseño y posteriormente aparece en el área de

trabajo. Finalmente, el usuario realiza las modificaciones necesarias a los nombres de

clase y el método.

El enfoque de las Plantillas Parametrizadas permiten fijar las pautas a las clases

existentes y ofrecer la posibilidad de personalizar los aspectos de la aplicación de la

plantilla utilizando el asistente cuadros de diálogo. Una desventaja de plantillas

parametrizadas es que suelen ser encerrados en cuadro de diálogo, escribir y recordar los

nombres de clases y métodos es tedioso y propenso a errores, a menos que se

proporciones un centro de navegación o biblioteca con los nombres.

Y por último está el enfoque de Patrones Inteligentes que da un paso en la automatización

de diseño y ofrece la idea de que los patrones son dinámicas de primera clase en un

modelo UML. Una vez aplicado, la herramienta de modelado recuerda que las clases

están involucradas en el patrón y protege activamente el patrón de daños accidentales.

Además, como parte del cambio de modelo, las clases y métodos empleados en el

modelo se actualizan automáticamente a medida que sea necesario. Por ejemplo, si

cambia el nombre del método, el código en el método de la clase también se modifica de

forma automática, de esta manera se llama al método que cambio el nombre. Del mismo

modo, si un método se elimina, el método de la clase también se elimina.

El diseño orientado a objetos y los patrones de modelado en UML son notaciones

complejas, el diseñador de software debe entender y saber cómo seleccionar las opciones

apropiadas que ofrece los cuadros de diálogo del asistente. Así, el papel del programador

como del diseñador no es automática, aunque algunas herramientas en cierto modo a

ayudan a este proceso, así por ejemplo, Cogent, por Budinsky y col. y Vlissides (1996)

ofrecen asistentes, documentación en línea y mucho más ayuda sensible al contexto para

ayudar a las deliberaciones del diseñador.

Se puede concluir que entre los niveles de automatización de los patrones el GEPADI

(Generador de Patrones de Diseño) se encuentra en el enfoque de Patrones Inteligente

con la diferencia que se puede ir modificando a medida que se va construyendo el patrón.

Page 36: Generador de Patrones de Diseño (GEPADI)

3. GENERADOR DE PATRONES DE DISEÑO (GEPADI)

En este capítulo se desarrolla todo lo relacionado al generador de patrones de diseño,

comenzando por los requisitos necesarios para su uso, como está estructurado y desarrollado,

como funciona cada una de sus interfaces y los beneficios que aporta al desarrollo de software

y a la investigación en el área de la ingeniera de software.

3.1. Requisitos del Generador de Patrones de Diseño (GEPADI)

Los requisitos que se tomaron en cuentan para el desarrollo del GEPADI fueron a nivel de

software, hardware, humanos y legales.

3.1.1. Requisitos de software

Para la instalación del ejecutable del generador se requiere:

Windows 7 profesional 32 bits

3.1.2. Requisitos de hardware

Los requisitos de hardware mínimos son:

Procesador Pentium 1.8 Ghz

Memoria RAM 2.00 GB

Espacio disponible en disco 10 GB

Unidad de DVD

3.1.3. Requisitos humanos

Toda persona que desee y necesite utilizar el generador de patrones de diseño debe estar en

conocimiento de qué son los patrones dentro de la ingeniería de software y su aplicación.

3.1.4. Requisitos legales

Este generador fue diseñado y desarrollado sólo para fines de investigación, teniendo como

primer resultado la generación de los patrones de diseño en el dominio especifico de gobierno

electrónico, como se demuestra en el siguiente capítulo.

Page 37: Generador de Patrones de Diseño (GEPADI)

28

3.1.5. Requisitos funcionales

Para facilitar el trabajo con los patrones de diseño, de forma que el usuario pueda aplicarlos

fácilmente, el generador cumple con los siguientes aspectos:

A partir de los elementos que constituyen un patrón de diseño, generar automáticamente

la declaración de clases, relaciones, atributos y métodos, y permitir hacer cambios sobre

los elementos generados.

Mantiene la integridad del significado de los patrones implicados en un sistema, es decir,

se debe comprobar que no se rompe la estructura de una instancia de un patrón tras

una acción (eliminar un atributo,...). Por este motivo, se deberá llevar un control sobre

las clases que participan en patrones y las ajenas a los mismos.

Es una herramienta que está diseñada para crear e integrar nuevos patrones y de esta

manera se va alimentando el catálogo de patrones que maneja actualmente el GEPADI.

El usuario puede guardar los patrones de diseño desarrollado, así como sus ejemplos.

También es capaz de añadir, eliminar y modificar elementos individuales del patrón de

diseño (clases, métodos, relaciones…).

Cuenta con una ayuda clara y práctica sobre la forma en la que los patrones de diseño

pueden ser aplicados, explica el manejo de la herramienta. Todo esto sirve para darle

soporte a la herramienta y proporciona una ayuda al usuario en cuanto al manejo de la

herramienta.

Un aspecto importante y que está incluida en la metodología de trabajo, es la forma en la que

se va a mostrar la información al usuario. La herramienta muestra una visión clara del diseño,

de las acciones disponibles y cómo dichas acciones afectan al usuario. Algunas de las distintas

perspectivas en que se muestra el patrón de diseño al usuario son:

Información: en esta parte se muestra lo que es la plantilla del patrón de diseño, en ella

está incluida toda la descripción de patrón, contiene gran parte de la metodología de

trabajo. En la Figura 4 se observa un ejemplo de como el GEPADI muestra la

información del patrón abstracto “Info”.

Page 38: Generador de Patrones de Diseño (GEPADI)

29

Figura 4. Plantilla del patrón abstracto

Vista Previa: se muestra gráficamente la estructura del patrón en forma de diagrama de

clase. A partir de esta vista, se puede copiar el diagrama y exportar en cualquier formato

gráfico (formatos GIF, BMP…), desde esta vista también se puede imprimir la estructura

del patrón. En la Figura 5 se observa un ejemplo de como el GEPADI muestra la vista

previa.

Page 39: Generador de Patrones de Diseño (GEPADI)

30

Figura 5. Vista previa

Código: cada estructura o diagrama de clases puede ser generado automático en

diferentes código, bien sea en Java, VB. Net o C#. Este código es producido en un

fichero que es directamente compilable, que representa el esqueleto de la aplicación que

se ha diseñado. En la Figura 6 se observa un ejemplo de como el GEPADI muestra los

diferentes código en que es implementado la clase.

Figura 6. Vista de código

Page 40: Generador de Patrones de Diseño (GEPADI)

31 3.1.6. Requisitos no funcionales

Los requisitos no funcionales que se tomaron en cuentan para desarrollo del generador fueron

los siguientes:

La portabilidad, todo patrón que se desarrolle en GEPADI puede ser exportado a

cualquier otra herramienta de modelado que maneje el formato XML

3.2. Metodología de trabajo

La metodología de trabajo utilizada para desarrollar el Generador de Patrones de Diseño

(GEPADI) fue la aplicada por GoF en su libro Patrones de Diseño: Elementos de Software

Orientados a Objetos Reutilizables, específicamente la aplicada para describir cada uno de los

elementos que contiene la plantilla de los patrones de diseño.

Plantilla de un patrón dentro de GEPADI

La metodología de trabajo para describir un patrón de diseño varía dependiendo del autor que

se seleccione, y a pesar de que esos autores han propuesto plantillas ligeramente distintas, la

mayoría definen los mismos conceptos básicos, un nombre de patrón, definición de un

problema, su solución y consecuencia, es decir, una forma básica basada en el libro de

Alexander (1977) como se vio el capítulo uno (1).

Los fundamentos en los cuales se basó la metodología de trabajo del Generador Patrones de

Diseño (GEPADI) para describir sus patrones fue el utilizado por GoF, esto es debido a su

sencillez y porque brinda un formato consistente, a través de plantillas, lo cual le da una

estructura uniforme a la información que se muestra en la interfaz. Por otro lado con esta

plantilla que está más o menos estandarizada es mucho más fácil aprender, comparar y utilizar

los patrones de diseño, debido a la practicidad de su estructura. Y como es una metodología de

trabajo conocida entre los diseñadores puede constituirse efectivamente en un medio de

comunicación uniforme entre desarrolladores de software.

Cada patrón del GEPADI se adapta a la metodología de trabajo utilizada por GoF que no es

más que la descripción del patrón de diseño constituida por un nombre, intención, motivación,

consecuencia, y otros elementos que la constituyen. A continuación se definen en detalle cada

uno de esos elementos:

Page 41: Generador de Patrones de Diseño (GEPADI)

32

Nombre del patrón: este transmite la esencia del patrón de manera significativa, por lo

general se expresa en inglés. Un buen nombre es de vital importancia, ya que pasara a

formar parte del vocabulario que conforman los repositorio de los patrones de diseño y

será reconocido dentro de la comunidad de desarrolladores de software.

Clasificación del patrón: se clasifica según el libro de GoF en: de creación, estructural

o de comportamiento, pero en este trabajo de ascenso los patrones de diseño no se

limitaran a esta clasificación.

Propósito: representa una breve declaración que responde a las siguientes preguntas:

¿Cuál es el patrón de diseño hacer?, ¿cuál es su razón y su intención? Y ¿qué problema

pretende resolver el patrón?

También conocido como: otros nombres de uso común para el patrón de diseño.

Motivación: es el escenario que ilustra un problema de diseño y cómo las estructuras

de clases y objetos en el patrón resuelven el problema. El escenario ayuda a entender la

descripción más abstracta del patrón que sigue.

Aplicabilidad: usos comunes y criterios de aplicabilidad del patrón, respondiendo a las

siguientes preguntas: ¿Cuáles son las situaciones en las que se puede aplicar el patrón

de diseño?, ¿cuáles son los ejemplos de los medianos diseños en el que el patrón

puede aplicarse?, ¿cómo se puede reconocer esas situaciones?

Estructura: la estructura de los patrones de diseño viene a estar representada por

diagramas de clase de UML 2.0. A diferencia de la metodología de GoF aquí no se

utilizan los diagramas de interacción para ilustrar la secuencia de peticiones y

colaboraciones entre objetos.

Participantes: enumeración y descripción de las entidades abstractas (y sus roles) que

participan en el patrón. Vienen a ser las clases y/o los objetos que participan en el

patrón de diseño y sus responsabilidades.

Colaboraciones: explicación de las interrelaciones que se dan entre los participantes.

Cómo los participantes colaboran para llevar a cabo sus responsabilidades.

Consecuencias: consecuencias positivas y negativas en el diseño derivadas de la

aplicación del patrón.

Implementación: técnicas o comentarios oportunos de cara a la implementación del

patrón, respondiendo a preguntas como estás: ¿Qué dificultades, sugerencias o técnicas

deben tener en cuenta al implementarse el patrón?, ¿hay cuestiones específicas del

lenguaje?

Código de ejemplo: fragmentos de código que ilustran cómo se puede implementar el

patrón de diseño en VisualBasic, Java o C# (en GEPADI).

Page 42: Generador de Patrones de Diseño (GEPADI)

33

Usos conocidos: ejemplos del patrón de diseño encontrado en los sistemas reales. Se

incluye por lo menos dos ejemplos de los diferentes dominios.

Patrones relacionados: Referencias cruzadas con otros patrones, respondiendo a

preguntas como estás: ¿Qué patrones de diseño están estrechamente relacionados con

este?, ¿cuáles son las diferencias más importantes?

3.3. Interfaces de usuario de GEPADI

Las interfaces de usuario del Generador de Patrones de Diseño las constituyen todas aquellas

pantallas con las cuales el usuario va a interactuar, estas son: la interfaz principal, la interfaz de

patrones, consultar y ayuda. Para acceder a la Interfaz de patrones y consultar será a través de

los menús desplegables que se encuentra en la barra de menú que se encuentra en la interfaz

principal. A continuación se explicara cada una de las interfaces.

3.3.1. Interfaz principal

La interfaz principal está constituida por la barra de título y la barra de menú, en la parte central

se encuentra el logo del generador de patrones de diseño. En la Figura 7 se pueden ver los

elementos que conforman la interfaz principal.

Barra de menú Barra de título

Cerrar

Maximizar

Minimizar

Page 43: Generador de Patrones de Diseño (GEPADI)

34

Figura 7. Pantalla principal del generador

Barra de título: está ubicada en la parte superior de la pantalla principal y lleva por nombre

“Generador de Patrones de Diseño (GEPADI)”, en la Figura 8 se puede observar la barra de

título del generador.

Figura 8. Barra de título

Barra de menú: está ubicada debajo de la barra de título, está compuesta por los menús:

Patrones, Consultar y Ayuda, como se muestra en la Figura 9. A través de esta barra de menú

se tendrá acceso a las interfaces de Patrones, Consultar y Acerca de.

Figura 9. Barra de menú

3.3.2. Interfaz de Patrones

La interfaz de Patrones la constituyen los patrones abstractos, los patrones ejemplos y exportar,

como se observa en la Figura 10.

Figura 10. Menú desplegable de Patrones

Patrones Abstractos: se puede definir que un patrón es la abstracción de una forma

concreta que puede repetirse en contextos específicos. En la Figura 11 se muestra la

Page 44: Generador de Patrones de Diseño (GEPADI)

35

ventana correspondiente a la creación y edición de estos patrones. Los elementos que

constituyen esta ventana son: agregar, modificar, eliminar y cerrar.

Figura 11. Menú desplegable de Patrones/Patrones Abstracto

Agregar patrón abstracto: la Figura 12 muestra la ventana donde se refleja la plantilla

del patrón, esta contiene: nombre, tipo, intención (propósito), motivación, aplicabilidad,

colaboración, consecuencia, implementación, patrones ejemplos y patrones

relacionados. Todos estos elementos constituyen parte de la metodología de trabajo,

quedando en otra ventana la vista previa (que constituye la estructura del patrón) y el

código; ambos conforman también parte de la metodología de trabajo.

En la parte inferior se encuentra para agregar o eliminar los Atributos de cada patrón

conformado por los siguientes elementos. Tipo de atributo, nombre, tipo, modificador y

descripción. Una vez ingresado la información de los atributos se ve reflejado en la parte

inferior.

Page 45: Generador de Patrones de Diseño (GEPADI)

36

Figura 12. Menú desplegable de Patrones/Patrones Abstracto/Agregar

Patrones Ejemplos: estos patrones representan de manera práctica los patrones

abstractos. En la Figura 13 se muestra la ventana donde se refleja la plantilla del patrón

ejemplo, esta contiene: patrones, tipo, nombre y solución.

En la parte inferior se encuentra para agregar o eliminar los Atributos de cada patrón

conformado por los siguientes elementos. Tipo de atributo, nombre, tipo, modificador y

descripción. Una vez ingresado la información de los atributos se ve reflejado en la parte

inferior.

Page 46: Generador de Patrones de Diseño (GEPADI)

37

Figura 13. Menú desplegable de Patrones/Patrones Ejemplos

Exportar: con esta interfaz se puede exportar todos los patrones de diseño a cualquier

plataforma o aplicación que soporte XML, como se puede observar en la Figura 14.

Page 47: Generador de Patrones de Diseño (GEPADI)

38

Figura 14. Menú desplegable de Patrones/Exportar

3.3.3. Interfaz de Consultar

La interfaz de Consultar la constituyen los patrones a consultar (Consultar Patrones), que son

los abstractos y los ejemplos, los que fueron creados y modificados en la interfaz de patrones

explicada en la sección anterior en las Figuras 15 y 16 se pueden observar el menú

desplegable de Consultar y Consultar Patrones respectivamente .

Figura 15. Menú desplegable Consultar

Page 48: Generador de Patrones de Diseño (GEPADI)

39

Figura 16. Menú desplegable Consultar/Consultar Patrones

Consultar Patrones Abstracto: muestra todos los patrones abstractos que hasta el

momento se han elaborado en el GEPADI como se muestra en la Figura 17, contiene

los siguientes elementos: información (plantilla del patrón), código (muestra el código en

java, VB. Net y C#), vista previa (muestra la representación gráfica en forma de

diagrama de clases) y cerrar (para salir de la ventana de consulta).

Figura 17. Menú desplegable Consultar/Consultar Patrones/Abstracto

Page 49: Generador de Patrones de Diseño (GEPADI)

40

Consultar Patrones Ejemplos: muestra todos los patrones abstractos que hasta el

momento se han elaborado en el GEPADI como se muestra en la Figura 18, contiene

los siguientes elementos: información, código (muestra el código en java, VB. Net y C#),

vista previa (muestra la representación gráfica en forma de diagrama de clases) y cerrar

(para salir de la ventana de consulta).

Figura 18. Menú desplegable Consultar/Consultar Patrones/Ejemplo

3.3.4. Interfaz de Ayuda

La interfaz de Ayuda está conformada por Ayuda, Metodología de trabajo y Acerca del

generador como se muestra en la Figura 19.

Page 50: Generador de Patrones de Diseño (GEPADI)

41

Figura 19. Menú desplegable Ayuda

Ayuda: muestra una guía de usuario de como se maneja el GEPADI y a descripción de

sus principales pantallas como se muestra en la Figura 20.

Figura 20. Ventana de Ayuda

Metodología de Trabajo: describe cada uno de los elementos que constituyen la

metodología de trabajo en la que se basó el GEPADI para crear la plantilla del patrón.

En la Figura 21 se observa la ventana correspondiente a la metodología de trabajo.

Page 51: Generador de Patrones de Diseño (GEPADI)

42

Acerca del Generador: hace referencia al título de la herramienta, su versión, el

departamento al cual pertenece, así como la universidad donde fue desarrollado. Y al

final se presenta una pequeña descripción de la naturaleza y finalidad del trabajo. En la

Figuras 22 se puede observar la ventana respectiva.

Figura 22. Acerca del Generador de Patrones de Diseño

Figura 21. Ventana de Metodología de trabajo

Page 52: Generador de Patrones de Diseño (GEPADI)

43 3.4. Beneficios del Generador de Patrón de Diseño (GEPADI)

La herramienta permite crear, ver y modificar la información de cada patrón de diseño.

A medida que vamos construyendo el patrón de diseño podemos irlo visualizando.

La transformación de los distintos patrones a código: Java, VB.net y C#.

Se pueden crean patrones de dominio específicos y así alimentar los repositorios que se

encuentran en internet o que sirvan de apoyo para los trabajos de investigación.

Debido a que se utilizó XML para el intercambio de datos, se puede fácilmente importar

o exportar cualquier información que se desarrolló en el generador, esto lo convierte en

una herramienta de soporte para otras plataformas de trabajo.

El patrón de diseño generado puede ser exportado a plataformas de trabajos MDA, y ser

transformados de manera directa a modelos de navegación o modelos de interfaces

según sea el caso de aplicación.

Al exportar el patrón de diseño a una herramienta de modelado puede convertirse de

una vez en tablas que conforman las bases de datos.

Page 53: Generador de Patrones de Diseño (GEPADI)

4. VALIDACIÓN DEL GENERADOR

Para validar el Generador de Patrones de Diseño, se generó una serie de patrones en el

área de gobierno electrónico. Estos vienen a ser el caso práctico en el cual se realizaron las

pruebas del generador de parones de diseños. Cabe mencionar que se pueden diseñar y

desarrollar cualquier patrón de diseño abstracto que cumplan con los requisitos exigidos

como regla universal (nombrados en el capítulo 3) de toda clase.

4.1. Gobierno Electrónico

El concepto de gobierno electrónico siempre está vinculado con el uso de las tecnologías de

la información y la comunicación (TIC) ya que está vinculado con los procesos internos de

gobierno y con los procesos externos de interacción entre el estado y los ciudadanos.

Otros de los conceptos que se pueden mencionar son:

Para Banco Mundial, el Gobierno Electrónico refiere al uso por parte de las agencias

gubernamentales de las TIC, que tienen la capacidad de transformar las relaciones

con el ciudadano, las empresas y otras agencias gubernamentales.

Es el uso de las tecnologías de información y comunicación por parte de las

instituciones de gobierno, para mejorar cualitativamente los servicios e información

ofrecidos a los ciudadanos, aumentar la eficiencia y eficacia de la gestión pública e

incrementar sustantivamente la transparencia del sector público y la participación

ciudadana (OEA, 2006).

Para el Banco Interamericano de Desarrollo (2003), “Desde un punto de vista

tecnológico, el Gobierno Electrónico (...) es la capacidad que ofrecen las TIC para

desarrollar y ofrecer información y servicios públicos a través de medios telemáticos,

habitualmente Internet”.

Como se puede observar en estas definiciones las TIC siempre están inmersas, pero tratan

de ir más allá del simple hecho de ser un instrumento tecnológico, ellas tratan de mejorar la

gestión del Estado, su transformación y el ofrecimiento de servicios oportunos para el

ciudadanos y funcionarios, ellas buscan aumentar la transparencia del Estado, aumentar los

participación en la gestión pública e incentivar la democracia participativa e inclusión social.

Page 54: Generador de Patrones de Diseño (GEPADI)

44

Portal de gobierno electrónico

Para el Centro Nacional de Tecnología de Información (Venezuela) un portal de gobierno

electrónico es un portal de información pública y servicios que provee una ventana única a

disposición de los ciudadanos en los ámbitos: informativo, comunicacional, transaccional y

estadístico vía Internet. Otra definición de portal de gobierno que se puede citar es la de

Gant y Johnson (2002) quienes lo ven como una puerta de acceso al Estado a través de la

Internet, que provee tanto a entidades externas como a personal de gobierno un punto único

de acceso en línea a recursos e información de estado.

Componentes de un gobierno electrónico

Existe varios investigadores que describen los componentes de un gobierno electrónico a

través de los llamado modelo de madurez, estos componentes varían según el enfoquen de

los autores, pero se asemejan entre ellos. En este apartado tratamos de integrar todos estos

componentes, para hacer un solo modelo de madurez.

El primer modelo de madurez es de Presencia, también llamado catálogo, este componente

focaliza la presencia del gobierno en los portales web, los ciudadanos pueden navegar y

hacer búsquedas de cualquier información contenida en el portal (Layne y Lee; 2001; UN y

ASPA; 2002).

El segundo modelo de madurez es Información, este componente sirve como página inicial,

o puerta de entrada para acceder a otras páginas útiles donde se pueda localizar

información de distintos departamentos, direcciones o dependencias de gobierno. En este

componente, los usuarios pueden encontrar información actualizada y especializada.

Además cuenta con motores de búsqueda internos y/o externos. La esencia de este

componente es la disponibilidad de información (Hiller y Bélanger; 2001; Layne y Lee; 2001;

Moon, 2002; UN y ASPA, 2002; Holden, Norris y Fletcher, 2003).

El tercer modelo de madurez es la Interacción, en este componente se pueden encontrar

algunos sitios que utilizan contraseñas para proteger los datos o la identidad de sus

usuarios, garantizando también información personalizada y la protección de documentos.

Se puede tener acceso a leyes, publicaciones gubernamentales, reportes que se pueden

obtener directamente de los sitios y transmitirse a sus computadoras personales para ser

revisados posteriormente sin necesidad de conexión. Se cuenta con correos electrónicos de

funcionarios y servidores públicos, lo que facilita la interacción entre gobierno y ciudadanos.

Precisamente, la esencia de este componente es la posibilidad de interacción por diversos

Page 55: Generador de Patrones de Diseño (GEPADI)

45 medios entre el gobierno y los ciudadanos (Hiller y Bélanger, 2001; Moon, 2002; UN y

ASPA, 2002).

El cuarto modelo de madurez llamado Transacción, se encuentran los portales de e-

gobierno que se conectan a los sistemas internos mediante interfaces para permitir

transacciones entre el ciudadano y gobierno, consiste en poner en línea las bases de datos

mediante interfaces para facilitar las transacciones. Este componente utiliza todo el potencial

de Internet para proveer servicios públicos. Los ciudadanos pueden realizar transacciones

seguras, confiables y rápidas usando la red. Por ejemplo, si un ciudadano tiene que renovar

su licencia, puede hacerlo a través de esta vía y realizar el pago en línea. La esencia de

este componente es la posibilidad de realizar transacciones y obtener servicios completos

directamente desde el portal, incluyendo la posibilidad de pagarlos de forma electrónica.

(Hiller y Bélanger, 2001; Layne y Lee, 2001; Moon, 2002; UN y ASPA, 2002; Holden, Norris

y Fletcher, 2003).

El quinto modelo de estado, se puede denominar Integración, en él se observan dos tipos de

integración: vertical y horizontal. Una integración vertical se produce cuando entre las

funciones y servicios que se prestan tanto locales, estatales y federales se conecta a las

diferentes bases de datos. Por ejemplo, el sistema de registro de una licencia de conducir

del estado de DMV podría estar conectado con la base de datos nacional de licencias para

realizar un cruce de chequeo. Una integración horizontal se produce cuando se da el cruce

de diferentes funciones y servicios, también permite la creación de los servicios externos a

partir de la interacción entre distintas entidades de la administración pública. (Hiller y

Bélanger, 2001; Moon, 2002; UN y ASPA, 2002; Layne y Lee, 2001; Holden, Norris y

Fletcher, 2003).

El sexto modelo de madurez es la Participación Política, este componente supone que el

ciudadano no sólo interactúa con el gobierno, sino que el usuario participa activamente en la

toma de decisiones gubernamentales. En esta etapa existe la posibilidad de que los

ciudadanos opinen sobre proyectos de ley, políticas públicas o decisiones gubernamentales;

de igual forma puede existir el voto electrónico sobre asuntos públicos u otras formas de

participar políticamente a través de los sitios gubernamentales. La esencia de este

componente es entonces la posibilidad de participación por parte de los ciudadanos (Hiller y

Bélanger, 2001; Moon, 2002).

Page 56: Generador de Patrones de Diseño (GEPADI)

46 La Tabla 2 resume los componentes del modelo de estado del gobierno electrónico.

Tabla 2 Componentes del modelo de estado del gobierno electrónico

(Sandoval, Gil; 2005)

Componente del Gobierno

Electrónico Características

Presencia

• Información gubernamental limitada. • Pocas páginas web hechas por agencias aisladas. • Información estática acerca de la estructura y servicios del

gobierno.

Información

• Número mayor de páginas web. • Portal que contiene ligas a la mayoría de las dependencias estatales.

• Información más dinámica (actualizaciones frecuentes).

Interacción

• Los formatos pueden ser descargados. • Comunicación a través del correo electrónico. • Uso de máquinas y programas de búsqueda. • Uso de chats, foros y otras formas interactivas de

comunicación (relacionadas al servicio). • Posibilidad de configurar (archivo de ciudadanía, uso de

contraseñas).

Transacción

• Servicios en línea (seguros), incluyendo pagos electrónicos (tarjetas de crédito).

• Mayor oportunidad de personalización (uso de contraseñas, archivo de ciudadanía, etc.).

• Portal organizado acorde a las necesidades de las personas en lugar de las estructuras gubernamentales.

Integración

• Portal de servicio con un punto único de salida y pago (agencias múltiples, misma función, diferentes niveles de gobierno).

Participación Política

• Participación de la ciudadanía en decisiones gubernamentales, voto electrónico, encuestas en línea.

4.2. Patrones de Diseño en el Gobierno Electrónico

Basados en los componentes del modelo de estado del gobierno electrónico (tabla 1), se

procedió a diseñar cada uno de los patrones que componen este dominio específico, para

satisfacer los principales requisitos de usuarios que se reflejan en la mencionan en la

anterior tabla.

Page 57: Generador de Patrones de Diseño (GEPADI)

47

Nombre del patrón: Info.

Tipo: patrón abstracto.

Propósito: asegura que una clase guarde información estática.

Motivación: hay veces que se requiere de una clase para el llenado de información

estática pero de diferentes contenido.

Aplicabilidad: se aplica en los casos que la información no cambia a menudo.

Estructura: en la Figura 23 se muestra la estructura del patrón.

Figura 23. Estructura del patrón “Info”

Participantes: sólo la clase Info que define los atributos de contenido, descripción, enlace,

foto, título, video.

Colaboraciones: no existen colaboraciones.

Consecuencias: una consecuencia positiva es que ayuda al llenado de la información.

Implementación: el patrón se puede exportar a otras herramientas de trabajos ya que se

guarda en formato XML.

Ejemplo de código: el código en el cual se genera el patrón es Java, VB. Net y C#.

Código en Java VB.net

Class Info{ Public void setContenido (String value){ } Public String getContenido ( ){ } Public void setDescripcion (String value){ } Public String getDescripcion ( ){ }

Class Info Public Property Contenido as String Get End Get Set(byval value as String) End Set End Property Public Property Descripcion as String Get

Page 58: Generador de Patrones de Diseño (GEPADI)

48

Public void setEnlace (String value){ } Public String getEnlace ( ){ } Public void setFoto (String value){ } Public String getFoto ( ){ } Public void settitulo (String value){ } Public String gettitulo ( ){ } Public void setVideo (String value){ } Public String getVideo ( ){ } }

End Get Set(byval value as String) End Set End Property Public Property Enlace as String Get End Get Set(byval value as String) End Set End Property Public Property Foto as String Get End Get Set(byval value as String) End Set End Property Public Property titulo as String Get End Get Set(byval value as String) End Set End Property Public Property Video as String Get End Get Set(byval value as String) End Set End Property

Usos conocidos (patrones ejemplos): la siguiente Tabla 3 muestra la relación que existe

entre los componentes de gobierno electrónico y los patrones ejemplos que se pudieron

generar con la ayuda del GEPADI una vez generado el patrón de diseño “Info” para el

dominio específico, en este caso gobierno electrónico.

Tabla 3 Patrones de Gobierno Electrónico “Info”

Componente del Gobierno

Electrónico

Patrones de Gobierno Electrónico “Info” (Patrones Ejemplos)

Presencia

Funciones

Localización física

Misión

Nombre del portal

Objetivos

Organigrama

Presentación

Visión

Información

Ayuda

Calendario de actividades

Enlace de interés

Eventos

Mapa de sitio

Noticias

Otros enlaces

Política de privacidad y condición

Page 59: Generador de Patrones de Diseño (GEPADI)

49

Componente del Gobierno

Electrónico

Patrones de Gobierno Electrónico “Info” (Patrones Ejemplos)

Preguntas frecuentes

Interacción Leyes

Procedimientos de los trámites

Patrones relacionados: Singleton.

Nombre del patrón: Datos del Personal.

Tipo: patrón abstracto.

Propósito: asegura que una clase guarde la información de un personal.

Motivación: cuando se necesita llenar información del personal de la institución, del portal

o de los ciudadanos.

Aplicabilidad. se aplica en los casos que se necesite llenar información personal de algún

empleado que labore para la institución o ciudadano que se registre en el portal de

gobierno electrónico.

Estructura: en la Figura 24 se muestra la estructura del patrón.

Figura 24. Estructura del patrón “Datos del Personal”

Participantes: sólo la clase Datos del Personal que define los atributos cargo, correo,

extensión, nombre, teléfonos.

Colaboraciones: no existen colaboraciones.

Consecuencias: una consecuencia positiva es que ayuda al llenado de la información.

Page 60: Generador de Patrones de Diseño (GEPADI)

50

Implementación: el patrón se puede exportar a otras herramientas de trabajos ya que se

guarda en formato XML.

Ejemplo de código: el código en el cual se genera el patrón es Java, VB. Net y C#.

Código en Java VB.net

Class Datos_del_Personal{ Public void setCargo (String value){ } Public String getCargo ( ){ } Public void setCorreo (String value){ } Public String getCorreo ( ){ } Public void setExtencion (String value){ } Public String getExtencion ( ){ } Public void setnombre (String value){ } Public String getnombre ( ){ } Public void setTelefonos (String value){ } Public String getTelefonos ( ){ } }

Class Datos_del_Personal Public Property Cargo as String Get End Get Set(byval value as String) End Set End Property Public Property Correo as String Get End Get Set(byval value as String) End Set End Property Public Property Extencion as String Get End Get Set(byval value as String) End Set End Property Public Property nombre as String Get End Get Set(byval value as String) End Set End Property Public Property Telefonos as String Get End Get Set(byval value as String) End Set End Property End Class

Usos conocidos (patrones ejemplos): la siguiente Tabla 4 muestra la relación que existe

entre los componentes de gobierno electrónico y los patrones ejemplos que se pudieron

generar con la ayuda del GEPADI una vez generado el patrón de diseño “Datos del

Personal” para el dominio específico, en este caso gobierno electrónico.

Tabla 4 Patrones de Gobierno Electrónico “Datos del Personal”

Componente del Gobierno

Electrónico

Patrones de Gobierno Electrónico “Datos del Personal” (Patrones Ejemplos)

Presencia

Directorio institucional

Directorio relacionado con el portal

Contactenos

Patrones relacionados: Singleton, Info

Page 61: Generador de Patrones de Diseño (GEPADI)

51

Nombre del patrón: Formulario.

Tipo: patrón abstracto.

Propósito: asegurar el llenado de los formularios que más se utilizan en la interacción

que se da entre el gobierno y el ciudadano.

Motivación: cuando se necesita generar formularios automáticamente.

Aplicabilidad. para la generación de formulación que permite la generación de

interacción entre el gobierno y el ciudadano como el chat, el foro, la encuesta, entre

otros.

Estructura: en la Figura 25 se muestra la estructura del patrón.

Figura 25. Estructura del patrón “Formulario”

Participantes: sólo la clase Formulario que define los atributos contenido, Correo, emisor,

ID, nombre, sugerencia, título, con el método enviar.

Colaboraciones: no existen colaboraciones.

Consecuencias: una consecuencia positiva es el llenado y la generación del formulario

automáticamente.

Implementación: el patrón se puede exportar a otras herramientas de trabajos ya que se

guarda en formato XML.

Ejemplo de código: el código en el cual se genera el patrón es Java, VB. Net y C#.

Código en Java VB.net

Class Formulario{ Private Stringm_nombre Public void setCONTENIDO (String value){

Class Formulario Private m_nombre as String Public Property CONTENIDO as String

Page 62: Generador de Patrones de Diseño (GEPADI)

52

} Public String getCONTENIDO ( ){ } Public void setCORREO (String value){ } Public String getCORREO ( ){ } Public void setEMISOR (String value){ } Public String getEMISOR ( ){ } Public void setID (String value){ } Public String getID ( ){ } Public void setNOMBRE (String value){ } Public String getNOMBRE ( ){ } Public void setSUGERENCIA (String value){ } Public String getSUGERENCIA ( ){ } Public void setTITULO (String value){ } Public String getTITULO ( ){ } Public Function ENVIAR as Ninguno End Function } }

Get End Get Set(byval value as String) End Set End Property Public Property CORREO as String Get End Get Set(byval value as String) End Set End Property Public Property EMISOR as String Get End Get Set(byval value as String) End Set End Property Public Property ID as String Get End Get Set(byval value as String) End Set End Property Public Property NOMBRE as String Get End Get Set(byval value as String) End Set End Property Public Property SUGERENCIA as String Get End Get Set(byval value as String) End Set End Property Public Property TITULO as String Get End Get Set(byval value as String) End Set End Property Public Function ENVIAR as Ninguno End Function End Class

Usos conocidos (patrones ejemplos): la siguiente Tabla 5 muestra la relación que existe

entre los componentes de gobierno electrónico y los patrones ejemplos que se pudieron

generar con la ayuda del GEPADI una vez generado el patrón de diseño “Formulario”

para el dominio específico, en este caso gobierno electrónico.

Tabla 5 Patrones de Gobierno Electrónico “Formulario” (Yedra, 2012)

Componente del Gobierno

Electrónico

Patrones de Gobierno Electrónico “Formulario” (Patrones Ejemplos)

Interacción Sugerencias

Participación Chat

Page 63: Generador de Patrones de Diseño (GEPADI)

53

Componente del Gobierno

Electrónico

Patrones de Gobierno Electrónico “Formulario” (Patrones Ejemplos)

política Correo

Encuesta

Foro

Voto electrónico

Patrones relacionados: Singleton, FormularioBD.

Nombre del patrón: Formulario BD.

Tipo: patrón abstracto.

Propósito: crear estructuras de datos relacionadas con base de datos (por ejemplo sus

métodos).

Motivación:

Cuando se necesitan hacer conexiones a diferentes bases de datos y también hacer

cruce de diferentes funciones y servicios.

Permitir la creación de los servicios externos a partir de la interacción entre distintas

entidades de la administración pública.

Cuando se necesita consultar diferentes bases de datos.

Aplicabilidad: a todas las entidades de la administración pública que manejen base de

datos.

Estructura: en la Figura 26 se muestra la estructura del patrón.

Figura 26. Estructura del patrón “Formulario BD”

Page 64: Generador de Patrones de Diseño (GEPADI)

54

Participantes: sólo la clase Formulario BD que define los atributos contenido, correo,

emisor, ID, nombre, sugerencia, título, con los métodos: conectar, consultar, eliminar

registro, enviar datos, insertar registro, modificar registro.

Colaboraciones: no existen colaboraciones.

Consecuencias: una consecuencia positiva es la comunicación que se da entre las

diferentes bases de datos, bien sea para consultar datos o crear servicios.

Implementación: el patrón se puede exportar a otras herramientas de trabajos ya que se

guarda en formato XML.

Ejemplo de código: el código en el cual se genera el patrón es Java, VB. Net y C#.

Código en Java VB.net

Class Formulario_BD{ Private Stringm_nombre Public void setCONTENIDO (String value){ } Public String getCONTENIDO ( ){ } Public void setCORREO (String value){ } Public String getCORREO ( ){ } Public void setEMISOR (String value){ } Public String getEMISOR ( ){ } Public void setID (String value){ } Public String getID ( ){ } Public void setNOMBRE (String value){ } Public String getNOMBRE ( ){ } Public void setSUGERENCIA (String value){ } Public String getSUGERENCIA ( ){ } Public void setTITULO (String value){ } Public String getTITULO ( ){ } Public Function ENVIAR as Ninguno End Function } }

Class Formulario_BD Private m_nombre as String Public Property CONTENIDO as String Get End Get Set(byval value as String) End Set End Property Public Property CORREO as String Get End Get Set(byval value as String) End Set End Property Public Property EMISOR as String Get End Get Set(byval value as String) End Set End Property Public Property ID as String Get End Get Set(byval value as String) End Set End Property Public Property NOMBRE as String Get End Get Set(byval value as String) End Set End Property Public Property SUGERENCIA as String Get End Get Set(byval value as String) End Set End Property Public Property TITULO as String Get End Get Set(byval value as String) End Set End Property Public Function ENVIAR as Ninguno End Function End Class

Page 65: Generador de Patrones de Diseño (GEPADI)

55

Usos conocidos (patrones ejemplos): la siguiente Tabla 6 muestra la relación que existe

entre los componentes de gobierno electrónico y los patrones ejemplos que se pudieron

generar con la ayuda del GEPADI una vez generado el patrón de diseño “FormularioBD”

para el dominio específico, en este caso gobierno electrónico.

Tabla 6 Patrones de Gobierno Electrónico “FormularioBD”

Componente del gobierno

electrónico

Patrones de Gobierno Electrónico “FormularioBD” (Patrones Ejemplos)

Interacción Registro de ciudadano

Transacción Trámite

Integración Horizontal

Vertical

Patrones relacionados: Formulario, Singleton

Page 66: Generador de Patrones de Diseño (GEPADI)

CONCLUSIONES

Los patrones en el área de la ingeniería de software se pueden observar de una manera

análoga a los patrones que se desarrollan en otras áreas, como los patrones de arquitectura

y construcción; en el área de la psicología con los patrones de comportamiento; así en el

área de la ingeniería de software los patrones de diseño son usados para retomar una forma

de solucionar un problema utilizado anteriormente y aplicarlos a un nuevo problema que

este en desarrollo.

Un patrón describe, con algún nivel de abstracción, una solución experta a un problema. Los

patrones solucionan problemas que existen en muchos niveles de abstracción. Los patrones

ayudan a aliviar la complejidad del software en varias fases del ciclo de vida. Aunque los

patrones no son un métodos o un proceso de desarrollo de software, completa y facilitan los

procesos existentes.

Los patrones de diseño proporcionan ejemplos de cómo los diseñadores expertos resuelven

algunos problemas que se presentan durante el diseño. Con su forma de proceder,

consiguen realizar programas fáciles de leer, mantener y modificar. Las herramientas que

existen actualmente para el manejo de patrones de diseño requieren en su mayoría de un

IDE (Entorno de Desarrollo Integrado) que son muy pesados para el computador. El

GEPADI es ligero y no ocupa mucho espacio de memoria. Por otra parte, el GEPADI

documenta un patrón en forma de una plantilla, siguiendo la metodología de trabajo de GoF,

que es conocida por la mayoría de los desarrolladores de software.

El GEPADI guarda toda la información en formato XML, esto permite que los patrones

puedan ser exportados a otros entornos de trabajo. Hay que destacar que los patrones son

un elemento básico en la ingeniería de modelos, esto significa que los patrones de diseño

una vez desarrollados en GEPADI, pueden ser exportados a una herramienta de modelado,

para ser aplicados a dominio de problema específico.

Lo anterior ha sido probado experimentalmente en una herramienta de modelado

denominada “Proyecto YCLY”, que modela interfaces de usuario. Los patrones de gobierno

electrónico fueron exportados a esta herramienta para transformarlos a interfaces de

usuario. Las principales ventajas que se observaron en esta prueba fueron las siguientes:

Permite manipular los patrones de diseño como elementos básicos de modelado.

Page 67: Generador de Patrones de Diseño (GEPADI)

58

Es flexible, y se pueden añadir fácilmente nuevos elementos estructurales a un

patrón, tales como código (asociado a los métodos), notas, restricciones, etc.

Puede ser fácilmente introducida en una herramienta de más alto nivel, que trabaje al

nivel de modelos de diseño de sistemas software.

El GEPADI, presentado una arquitectura, para manipular patrones de diseño de forma

sencilla, esto permite a los estudiantes utilizarlo para crear patrones de diseños y a su vez

es una herramienta de apoyo para su aprendizaje, presentado las siguientes características:

Manejo de la información de patrones a través de las plantillas.

Manejo de patrones (instanciación, creación, borrado, etc).

Gestión de vistas (de estructura y de código) y generación de resultados.

Uno de las principales limitaciones del GEPADI es mantener la cardinalidad de sus

componentes significativos, para un elemento compuesto deben ser mantenidas

explícitamente mediante el código ya que no se maneja la cardinalidad mediante la interfaz.

Page 68: Generador de Patrones de Diseño (GEPADI)

RECOMENDACIONES

1. Realizar un portal alusivo al Generador de Portales de Diseño (GEPADI), donde se

encuentre la aplicación, para poder ser descargada o en su defecto hacer un portal que

funcione como la aplicación.

2. Desarrollar la aplicación para otros sistemas operativos como el Linux o de la Mac, para

así poder ampliar la versatilidad de la herramienta.

3. Ampliar la arquitectura del GEPADI para dar soporte a la inclusión de otros elementos de

modelado aparte de los considerados, tales como notas, restricciones.

4. Incluir en el GEPADI mecanismos de recuperabilidad, para que maneje las

funcionalidades de deshacer y rehacer en los patrones de diseño.

5. Elaborar los vientres (23) patrones de diseños propuestos por GoF para así ampliar su

catálogo de patrones y darle más soporte a la metodología de trabajo en la cual se basó

el GEPADI.

6. Seguir las recomendaciones propuesta por GoF (1995) de cómo utilizar un patrón de

diseño una vez que se haya escogido. A continuación se dictan los pasos:

6.1. Leer el patrón de principio a fin para tener una perspectiva. Prestar atención en la

metodología de trabajo en la sección de Aplicación y Consecuencias, para

garantizar que el modelo sea adecuado para el dominio especifico e estudio.

6.2. Volver a estudiar la Estructura, Participantes, y Colaboraciones de la metodología de

trabajo, para asegurarse de entender bien las clases y objetos en el modelo y cómo

se relacionan el uno con el otro.

6.3. Buscar en la metodología de trabajo Ejemplo de Código para ver un ejemplo

concreto del código del patrón. De esta manera estudiar el código ayuda a aprender

cómo aplicar el patrón.

6.4. Elegir los nombres de los Participantes en el patrón que son significativas en el

contexto de la Aplicación. Los nombres de los participantes en los patrones de

diseño son generalmente demasiado abstracto para aparecer directamente en una

Page 69: Generador de Patrones de Diseño (GEPADI)

60

aplicación. Sin embargo, es útil incorporar el nombre del participante en el nombre

que aparece en el de la aplicación. Esto ayuda a hacer el modelo más explícito en la

ejecución. Por ejemplo, si utiliza el patrón Strategy para un algoritmo de composición

de texto, entonces podría haber una clase llamada SimpleLayoutStrategy o

TeXLayoutStrategy.

6.5. Definir las clases. Declarar las interfaces, establecer las relaciones de herencia, y

definir las variables de instancia que representan los datos y las referencias a

objetos. Identificar las clases existentes en la aplicación a la que afectará el patrón y

modificar en consecuencia.

6.6. Definir los nombres específicos de la aplicación de las operaciones en el patrón. Una

vez más, los nombres en general dependen de la aplicación. Usar las

responsabilidades y colaboraciones relacionadas con cada operación como una

guía. Además, ser coherente en sus convenciones de nombres. Por ejemplo, podría

utilizar el "Create-" prefijo consistente para referirse a un método de factory.

6.7. Implementar las operaciones para llevar a cabo las responsabilidades y

colaboraciones en el patrón. En la metodología de trabajo en la sección de

Implementación se ofrece consejos para guiar la puesta en práctica del patrón.

Estos son sólo recomendaciones comenzar una vez que se haya escogido el patrón de

diseño. Pero esto no quiere decir que con el tiempo y la experiencia adquirida no se

pueda desarrollar una forma propia de trabajo una vez escogido el patrón de diseño con

el cual se va a trabajar.

Los patrones de diseño no deben aplicarse indiscriminadamente. A menudo, lograr la

flexibilidad y la variabilidad mediante la introducción de niveles adicionales de indirección,

y que pueden complicar un diseño y/o el costo que algunos rendimientos. Un patrón de

diseño sólo debería ser aplicado cuando la flexibilidad que proporcione sea realmente

necesaria. La sección de Consecuencias de la metodología de trabajo es útil para

evaluar los beneficios de un patrón de diseño en particular.

Page 70: Generador de Patrones de Diseño (GEPADI)

REFERENCIAS BIBLIOGRÁFICAS

Alexander, C. (1977). A Pattern Language. Oxford University Press.

AlphaWorks. (2011). Recuperado el 08 de diciembre de 2011 desde AlphaWorks:

http://www.alphaworks.ibm.com/tech/dptk/download

Banco Mundial. (2011). Recuperado el 09 de diciembre de 2011 desde

http://go.worldbank.org/M1JHE0Z280 .

Banco Interamericano de Desarrollo (2011). manual.gob. Estrategias de gobierno

electrónico en los países de la región 1: La definición de un modelo de análisis y

estudio de casos. Recuperado el 20 de noviembre de 20011 desde

www.iadb.org/sds/itdev/doc/manual_gobes.pdf.

Bonillo, P. (2006). Metodología para la gerencia de los procesos del negocio sustenta

en el uso de patrones. Business process management with the use of patterns

methodology. Revista de Gestão da Tecnologia e Sistemas de Informação Journal of

Information Systems and Technology Management Vol. 3, No. 2, p. 143-162. ISSN

online: 1807-1775.

Budinsky, F y col. and Vlissides, J. (1996): Cogent: Automatic Code Generation from

Design Patterns. IBM. Research Journal Volume 35, Number 2, 1996

http://www.cs.uiuc.edu/homes/snir/PPP/skeleton/auto.pdf.

Bulka, A. (2003). Design Pattern Automation. In Proc. Pattern Languages of

Programs 2002. Revised papers from the Third Asia-Pacific Conference on Pattern

Languages of Programs, (KoalaPLoP 2002), Melbourne, Australia. CRPIT, 13. Noble,

J., Ed. ACS. 1.

Buschmann, F., Meunier, R., Rohnert, H., Sommerlad, P., y Stal, M. (1996). Pattern-

Oriented Software Architecture: A System of Patterns. Wiley & Sons.

Centro Nacional de Tecnología de Información (2001). Agenda de gobierno

electrónico (marco conceptual y plan estratégico). Agosto.

Coad, P. (1995). Object Models: Stategies, Patterns and Applications. Englewood

cliffs, NJ.: Prentice-Hall.

Coplien, J. (1992). “Advanced C++ Programming Styles and Idioms”. Addison-

Wesley.

DPAToolkit. (2011). Design Pattern Automation Toolkit. Recuperado el 23 de 2011,

desde DPAToolkit: http://dpatoolkit.sourcesforge.net/

Fowler, M. (1997). Analysis Patterns: Reusable Object models. Addison-Wesley.

Gamma, E., Helm, R., Johnson R. and Vlissides, J. (1995). Design Patterns.

Elements of Reusable Software, Addison-Wesley, Reading, MA.

Page 71: Generador de Patrones de Diseño (GEPADI)

62

Griffiths, R. (2002). The Brighton Usability Pattern Collection. Recuperado el 18 de

junio de 2010 de http://www.cmis.brighton.ac.uk/research/patterns/home.html.

Hiller, J. S. y F. Bélange r. 2001. Privacy Strategies for Electronic Government. En E-

Government 2001, editado por Abramson, M. A. y G. E. Jeans, 162-198. Lanham,

Maryland: Rowman & Littlefield Publishers.

HistoryOfPatterns. (2010). History of patterns. Recuperado el 03 de noviembre de

2011 de http://c2.com/cgi-bin/wiki?HistoryOfPatterns

Holden, S. H., D. F. Norris y P. D. Fletcher. 2003. Electronic Government at the Local

Level: Progress to Date and Future Issues. Public Performance & Management

Review 26 (4): 325-344.

Larman, C. (2004). UML y Patrones. Una introducción al análisis orientado a objetos

y al proceso unificado. Prentice Hall.

Layne, K. y J. Lee. 2001. Developing Fully Functional E-Government: A Four Stage

Model. Government Information Quarterly 18 (2): 122-136. Elsevier Science Inc.

Lea, D. (1994). Christopher Alexander: An Introduction for Object-Oriented

Designers. ACM SIGSOFT Software Engineering Notes Vol. 19 No. 1, January 1994.

Page 39.

Lucrédio, D.; Alvaro, A.; Almeida, E.S. and Prado, A. F. (2003) MVCASE Tool:

Working with Design Patterns. In Proceedings of the Third Latin American

Conference on Pattern Languages of Programming (SugarLoafPLoP 2003).

Mahemoff, M. y Johnston, L. (1998). Pattern Language for Usability : An Investigation

of Alternative Approaches. Asia-Pacific Conference on Human-Computer Interaction

(APCHI’98) Proceedings, 25-31. Tanaka.

Moon, M. J. 2002. The Evolution of EGovernment Among Municipalities: Rhetoric or

Reality?. Public Administration Review 62 (4): 424-433.

Organización de los Estados americanos (OEA). (2006). Introducción a la

Formulación de Estrategias de Gobierno Electrónico. Módulo 1: Introducción al

Gobierno Electrónico. Curso dictado en línea.

PatternBox. (2011). Recuperado el 23 de diciembre de 2011 desde PatternBox:

http://patternbox.com/

Perzel, K., Kane, D. (1999). Usability Patterns for Applications on the World Wide

Web. PloP’99 Conference.

Sandoval, R y Gil, R. (2005). Assessing E-Government in Mexico: A Preliminary

Analysis of the State Portals. En Managing Modern Organizations with Information

Technology, editado por Khosrow-Pour, M. 1083-1087. Hershey, PA: IGI Global.

Tidwell, J. (2005). Designing Interfaces, O’Reilly Media.

Page 72: Generador de Patrones de Diseño (GEPADI)

63

UN y ASPA. 2002. Benchmarking E-government: A Global Perspective. New York:

United Nations Division of Public Economics and Public Administration and the

American Society for Public Administration.

Vandyke, C. (2009). A Design Pattern Generation Tool. Worcester Polytechnic

Institute (WPI).

Welie, M. and H. Traetteberg (2000). Interaction Patterns in User Interfaces. 7th.

Pattern Languages of Programs Conference, Illinois, USA.

Page 73: Generador de Patrones de Diseño (GEPADI)

ANEXOS Patrones Ejemplo de Gobierno Electrónico

Page 74: Generador de Patrones de Diseño (GEPADI)

Patrones Ejemplo de Gobierno Electrónico

En este anexo se colocó todos los patrones ejemplos que pertenecen a las clases abstracta

explicadas en el capítulo cuatro (4), pero de una manera detallada mostrando su estructura y su

código.

Nombre del patrón: Info

La siguiente Tabla 1 es traída del capítulo 4 de este trabajo de ascenso como referencia

Tabla 1 Patrones de Gobierno Electrónico “Info”

Componente del Gobierno

Electrónico

Patrones de Gobierno Electrónico “Info” (Patrones Ejemplos)

Presencia

Funciones

Localización física

Misión

Nombre del portal

Objetivos

Organigrama

Presentación

Visión

Información

Ayuda

Calendario de actividades

Enlace de interés

Eventos

Mapa de sitio

Noticias

Otros enlaces

Política de privacidad y condiciones

Preguntas frecuentes

Interacción Leyes

Procedimientos de los trámites

Presencia

Patrón Ejemplo: Funciones

Page 75: Generador de Patrones de Diseño (GEPADI)

Figura 1. Funciones

Código Ejemplo:

Código en Java VB.net

Class Funciones{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Funciones Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Patrón Ejemplo: Localización física

Figura 2. Localización física

Código Ejemplo:

Page 76: Generador de Patrones de Diseño (GEPADI)

Código en Java VB.net

Class Localizacion_Fisica{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Localizacion_Fisica Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Patrón Ejemplo: Misión

Figura 3. Misión

Código Ejemplo:

Código en Java VB.net

Class Mision{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Mision Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Patrón Ejemplo: Nombre del Portal

Page 77: Generador de Patrones de Diseño (GEPADI)

Figura 4. Nombre del Portal

Código Ejemplo:

Código en Java VB.net

Class Nombre_Portal{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Nombre_Portal Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Patrón Ejemplo: Objetivos

Figura 5. Objetivos

Page 78: Generador de Patrones de Diseño (GEPADI)

Código Ejemplo:

Código en Java VB.net

Class Objetivos{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Objetivos Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Patrón Ejemplo: Organigrama

Figura 6. Organigrama

Código Ejemplo:

Código en Java VB.net

Class Organigramas{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Organigramas Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Page 79: Generador de Patrones de Diseño (GEPADI)

Patrón Ejemplo: Presentación

Figura 7. Presentación

Page 80: Generador de Patrones de Diseño (GEPADI)

Código Ejemplo:

Código en Java VB.net

Class Presentacion{ Public void setFunciones (Funciones value){ } Public Funciones getFunciones ( ){ } Public void setMision (Mision value){ } Public Mision getMision ( ){ } Public void setnombreportal (Nombre Portal value){ } Public Nombre Portal getnombreportal ( ){ } Public void setObjetivos (Objetivos value){ } Public Objetivos getObjetivos ( ){ } Public void setVision (Vision value){ } Public Vision getVision ( ){ } }

Class Presentacion Public Property Funciones as Funciones Get End Get Set(byval value as Funciones) End Set End Property Public Property Mision as Mision Get End Get Set(byval value as Mision) End Set End Property Public Property nombreportal as Nombre Portal Get End Get Set(byval value as Nombre Portal) End Set End Property Public Property Objetivos as Objetivos Get End Get Set(byval value as Objetivos) End Set End Property Public Property Vision as Vision Get End Get Set(byval value as Vision) End Set End Property End Class

Patrón Ejemplo: Visión

Page 81: Generador de Patrones de Diseño (GEPADI)

Figura 8. Visión

Código Ejemplo:

Código en Java VB.net

Class Vision{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Vision Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Información

Patrón Ejemplo: Ayuda

Page 82: Generador de Patrones de Diseño (GEPADI)

Figura 9. ayuda

Código Ejemplo:

Código en Java VB.net

Class Ayuda{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Ayuda Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Patrón Ejemplo: Calendario de Actividades

Page 83: Generador de Patrones de Diseño (GEPADI)

Figura 10. Calendario de Actividades

Código Ejemplo:

Código en Java VB.net

Class Calendario_de_Actividades{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Calendario_de_Actividades Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Patrón Ejemplo: Enlace de interés

Figura 11. Enlace de interés

Código Ejemplo:

Código en Java VB.net

Class Enlaces_de_Interes{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Enlaces_de_Interes Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Page 84: Generador de Patrones de Diseño (GEPADI)

Patrón Ejemplo: Eventos

Figura 12. Eventos

Código Ejemplo:

Código en Java VB.net

Class Eventos{ Public void setCalendario (Calendario de Actividades value){ } Public Calendario de Actividades getCalendario ( ){ } Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Eventos Public Property Calendario as Calendario de Actividades Get End Get Set(byval value as Calendario de Actividades) End Set End Property Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property

Page 85: Generador de Patrones de Diseño (GEPADI)

End Class

Patrón Ejemplo: Mapa de sitio

Figura 13. Mapa de sitio

Código Ejemplo:

Código en Java VB.net

Class Mapa_del_Sitio{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Mapa_del_Sitio Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Patrón Ejemplo: Noticias

Page 86: Generador de Patrones de Diseño (GEPADI)

Figura 14. Noticias

Código Ejemplo:

Código en Java VB.net

Class Noticias{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Noticias Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Patrón Ejemplo: Otros enlaces

Figura 15. Otros enlaces

Código Ejemplo:

Page 87: Generador de Patrones de Diseño (GEPADI)

Código en Java VB.net

Class Otros_Enlaces{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Otros_Enlaces Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Patrón Ejemplo: Políticas de privacidad y condiciones

Figura 16. Políticas de privacidad y condiciones

Código Ejemplo:

Código en Java VB.net

Class Politicas_de_Privacidad__y_Condiciones_de_Uso{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Politicas_de_Privacidad__y_Condiciones_de_Uso Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Patrón Ejemplo: Preguntas frecuentes

Page 88: Generador de Patrones de Diseño (GEPADI)

Figura 17. Preguntas frecuentes

Código Ejemplo:

Código en Java VB.net

Class Preguntas_Frecuentes{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Preguntas_Frecuentes Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Interacción

Patrón Ejemplo: Leyes

Page 89: Generador de Patrones de Diseño (GEPADI)

Figura 18. Leyes

Código Ejemplo:

Código en Java VB.net

Class Leyes{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Leyes Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Patrón Ejemplo: Procedimientos de los trámites

Figura 19. Procedimiento de los trámites

Page 90: Generador de Patrones de Diseño (GEPADI)

Código Ejemplo:

Código en Java VB.net

Class Procedimiento_de_los_Tramites{ Public void setDatos (Info value){ } Public Info getDatos ( ){ } }

Class Procedimiento_de_los_Tramites Public Property Datos as Info Get End Get Set(byval value as Info) End Set End Property End Class

Nombre del patrón: Datos del Personal

La siguiente Tabla 2 es traída del capítulo 4 de este trabajo de ascenso como referencia

Tabla 2 Patrones de Gobierno Electrónico “Datos del Personal”

(Yedra, 2012)

Componente del Gobierno

Electrónico

Patrones de Gobierno Electrónico “Datos del Personal” (Patrones Ejemplos)

Presencia

Directorio institucional

Directorio relacionado con el portal

Contactenos

Presencia

Patrón Ejemplo: Directorio institucional

Page 91: Generador de Patrones de Diseño (GEPADI)

Figura 20. Directorio institucional

Código Ejemplo:

Código en Java VB.net

Class Directorio_Institucional{ Public void setDatos (Datos del Personal value){ } Public Datos del Personal getDatos ( ){ } }

Class Directorio_Institucional Public Property Datos as Datos del Personal Get End Get Set(byval value as Datos del Personal) End Set End Property End Class

Patrón Ejemplo: Directorio relacionado con el portal

Figura 21. Directorio relacionado con el portal

Page 92: Generador de Patrones de Diseño (GEPADI)

Código Ejemplo:

Código en Java VB.net

Class Directorio_Relacionado_con_el_Portal{ Public void setDatos (Datos del Personal value){ } Public Datos del Personal getDatos ( ){ } }

Class Directorio_Relacionado_con_el_Portal Public Property Datos as Datos del Personal Get End Get Set(byval value as Datos del Personal) End Set End Property End Class

Patrón Ejemplo: Contactenos

Page 93: Generador de Patrones de Diseño (GEPADI)

Figura 22. Contactenos

Código Ejemplo:

Código en Java VB.net

Class Contactenos{ Public void setDireccion (Localizacion Fisica value){ } Public Localizacion Fisica getDireccion ( ){ }

Class Contactenos Public Property Direccion as Localizacion Fisica Get End Get Set(byval value as Localizacion Fisica) End Set End Property

Page 94: Generador de Patrones de Diseño (GEPADI)

Public void setDirectorioInstitucion (Directorio Institucional value){ } Public Directorio Institucional getDirectorioInstitucion ( ){ } Public void setDirectorioportal (Directorio Relacionado con el Portal value){ } Public Directorio Relacionado con el Portal getDirectorioportal ( ){ } Public void setHorariosAtencion (Horario de atencion al publico value){ } Public Horario de atencion al publico getHorariosAtencion ( ){ } }

Public Property DirectorioInstitucion as Directorio Institucional Get End Get Set(byval value as Directorio Institucional) End Set End Property Public Property Directorioportal as Directorio Relacionado con el Portal Get End Get Set(byval value as Directorio Relacionado con el Portal) End Set End Property Public Property HorariosAtencion as Horario de atencion al publico Get End Get Set(byval value as Horario de atencion al publico) End Set End Property End Class

Nombre del patrón: Formulario

La siguiente Tabla 3 es traída del capítulo 4 de este trabajo de ascenso como referencia

Tabla 5 Patrones de Gobierno Electrónico “Formulario”

Componente del Gobierno

Electrónico

Patrones de Gobierno Electrónico “Formulario” (Patrones Ejemplos)

Interacción Sugerencias

Participación

política

Chat

Correo

Encuesta

Foro

Voto electrónico

Interacción

Patrón Ejemplo: Sugerencias

Page 95: Generador de Patrones de Diseño (GEPADI)

Figura 23. Sugerencias

Código Ejemplo:

Código en Java VB.net

Class Sugerencias{ Public void setFORM (Formulario value){ } Public Formulario getFORM ( ){ } }

Class Sugerencias Public Property FORM as Formulario Get End Get Set(byval value as Formulario) End Set End Property End Class

Participación política

Patrón Ejemplo: Chat

Page 96: Generador de Patrones de Diseño (GEPADI)

Figura 24. Chat

Código Ejemplo:

Código en Java VB.net

Class Chat{ Public void setFORM (Formulario value){ } Public Formulario getFORM ( ){ } }

Class Chat Public Property FORM as Formulario Get End Get Set(byval value as Formulario) End Set End Property End Class

Patrón Ejemplo: Correo

Page 97: Generador de Patrones de Diseño (GEPADI)

Figura 25. Correo

Código Ejemplo:

Código en Java VB.net

Class Correo{ Public void setFORM (Formulario value){ } Public Formulario getFORM ( ){ } }

Class Correo Public Property FORM as Formulario Get End Get Set(byval value as Formulario) End Set End Property End Class

Patrón Ejemplo: Encuestas

Figura 26. Encuestas

Código Ejemplo:

Código en Java VB.net

Class Encuestas{ Class Encuestas

Page 98: Generador de Patrones de Diseño (GEPADI)

Public void setFORM (Formulario value){ } Public Formulario getFORM ( ){ } }

Public Property FORM as Formulario Get End Get Set(byval value as Formulario) End Set End Property End Class

Patrón Ejemplo: Foro

Figura 27. Foro

Código Ejemplo:

Código en Java VB.net

Class Foro{ Public void setFORM (Formulario value){ } Public Formulario getFORM ( ){ } }

Class Foro Public Property FORM as Formulario Get End Get Set(byval value as Formulario) End Set End Property End Class

Patrón Ejemplo: Voto electrónico

Page 99: Generador de Patrones de Diseño (GEPADI)

Figura 28. Voto electrónico

Código Ejemplo:

Código en Java VB.net

Class Voto_Electronico{ Public void setFORM (Formulario value){ } Public Formulario getFORM ( ){ } }

Class Voto_Electronico Public Property FORM as Formulario Get End Get Set(byval value as Formulario) End Set End Property End Class

Nombre del patrón: Formulario BD

La siguiente Tabla 4 es traída del capítulo 4 de este trabajo de ascenso como referencia

Tabla 4 Patrones de Gobierno Electrónico “FormularioBD” (Yedra, 2012)

Componente del Gobierno

Electrónico

Patrones de Gobierno Electrónico “FormularioBD” (Patrones Ejemplos)

Interacción Registro de ciudadano

Transacción Trámite

Integración Horizontal

Page 100: Generador de Patrones de Diseño (GEPADI)

Componente del Gobierno

Electrónico

Patrones de Gobierno Electrónico “FormularioBD” (Patrones Ejemplos)

Vertical

Interacción

Patrón Ejemplo: Registro de ciudadano

Figura 29. Registro ciudadano

Código Ejemplo:

Código en Java VB.net

Class Registro_de_Ciudadanos{ Public void setFormulario (Formulario BD value){ } Public Formulario BD getFormulario ( ){ } }

Class Registro_de_Ciudadanos Public Property Formulario as Formulario BD Get End Get Set(byval value as Formulario BD) End Set End Property End Class

Transacción

Patrón Ejemplo: Trámite

Page 101: Generador de Patrones de Diseño (GEPADI)

Figura 30. Trámite

Código Ejemplo:

Código en Java VB.net

Class Tramite{ Public void setFormulario (Formulario BD value){ } Public Formulario BD getFormulario ( ){ } }

Class Tramite Public Property Formulario as Formulario BD Get End Get Set(byval value as Formulario BD) End Set End Property End Class

Integración

Patrón Ejemplo: Horizontal

Page 102: Generador de Patrones de Diseño (GEPADI)

Figura 31. horizontal

Código Ejemplo:

Código en Java VB.net

Class Horizontal{ void setFormulario (Formulario BD value){ } Formulario BD getFormulario ( ){ } }

Class Horizontal Property Formulario as Formulario BD Get End Get Set(byval value as Formulario BD) End Set End Property End Class

Patrón Ejemplo: Vertical

Figura 32. Vertical

Código Ejemplo:

Código en Java VB.net

Class Vertical{ void setformulario (Formulario BD value){ }

Class Vertical Property formulario as Formulario BD Get End Get

Page 103: Generador de Patrones de Diseño (GEPADI)

Formulario BD getformulario ( ){ } }

Set(byval value as Formulario BD) End Set End Property End Class