Vous êtes sur la page 1sur 48

Introduccin a patrones de software

Jamir Antonio Avila Mojica jamir.avila@javeriana.edu.co Patrones de Software

Agenda
Historia Definicin Categoras de patrones Patrones arquitectnicos Patrones de diseo Idiomas Elementos de un patrn Alexander GoF Tipos de patrones

Historia
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.

Historia
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.

Historia

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 suelen describir usando la misma estructura: descripcin del problema, resumen de circunstancias que crean el problema y una solucin que funciona en tales circunstancias. Los patrones se interconectan e influyen entre si. Un patrn escrito incluye estas conexiones como prlogo y eplogo.

Historia

Ward y Kent identifican cinco patrones relacionados con el diseo de interfaces de usuario en Smalltalk: 1. Window Per Task. 2. Few Panes Per Window. 3. Standard Panes. 4. Short Menus. 5. Nouns and verbs

Historia
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.

Historia
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.

Historia

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.

Historia
En 1991, Bruce Anderson organiza el primer Hacia un manual de arquitectura en OOPSLA al que asisten practicamente 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.

Historia
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.

Historia
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. ...

Agenda
Historia Definicin Categoras de patrones Patrones arquitectnicos Patrones de diseo Idiomas Elementos de un patrn Alexander GoF Tipos de patrones

Definicin - antecedentes
Los expertos, de muchas disciplinas, suelen reutilizar la esencia de una solucin en lugar de inventar una nueva.

Definicin - antecedentes
Lugar en la ventana.
A todos nos gustan aquellos lugares en las ventanas. Grandes ventanas con umbrales bajos y sillas confortables nos atraen. Un espacio que no cuente con un lugar as raras veces permite que alguien se sienta cmodo. Si un espacio no tiene ninguna ventana, una persona all estar entre dos fuerzas: estar cmodamente sentada y cerca a la luz. Obviamente, si los lugares cmodos (aquellos en la sala dnde ms le gustara sentarse) estn lejos de las ventanas, no hay forma de resolver el conflicto. Entonces: en todos los cuartos donde se pase gran parte del da, debe haber al menos un lugar en la ventana.

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

Definicin
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

Definicin, por qu 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. 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.

Definicin, por qu usar patrones?


Proporcionan un vocabulario comn y de conocimiento en principios de diseo. 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.

Agenda
Historia Definicin Categoras de patrones Patrones arquitectnicos Patrones de diseo Idiomas Elementos de un patrn Alexander GoF Tipos de patrones

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

Categoras de patrones / 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.

Categoras de patrones / 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.

Categoras de patrones / 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.

Agenda
Historia Definicin Categoras de patrones Patrones arquitectnicos Patrones de diseo Idiomas Elementos de un patrn Alexander GoF Tipos de patrones

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.

Elementos de un patrn / 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 de un patrn / GoF


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 de un 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 de un 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 como puede ser usado el patrn en un lenguaje de programacin.

Elementos de un 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 de un 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.

Agenda
Historia Definicin Categoras de patrones Patrones arquitectnicos Patrones de diseo Idiomas Elementos de un patrn Alexander GoF Tipos de patrones

Tipos de patrones

Tambin hay varias aproximaciones a la clasificacin de los patrones: GoF Propsito Creational Structural Behavioural Alcance Clase Objeto

Tipos de patrones / GoF


Alcance Clase Objeto Propsito Creational Structural Factory Method Adapter (class) Abstract Factory Builder Prototype Singleton Behavioural Interpreter Template Method Command. Iterator Mediator Memento Observer State Strategy Visitor Chain Of Resp.

Adapter (object) Bridge Composite Decorator Facade Flyweight Proxy

Clasificacin de los patrones GoF

Tipos de patrones / PoSa

Buschman et al, clasifica los patrones por tres criterios: Funcionalidad

Creacin Comunicacin Acceso Organizacin de los cmputos de tareas complejas.

Tipos de patrones / PoSa (cont)

Principios estructurales

Abstraccin Encapsulamiento Separacin de intereses Acoplamiento y cohesin

Granularidad

Catlogos PoSa
Catlogos de Arquitectura de Software Orientada a Patrones:
Pattern-Oriented Software Architecture: A System of Patterns. Publicado en 1996, persenta la progresin y la evolucin de la aproximacin de patrones en un sistema de patrones capaz de describir y documentar aplicacin de gran escala. Pattern-Oriented Software Architecture: Patterns for Concurrent and Networked Objects, Volume 2. Publicado en el 2000. Son 17 patrones que constituyen las bases asociadas con la concurrencia y el trabajo en red.

Catlogos PoSa (cont)


Pattern-Oriented Software Architecture: Patterns for Resource Management. Publicado en 2003. Presenta tcnicas para implementar una efectiva administracin de recursos en un sistema. Pattern-Oriented Software Architecture: A Pattern Language for Distributed Computing, Volume 4. Publicado en 2007. Describe un lenguaje de patrones para la computacin distribuida que gua al lector en las mejores prcticas e introduce las reas claves de la construccin de sistemas distribuidos de software.

Catlogos PoSa (cont)


Pattern-Oriented Software Architecture: On Patterns and Pattern Languages, Volume 5. Tambin publicado en 2007, ofrece una mirada en profundidad de que son los patrones, que no son y cmo usarlos exitosamente.

Bibliografa
Core J2EE Patterns: Best Practices and Design Strategies, 2nd. ed., Alur Deepak, Crupi John, Malks Dan, Prentice Hall, 2003 Design Patterns: Elements of Reusable ObjectOriented Software, Gamma Erich, Helm Richard, Johnson Ralph, Vlissides John, Addison Wesley, 1995 Enterprise Solution Patters Using Microsoft .Net, versin 2.0, Thowbridge David et all, 2003 Object-oriented patterns, Coad Peter, Association for Computing Machinery Inc. 1992.

Bibliografa
Pattern Oriented Software Architecture: A System of Patterns, Volume One, Buschmann Frank, Meunier Regine, Rohnert Hans, Sommerlad Peter, Stal Michael, Wiley, 1996 Software Design Patterns: Common Questions and Answers. Coplien James O., Software Production Research Department, AT&T Bell Laboratories Software Patterns, Coplien James O., The Hillside Group, http://pclc.pace.edu/~bergin/dcs/SoftwarePatterns_Coplien. pdf

Vous aimerez peut-être aussi