Plex: Herencia y Reutilización usando Patrones

Moving to English this page is a hard work for me. It will be done, but, in the meantime, use Google for a basic tranlation.

Qué se entiende por Patterns? La definición original de la "Banda de los Cuatro" (Gang of Four), Gamma, Helm, Johnson and Vlissides, en su libro "Design Patterns"

A design pattern systematically names, motivates, and explains a general design that addresses a recurring design problem in object-oriented systems. It describes the problem, the solution, when to apply the solution, and its consequences. It also gives implementation hints and examples. The solution is a general arrangement of objects and classes that solve the problem. The solution is customized and implemented to solve the problem in a particular context. -
[Design patterns] solve specific design problems and make object-oriented designs more flexible and elegant, and ultimately reusable. They help designers reuse successful designs by basing new designs on prior experience. A designer who is familiar with such patterns can apply them immediately to design problems without having to rediscover them

La utilización de Patrones se ha convertido en un elemento ampliamente difundido. Sin embargo, comunmente se puede ver su uso aplicado muy estrechamente atado a los lenguajes en que son descriptos, lográndose en general patrones aplicados a mediano o bajo nivel. O, si su definición es más amplia, no existe un mapeo directo de esa descripción a un objeto generable inmediatamente. Una característica sobresaliente de su uso en Plex, es que el diseño abstracto a nivel de modelo parte ya inicialmente de un patrón descripto a alto nivel, que permite combinar estos "primitivos" para lograr otros de mucho más generalizado alcance. Así, podemos partir de patrones para la recuperación de filas de un orígen de datos, y arribar patrones de manejo de tablas relacionales en general, o partir del mecanismo de funcionamiento de una grilla, y llegar a relaciones complejas entre distintos tipos de entidades en una ventana.

Las características de Plex son sumamente favorables para la utilización de Patrones: La herencia aplicada a alto nivel, la utilización de reemplazo de patrones para componer nuevos, la posibilidad de usar herencia múltiple, combinando la presentación y la lógica de distintos patrones, dan un conjunto de herramientas muy productivas. No tendría sentido trabajar con Plex, sin construír patrones que estandaricen y reduzcan el número de pasos para llegar a la construcción de una aplicación. Un modelo en Plex es la conexión y especialización de un conjunto base de piezas, que se dedican a tareas específicas. Así, a medida que un desarrollo complejo avanza, dispone de un repositorio más rico de partes combinables, que van facilitando el desarrollo en una espiral en crecimiento.

Patrones de Plex hacia Open Source

Inspirado en el movimiento Open Source, y por la iniciativa ya mencionada en la lista de desarrolladores de Plex, de Open Minipatterns, Simon Jasperse acaba de proponer públicamente que se inicie un conjunto de Patrones bajo el modelo abierto, a propósito de su interesante patrón dedicado al manejo de exportación e importación con XML. Es posible hacerlo? Mejor que muchos otros productos, Plex está diseñando para trabajar en grupos, y para administrar versiones y releases. El trabajo remoto no sólo es una posibilidad, sino una realidad en muchos casos; es decir, técnicamente, está privilegiado para lograrlo. Un buen número de colegas lo aprueba, iniciando la posibilidad de ampliar el repertorio existente de patrones en base al trabajo colaborativo de la comunidad existente. Pudiera constituír un impulso a la mayor difusión de Plex.

Elementos básicos de la construcción de patrones con Plex

Qué recursos básicos hay disponibles?

El verbo Is a
El triple IS A permite componer en base a herencia patrones complejos partiendo de otros más simples, así como luego especializar el patrón heredándolo. Como se indica al hablar de los puntos de edición, planear los patrones estableciendo un árbol común de herencia permite aplicar herencia múltiple sobre un mismo objeto, logrando objetos complejos y sofisticados a partir de elemntos más primitivos.
El verbo Replace
Este mecanismo permite que un objeto sea reemplazado en su función por otro. Es posible , a nivel de entidad, reemplazar relaciones con entidades, con funciones, y con vistas (y componentes). A nivel de funciones, reemplazando funciones llamadas, vistas, y a nivel de Regiones, reemplazo de campos. Con estos elementos, se puede construír un patrón, y se puede especializarlo, construyendo instancias del patrón, modificando los resultados en base a la acción de los reemplazos.
Variable Abstracta
Al especificar un patrón, es posible definir los atributos y alcance de una variable, estableciendo los atributos deseados, y relacionándolo con las vistas de datos deseadas, antes de que se le haya asociado ningún dato. De esta forma, al especializarlo, la vista tomará las características definidas en el patrón
Vista Abstracta
Al igual que en las variables, es posible definir en el nivel abstracto sus características, indicando cómo procesará las claves, qué alcance de datos tendrá, si admitirá duplicados.
Metaoperaciones
Las metaoperaciones son fundamentales en la definición de patrones, aunque éstos pueden existir sin metadefiniciones, que afectan básicamente al comportamiento (diagrama de acción). Las metaoperaciones permiten actuar en función de la configuración del modelo (variante, lenguaje, versión, nivel, lenguaje de implementación); en el llamado de funciones, en la asignación de valores, en la definición de operaciones alternativas, y en la predefinición de facilidades para quien especialice el patrón, al permitir eliminar piezas de código según necesidad del desarrollador que especializa (++define/++undefine)
Metafunciones
Son una extensión del caso anterior, permitiendo llamar a funciones que consisten en piezas de metacódigo que realiza operaciones definidas (Validaciones, inicializaciones, manejo de mensajes y excepciones, etc)
Los puntos de edición
El mecanismo de puntos de edición, tiene dos valores fundamentales; en primer lugar, es el método básico de especialización, ya que permite insertar código en un diagrama de acción. Pero además, particularmente los collection points -que debieran ser los únicos donde se inserte código, permiten acumular lógica. Esto no sólo significa que al especializar un patrón se puede agregar más lógica a la heredada (a la manera del extends de Java), sino que, armando una arquitectura de patrones, collection points con el mismo nombre sumarán su lógica, en el orden en que se especifiquen sus triples en el editor de modelo, y los que están definidos en el mismo área (Event Handler, subrutinas), acumularán su lógica a la de otro pattern heredado, en el orden en que la herencia se haya establecido en el editor de modelo. Esto permite acumular herencia, (herencia múltiple), constituyendo un pilar de la construcción de patrones a partir de piezas más elementales.

