cerrar-sesion editar-perfil marker video calendario monitor periodico fax rss twitter facebook google-plus linkedin alarma circulo-derecha abajo derecha izquierda mover-vertical candado usuario email lupa exito mapa email2 telefono etiqueta

400410405. El valor de las implementaciones de Patrones

Escrito por Redacción en Tema de portada
no hay comentarios Haz tu comentario
Imagen de logotipo de facebook Imagen de logotipo de Twitter Imagen de Logotipo de Google+ Imagen de logotipo de Linkedin

En la última década más o menos, hemos oído hablar sobre el uso de patrones para el diseño de soluciones de software. Gran parte de este debate se inició con Patrones de Diseño: Elementos de Software Reutilizable Orientado a Objetos, de Erich Gamma y otros, que mostraba cómo usar el concepto de patrones en el desarrollo del software – en el que un patrón es una solución demostrada a un problema conocido dentro de un contexto dado.

Los patrones de Patrones de Diseño y los libros que llegaron después nos permitieron mejorar los diseños, comunicarnos con otros y aprender sobre buenas prácticas de diseño.

La historia de los patrones se hace aún más interesante si examinamos la implementación de patrones. En el presente artículo, vamos a explorar las ventajas de estas implementaciones de patrones.

La especificación de patrones y la implementación de patrones

En la literatura existente, se describe con frecuencia a los patrones de una manera formal. La descripción, normalmente, incluye una descripción detallada del patrón, el contexto en el que aplicarlo, y las fuerzas que aborda. Esta información general es lo que se denomina la “especificación de patrones”, y su fin es describir el patrón y ayudarnos a establecer cómo y cuándo se debería aplicar éste. Los arquitectos o diseñadores pueden a continuación usar la especificación del patrón como modelo para aplicar el patrón.


La idea de una “implementación de patrones” surgió del deseo de ir más allá de la simple utilización de especificaciones de patrones como plan maestro. En nuestra calidad de arquitectos, diseñadores y desarrolladores estamos buscando continuamente formas de automatizar y acelerar las partes más terrenales y mecánicas de nuestro trabajo. La implementación de patrones es un artefacto que permite la codificación de una especificación de patrones y automatiza su aplicación en un entorno determinado.

Un punto clave es el hecho de que las implementaciones de patrones pueden generar muchos tipos de artefactos. Pueden ser usados para general modelos UML, código, u otros artefactos basados en texto del tipo JSP, páginas JSF, scripts de despliegue, scripts de comprobación, artefactos del proyecto Eclipse, etc. Además, las implementaciones de patrones pueden ser creadas y utilizadas en fases distintas del ciclo de vida y en niveles distintos dentro de una aplicación.

Esto implica que podemos usar implementaciones de patrones a niveles altos de abstracción como cuando debatimos sobre los requisitos o realizamos un análisis inicial del sistema. Significa también que podemos usar implementaciones de patrones cuando estamos realizando el tránsito del análisis al diseño y, después, a una implementación – todo el tiempo moviéndonos de una representación más abstracta (una serie de modelos) a una representación que es muy específica (código).

Con Rational Software Architect para ilustrarlo, podemos ver que las implementaciones de patrones afloran a la superficie de dos maneras:- Patrones UML. Se aplica un patrón UML dentro del ámbito de un modelo. El patrón puede aplicar marcado a un modelo, añadir elementos de modelos o crear relaciones entre elementos nuevos u otros ya existentes (Figura 1).
– Transformaciones. En contraste con los Patrones UML, una Transformación normalmente convierte elementos de un modelo fuente en elementos de un modelo destino distinto. En el caso de una Transformación, los modelos de input y output soportados van más allá del UML. Empleamos el término “modelo” en un sentido más amplio, para referirnos a una representación rica, desde el punto de vista semántico, de los elementos y sus relaciones.


El modelo normalmente se especifica mediante un lenguaje formal con una estructura y una semántica bien definida. Como tal, UML es una opción, pero también podríamos usar otros lenguajes basados en Eclipse Modeling Framework (EMF). Además, podemos trabajar con modelos que incentivan a Java; XML, u otros lenguajes para que definan los elementos que contienen (Figura 2).

La creación de implementaciones de patrones es posible sólo por la convergencia de tres flujos con el pensamiento de las TI, a saber: Especificaciones de Patrones, Desarrollo Dirigido a Modelos (MDD) y Meta-herramientas.

