Fuente: Jamir Antonio Avila Mojica Pontificia U.JAVERIANA - Bogot Introduccin Disear software orientado a objetos es difcil, y disear software orientado a objetos reutilizable es todava ms difcil Chapter 1: Introduction. Design Patterns, The Gang of Four ...y un software capaz de evolucionar tiene que ser reutilizable (al menos para las versiones futuras) Introduccin Christopher Alexander, naci el cuatro de octubre de 1936 en Vienna. Estudi arquitectura en la Universidad de Harvard y escribi varios libros sobre patrones en arquitectura. Alexander considera que los usuarios saben ms sobre los edificios que necesitan que lo que podra llegar a saber un arquitecto. Adems produjo y valid, junto con otros, un lenguaje de patrones diseado para empoderar a cualquiera en el diseo y construccin a cualquier escala. Hoy en da es profesor emrito de la Universidad de California, Berkeley Introduccion Ward Cunningham y Kent Beck creen que las ideas de Alexander son tambin vlidas en el campo de la ingeniera de software: los usuarios de computadores deben escribir sus propios programas. Este trabajo fue enviado a la conferencia anual de la ACM de Object Oriented Programming, Systems, Languajes & Applications La idea de Alexander se articula en torno de un concepto llamado lenguaje patrn. Introduccin. Un lenguaje patrn gua a un diseador al proporcionar soluciones viables a los problemas conocidos que surgen durante el diseo Este conocimiento se codifica en patrones que se describen usando la misma estructura: descripcin del problema. resumen de circunstancias que crean el Problema. solucin que funciona en tales circunstancias Los patrones se interconectan e influyen entre si. Un patrn escrito incluye estas conexiones como prlogo y eplogo Introduccin Ward y Kent identifican cinco patrones relacionados con el diseo de interfaces de usuario en Smalltalk: Window Per Task. Few Panes Per Window. Standard Panes. Short Menus. Nouns and verbs. Introduccin Usando los patrones de Ward y Kent un grupo de usuarios es capaz de disear sus propias interfaces grficas de usuario. Nuestro xito inicial usando un lenguaje patrn para disear la interfaz grfica de usuario nos ha dejado entusiasmados con las posibilidades para que los usuarios de computadores diseen y programen sus propias aplicaciones, sealaban Ward y Kent Introduccin James Coplien haba catalogado patrones especficos para el lenguaje C++ a los que denomin idiomas. Los manuscritos de su libro (1989) fueron usados para ensear objetos y C++ en AT&T, Addison-Wesley publicara el libro en septiembre de 1991. Peter Coad, quien tambin haba estado explorando los patrones, anotaba: OOA y OOD tienen como bloques de construccin las clases y los objetos. Estas clases y objetos forman patrones con relaciones especficas entre ellos. Grupos de clases en un entorno orientado a objetos son tiles repetidamente. Muchos patrones pueden ser encontrados por prueba y error o por observacin. Introduccin A finales de los ochentas, Erich Gamma estaba reflexionando sobre el diseo orientado a objetos en ET++ como parte de su tesis doctoral. Se haba dado cuenta de que la estructuras de diseo recurrentes o patrones eran importantes, pero la pregunta era como capturarlas y comunicarlas. Introduccin En 1991, Bruce Anderson organiza el primer Hacia un manual de arquitectura en OOPSLA al que asisten prcticamente todos aquellos que daran forma a los patrones de software. En 1992, Ralph Johnson tena un paper en patrones aceptado en el segundo Hacia un manual de arquitectura. Erich Gamma, Richard Helm y John Vlissides tenan el borrador de un catlogo que esperaban tener listo para ECOOP 93 Introduccin Frank Buschmann comienza a hablar sobre el catlogo de patrones que estaba desarrollando en Siemens. Kent Beck vea como su creencia de que los patrones deberan ser el principio gua del manual de arquitectura se consolidaba. En 1993, se forma el Hillside Group como un grupo dedicado a mejorar la calidad del desarrollo de software, con el patrocinio de Kent Beck y Grady Booch Introduccin En 1994 se realiza la primera conferencia de Pattern Languages of Programs (PloP). En 1995 se publica el libro de patrones de diseo de Gang of Four (Gof). En 1996, se publica el libro Pattern Oriented Software Architecture: a System of Patterns, Frank Buschmann et al. Definicin Antecedentes: Los expertos, de muchas disciplinas, suelen reutilizar la esencia de una solucin en lugar de inventar una nueva Lugar en la ventana: A todos nos gusta una habitacin con grandes ventanas, luz ,silla confortable. Si no tuviera ventanas estaramos ante dos fuerza estar cmodos y cerca a la luz. Entonces en todos los lugares donde se pase gran parte del da debera haber ventanas Definicin - antecedentes Cada patrn es una regla de tres partes, que expresa una relacin entre: un cierto contexto, un problema, y una solucin Como un elemento de lenguaje, un patrn es una instruccin, que muestra como una configuracin espacial puede ser usada, una y otra vez, para resolver el sistema de fuerzas dadas, cada vez que el contexto las haga relevantes. Definicin El patrn es, en resumen, al mismo tiempo algo, que pasa en el mundo, y la regla que nos dice como crear ese algo y cuando debemos crearlo. Es ambos un proceso y una cosa; una descripcin de algo que est viva, y una descripcin del proceso que generar ese algo. The Timeless Way of Building, Christopher Alexander Definicin Cada patrn describe un problema que ocurre una y otra vez en nuestro entorno, y luego describe el ncleo de la solucin a ese problema, de tal forma que pueda usarse la solucin muchas veces ms, sin tener que repetir el proceso ms de una vez. Christopher Alexander Definicin Un patrn de arquitectura de software describe un problema particular recurrente de diseo que surge en contextos especficos de diseo, y presenta un esquema genrico de solucin probado. El esquema de solucin se especifica describiendo sus componentes constituyentes, sus responsabilidades y relaciones, y las formas en que colaboran. POSA (Pattern Oriented Software Architecture) Definicion Una idea que ha sido til en un contexto prctico y probablemente lo ser en otros. Martin Fowler, Anaylisis Patters: Reusable Object Models, Addison Wesley Definicin Un patrn describe un problema recurrente que ocurre en un contexto dado y, basado en un conjunto de fuerzas gua, recomienda una solucin. La solucin es usualmente un mecanismo simple, una colaboracin entre dos o ms clases, objetos, servicios, procesos, hilos, componentes, o nodos que trabajan juntos para resolver el problema identificado en el patrn. Enterprise Solution Patters Using Microsoft .Net, versin 2.0, Thowbridge David et all, 2003 Porque Usar Patrones Ayudan en la construccin de software basados en la experiencia colectiva de hbiles ingenieros de software. Capturan experiencias existentes y bien probadas en el desarrollo de software y promueven buenas prcticas de diseo. Cada patrn trata con un problema especfico recurrente en el diseo o la implementacin de un sistema de software Porque usar Patrones Los patrones se pueden usar para construir arquitecturas de software con propiedades especficas. Los patrones identifican y especifican abstracciones que estn por encima de simples clases e instancias, o de componentes. Proporcionan un vocabulario comn y de conocimiento en principios de diseo Porque Usar Patrones Son una forma de documentar la arquitectura de software Soportan la construccin de software con propiedades definidas Ayudan a construir complejos y heterogneas arquitecturas de software. Sin embargo, no especifican una solucin completamente detallada Ayudan a manejar la complejidad del software Categoras de Patrones Los patrones se pueden organizar jerrquicamente (una de las ms usadas tcnica de abstraccin) de muchas formas, una de ellas es la propuesta por POSA: Patrones de arquitectura Patrones de diseo Idiomas Patrones de Arquitectura Un patrn arquitectnico expresa un esquema de organizacin estructural bsico para sistemas de software. Proporciona un conjunto de subsistemas predefinidos, especifica sus responsabilidades, e incluye reglas y guas para la organizacin de las relaciones entre ellos. Los patrones de arquitectura describen como estructurar una aplicacin al ms alto nivel Patrones de Diseo Un patrn de diseo proporciona un esquema para refinar los subsistemas o componentes de un sistema de software, o las relaciones entre ellos. Describe una estructura comnmente recurrente de componentes que se comunican para solucionar un problema de diseo general en un un contexto particular. GoF. Los patrones de diseos proporcionan el siguiente nivel de refinamiento. Idiomas Los idiomas son patrones de bajo nivel que dependen de las tecnologas de implementacin especficas como el lenguaje de programacin. Son tambin los patrones de software ms antiguos publicados aunque en sus primeras etapas no tenan al forma de un patrn. Ejemplo de Patrones Patrones arquitecturales Jerarqua de capas Tuberas y filtros Cliente/Servidor Maestro-Esclavo Control centralizado y distribuido Patrones de diseo Proxies Factoras Adaptadores Composicin Broker Patrones elementales (idioms) Modularidad Interfaces mnimas Encapsulacin Objetos Acciones y Eventos Concurrencia Patrones y Armazones Los patrones de diseo tienen descripciones ms abstractas que los armazones Las descripciones de patrones suelen ser independientes de los detalles de implementacin o del lenguaje de programacin (salvo ejemplos usados en su descripcin) Los armazones estn implementados en un lenguaje de programacin, y pueden ser ejecutados y reutilizados directamente Patrones y Armazones Los patrones de diseo son elementos arquitecturales ms pequeos que los armazones Un armazn incorpora varios patrones Los patrones se pueden usar para documentar armazones Los patrones de diseo estn menos especializados que los armazones Los armazones siempre se aplican a un dominio de aplicacin particular Armazones (Frameworks) Caractersticas Un armazn ofrece un conjunto integrado de funcionalidad especfica de un dominio P.ej.: aplicaciones financieras, servicios de telecomunicacin, sistemas de ventanas, bases de datos, aplicaciones distribuidas, ncleos de SO Los armazones invierten el control en ejecucin entre la aplicacin y el software sobre el que est basada El armazn determina qu mtodos se invocan en respuesta a eventos (se rehsa el cdigo del cuerpo principal y se escribe el cdigo al que llama) Un armazn es una aplicacin medio-acabada Las aplicaciones completas se desarrollan mediante herencia, e instanciando componentes parametrizados del armazn Elementos de un Patrn Al documentar un patrn se describe el contexto en el que el patrn es utilizado, las fuerzas en el contexto que el patrn busca resolver, y la solucin sugerida. Cada autor tiende a utilizar su propia forma para documentar los patrones; sin embargo se reconocen las siguientes: Alexander, GoF, Portland, Coplien, POSA, entre otras. Alexander La forma Alexander se caracteriza por ser muy narrativa, emplea cerca de media docena de pginas para documentar cada patrn. Nombre: el nombre asignado al patrn. Problema: el problema que el patrn soluciona, as se puede saber cuando aplicarlo. Contexto: un patrn soluciona un problema en un contexto dado. Solucin: solucin aportada por el patrn. Elementos del Patron G o F La forma de documentacin empleada por los patrones GoF usa los siguientes elementos: Nombre del patrn y clasificacin: un nombre descriptivo y nico que ayuda a identificar y referenciar el patrn. Intencin: una descripcin de la meta del patrn y la razn para usarlo. Tambin conocido como: otros nombres del patrn. Elementos del Patrn GoF Motivacin (fuerzas): un escenario consistente de un problema y un contexto en el cual el patrn puede ser usado. Aplicabilidad: situaciones en las que el patrn se puede usar; el contexto para el patrn. Estructura: una representacin grfica del patrn. Normalmente mediante diagramas de clase e interaccin. Participantes: una lista de las clases y objetos usados en el patrn y sus roles en el diseo. Elementos del Patrn GoF Colaboracin: una descripcin de cmo las clases y objetos usados en el patrn interactan con cada otra. Consecuencias: una descripcin de los resultados, efectos laterales y confrontaciones causadas por el uso del patrn. Implementacin: una descripcin de una implementacin del patrn. Cdigo de ejemplo: una ilustracin de cmo puede ser usado el patrn en un lenguaje de programacin. Elementos del Patrn GoF Usos conocidos: Ejemplos de usos reales del patrn. Patrones relacionados: otros patrones que tienen alguna relacin con el patrn; discutiendo las diferencias entre ellos. Elementos de un Patrn Portland Varias personas en la primera conferencia de patrones usaron una forma muy similar. Se caracteriza por ser completamente textual y muy corta, menos de una pgina por patrn. En un par de prrafos se describe el problema, seguidos por la palabra entonces enfatizada tipogrficamente, y un par de prrafos que describen la solucin. Se puede ver un ejemplo en http://c2.com/ppr/checks.htm Elementos de un Patrn Coplien Est asociada con el trabajo de James Coplien, algunos la denominan forma cannica. Los elementos son: Problema Contexto Fuerzas Solucin Contexto resultante Racionalidad Ejemplo en http://users.rcn.com/jcoplien/Patterns/PLoP95_teleco m.html Elementos del Patrn PoSa Es similar en estructura y longitud a GoF Resumen Ejemplo Contexto Problema Solucin Estructura Dinmica Implementacin Ejemplo resuelto Variantes Usos conocidos Consecuencias Ver tambin Tipos de Patrones Tambin hay varias aproximaciones a la clasificacin de los patrones: GoF Propsito Creational Structural Behavioural Alcance Clase Objeto Tipo de Patrones GoF
Los Patrones de Diseño Son Unas Técnicas para Resolver Problemas Comunes en El Desarrollo de Software y Otros Ámbitos Referentes Al Diseño de Interacción o Interfaces