Casos de uso de Patrones

En el repositorio de Plex es posible obtener como recurso ya disponible, casos complejos como una estructura de lista (Despiece de un producto, por ejemplo), o manejo flexible de contactos de negocios. Un caso particularmente interesante es Websydian, dedicado al desarrollo de aplicaciones Web. En esta sección nos ocuparemos de ellos, usándolos para guiar su aplicación en algunos casos, explicar algunos que fueran complejos, y tomar casos que pudieran ser de interés para dar más productividad al armado de un modelo.

ShowDuoGrid
Una ventana que expone dos grillas de dos entidades. Muy útil para relaciones Padre/Hijo (Parent/Child). Sirve de base para otras construcciones de mayor complejidad. Lo aplicaremos para mostrar el uso de triples de reemplazo.
Edit Detail/Grid2/Insert
Una ventana que expone un Edit Detail (Grilla con instancias del Owner y una region editable con la instancia corriente) mas otra agrupación de Grilla y Detalle del Child. También útil para relaciones Padre/Hijo (Parent/Child). Relevante: el uso de reeplazos y editores de mínima granularidad.
Websydian
El conjunto más complejo y valioso de patrones construído con Plex. Dedicado a la construcción de una variante Web de una aplicación Plex

Con el objetivo de fundamentar el conocimiento de la teoría tras el diseño de Patrones, puede recurrirse a un gran número de fuentes. Iremos indicando aquí algunos de ellos, sea por su valor como fundamento, o sea por los casos que ofrece para su estudio, o por su facilidad de accceso en Internet.

Autores fundamentales
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides Design Patterns: Elements of Reusable Object-Oriented Software
James O. Coplien y Douglas C. Schmidt Pattern Languages of Program Design
Martin Fowler Analysis Patterns: Reusable Object Models
Patterns Of Enterprise Application Architecture
Listas de Bibliografía En Hillside.net
En Enterprise Integration Patterns
En Cetus, listas exhaustivas
En Wikipedia, al final, referencias
En la Universidad Técnica de Munich (TUM)

Sitios, temas y autores dedicados a Patrones
Cetus Una de las fuentes mas completas de información sobre Patrones, como en otros casos de OO.
Pressman Referencias a la mayor parte del material existente (Cetus está incluído, como otras referencias aquí destacadas).
Portland Pattern Repository Sostenido por Ward Cunningham, se puede encontrar teoría y casos de patrones desarrollados.
Hillside.net Una comunidad dedicada a la difusión, estudio, utilización de Patrones. Organizadores de las conferencias anuales de PLOP.
Brad Appleton Las referencias y estudios dedicados por Brad Appleton a Patterns, él mismo un activo desarrollador de patrones.
Especialmente esta página en el servidor de crossroads
James Coplien Los patrones subyacentes en procesos exitosos de generación de software
Extendiendo la Orientación a Objetos con Patrones de diseño
Software Patterns, un artículo pionero
Martín Fowler Artículos en su sitio: Analysis Patterns
Developing Patterns of Enterprise Software
Patrones de diseño para Integración de Aplicaciones de Empresa (EAI)
Scott Ambler Process Patterns,Building Large-Scale Systems Using Object Technology
Brian Kurotsuchi Un pequeño tutorial sobre la aplicación de Patrones
Mihaly Elekes Discusión de principios, y aplicación de casos en abundancia
Chaos-Choas, Wiki Sitio alemán con abundantes casos desarrollados en Java y Python, y referencias.
Jeniffer Tidwell Patrones dedicados a presentación e Interfaz de Usuario
Open Process Framework Más de 1100 componentes reusables, descriptos. Orientado a la elaboración de componentes, pueden incluírse aquí también como repositorio de ideas destinadas a resolver problemas específicos.
Oberlin College En el contexto de clases de la institución, existe un detallado repositorio de patrones adaptados de los expuestos en "Design Patterns", de Gamma, Visslides, Helm y Johnson, junto con recursos asociados para su construcción.
Data and Object Factory Empresa dedicada a la capacitación, ofrece un conjunto de patrones explicados sobre la base de los de GOF

Autores, sitios o artículos en español
Luis Guerrero Curso de OOD y Patrones dictado en la Universidad de Chile
Felix Prieto Arambillet Curso de Patrones en el Departamento de Informática de la Universidad de Valladolid
Miguel Laguna Patrones explicados en el curso de Programación iii, Departamento de Informática, Universidad de Valladolid
Teleprogramadores.com El sitio soportado por David Hernández Tejada (autor?), con un buen desarrollo del tema, con casos expuestos en un buen número, algunos completos, y buenas referencias a otros materiales.