Patrones, MDD y Metaherramientas

Al examinar la convergencia de especificaciones de patrones, MDD y meta-herramientas, observamos que ninguna de estas disciplinas es especialmente nueva. Cada una va a asociada a una comunidad que lleva desarrollando y madurando su dominio una serie de años. El nuevo e interesante aspecto se produce cuando unimos estos tres conceptos en un entorno de desarrollo de carácter general.

El desarrollo dirigido a modelos es un método en el que los modelos son un artefacto de desarrollo clave. Los modelos se utilizan par capturar y comunicar el diseño – y se usan preferentemente para generar las soluciones que representan.

MDD proporciona una estrategia para aumentar la productividad y la calidad del desarrollo de software al hacernos pensar en las variables esenciales del diseño; de esta forma el modelo nos permite trabajar en el nivel de abstracción adecuado a la tarea que tenemos entre manos.

Se delega en las herramientas las actividades estándar, repetitivas y algorítmicas para expresar estas variables en un entorno tecnológico concreto.

La idea de las meta-herramientas es que disponemos de herramientas que nos permiten compilar herramientas. En concreto, para crear implementaciones de patrones, que son en sí mismas herramientas, nos interesan dos meta-herramientas:
– Herramientas de modelado (como Rational Software Architect) nos ofrecen plataformas que codifican las buenas prácticas para ser usadas de nuevo. Con estas herramientas, podemos crear, reutilizar y ejecutar implementaciones de patrones para automatizar el diseño y el desarrollo.
– EMFT JET, un motor de plantillas capacitado para Eclipse, que genera aplicaciones basadas en transformaciones de arquitecturas a medida y dirigidas a modelos. Este plug-in puede acelerar el desarrollo de tipos comunes de aplicaciones mediante transformaciones que capturan buenas (o actuales) prácticas para el diseño e implementación de dichas aplicaciones.

Las herramientas asociadas de autoría ejemplar nos permiten crear con rapidez implementaciones de patrones que pueden usarse en combinación y ofrecer una plataforma para las implementaciones de patrones.

¿Por qué molestarse?

Las principales ventajas de usar implementación de patrones se pueden resumir como:- La Mayor productividad acelera la compilación y comprobación del software y facilita su uso a los principiantes.
– El mejor gobierno del software refuerza los estándares de arquitectura, diseño y codificación y aumenta la calidad. Productos finales de mayor calidad debido a un mayor nivel de consistencia. Mayor incentivo para las capacidades de los expertos dentro de la organización del desarrollo.
– La simplificación de la arquitectura ofrece un vocabulario y un conjunto de artilugios que se usan para diseñar e implementar una solución, y automatiza la forma de tratar una complejidad.

En la implementación de patrones, la idea clave es que hemos codificado y automatizado una buena práctica. Cuando llega el momento de usar la implementación de patrones, podemos realizar el trabajo de forma más rápida que si lo hiciéramos manualmente.

Las implementaciones de patrones pueden usarse para generar tanto el código (y los artefactos relacionados que comprenden la solución) como los artefactos que se utilizan para comprobar la solución. Siempre hay que pagar un precio para desarrollar el activo inicialmente. Sin embargo, si usamos el activo muchas veces, ahorramos tiempo cada vez que usamos la automatización en lugar de realizar la tarea de forma manual.

El uso de implementaciones de patrones también les permite a los nuevos del equipo usar el activo sin tener necesariamente la experiencia o el conocimiento necesarios para crear realmente el patrón. Sólo necesitan saber cómo usar el activo resultante, que por supuesto representa las mejores prácticas. Como tales, pueden operar a un nivel mucho más alto que si se vieran forzados a abrirse paso ellos solos.

Conforme aumenta el tamaño de los equipos y se especializan sus miembros, nos encontramos a menudo con retos para garantizar que quienes están implementando la arquitectura y el diseño se mantengan fieles a las intenciones de los arquitectos y diseñadores. Un reto adicional aquí es el hecho de que los miembros del equipo no se hallan a menudo en un mismo sitio, sino que se distribuyen por todo el globo.

Para abordar esta cuestión, se puede incentivar la implementación de patrones de dos formas:
– Para transformar el diseño en los artefactos de código deseado. De esta forma, queda poco espacio a la interpretación, el error manual o la creatividad no deseada/ no intencionada.
– Para transformar los artefactos de código en elementos de diseño. De esta forma, podemos reconciliar los artefactos de código actuales con lo que se especificó en el diseño.

La buena gobernanza implica también determinar y gestionar la relación existente entre los requisitos y la solución que se está compilando para cumplir con dichos requisitos. Con ello deberíamos poder seguir el rastro de todo el código hasta los requisitos. A este concepto lo denominamos “trazabilidad”, y se usa tanto para gestionar el código que se ha escrito en primer lugar como para ayudarnos cuando llega el momento de determinar el impacto del cambio.

Para soportar la trazabilidad dentro del modelo, podemos añadir conexiones que muestran la relación entre los elementos que hay en el diseño y los requisitos. Las implementaciones de patrones pueden imitar este comportamiento – de manera que, conforme vamos aplicando los patrones a la solución, automáticamente crean enlaces de trazabilidad entre los elementos del modelo que fueron el input al patrón y los artefactos que se terminan produciendo.

Porque hay estos enlaces, podemos mostrar cómo los elementos de la solución trazan un mapa de vuelta a los requisitos. Si cambian estos, podremos contestar la pregunta “¿Cuál es el impacto del cambio?” Si tenemos que cambiar el código, podemos contestar la pregunta, “¿Por qué está codificado para que se comporte de esta forma?”
Independientemente de la rapidez con que podamos compilar nuestras soluciones, lo cierto es que de nada vale si la calidad no tiene un nivel aceptable.

La primera forma en que pueden ayudar las implementaciones de patrones en estos casos es obvia – la implementación de patrones es la personificación de nuestra solución de buenas prácticas. Al usar el patrón, el resultado que se genera es el mejor que podemos generar y debería cumplir con los requisitos de calidad.

Hay otras formas menos obvias en las que las implementaciones de patrones pueden mejorar la calidad de las soluciones. Por ejemplo, si se encuentra un error en un patrón, podemos actualizar la implementación de patrones y reaplicar el patrón. La reaplicación quiere decir que simplemente volvemos a ejecutar el patrón y hacemos que genere un resultado que contiene el arreglo.

Si hubiéramos realizado el trabajo manualmente, hubiéramos tenido que arreglar el código manualmente en cada lugar en el que se producía el error. Y, como estaríamos realizando esa labor manualmente, es bastante probable la introducción de un nuevo defecto en algún punto del código actualizado.

Cuando codificamos nuestras buenas prácticas en la implementación de patrones, afirmamos implícitamente que estamos trabajando con expertos para crear una representación de buenas prácticas. Si dejáramos que se hiciera este trabajo manualmente, podría ser realizado por un grupo de gente con diversos niveles de pericia. Poder hacer una réplica del trabajo de los miembros más expertos del equipo nos lleva a un mayor nivel de calidad.

Simplificación de la arquitectura

En los años de desarrollo de software, hemos continuado potenciando la abstracción y las herramientas para compilar soluciones cada vez más complejas. Las implementaciones de patrones nos permiten dar el siguiente paso en esta evolución.

Una vez más, las especificaciones de patrones nos proporcionaron un vocabulario a utilizar en el diseño y compilación de soluciones. Ya no tuvimos que debatir cosas a nivel de código y de módulo. Los patrones nos permiten la comunicación en un lenguaje conocido y compartido que lleva consigo buenas prácticas y soluciones demostradas.

Conforme vamos avanzando con las implementaciones de patrones, podemos potenciar este mecanismo de comunicación y construir sobre él. Con la implementación de patrones tenemos ahora un conjunto de artilugios dentro de nuestras herramientas que podemos traer para dar soporte a nuestros proyectos. Podemos usarlos par comunicar, diseñar y generar. Estos artilugios extraen gran parte de la complejidad, permitiéndonos concentrarnos en el problema que tenemos entre manos.

Conclusión

En el presente artículo hemos explorado las ventajas del uso de las implementaciones de patrones como artefactos de generación. Otros aspectos que merecen ser explorados son los distintos tipos de implementación de patrones, cómo se pueden compilar y las mejores prácticas que soportan su creación. Pero esto tendrá que quedarse ya para el próximo artículo. DDJ

Etiquetas

Noticias relacionadas

Comentarios

No hay comentarios.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Debes haber iniciado sesión para comentar una noticia.