Patrones de Diseño Marco Teórico Introductorio Diego Andrés Asenjo González Alejandro Ríos Peña Contenido ¿Qué son los patrones de Diseño?..........................1 Clasificación de los patrones de diseño...................3 Patrones de Creación.. ...................................4 Patrones Estructurales....................................4 Patrones de Comportamiento................................5 ¿Qué son los patrones de Diseño? Los patrones de diseño son herramientas que proveen facilidades para hacer software reutilizable y de buena calidad. Cada patrón describe un problema que ocurre repetidamente en nuestro entorno, y describe el núcleo de la solución a ese problema, de tal forma que ésta pueda ser usada un millón de veces, sin hacer el mismo trabajo dos veces [ 1 ]. Esto sucede porque los diseñadores expertos en orientación a objetos (y también otros diseñadores de software ) van formando un amplio repertorio de principios generales y de expresiones que los guían al crear el software. A unos y a otros podemos darles el nombre de patrones si se codifican en un formato estructurado que describe el problema y su solución, y si se les asigna un nombre [ 2 ]. Otra definición, bastante simple, dice que un patrón es una pareja de problema / solución con un nombre y que es aplicable a otros contextos, con una sugerencia sobre la manera de usarlo en situaciones nuevas [ 2 ]. Específicamente los elementos de un patrón de diseño son [ 3 ] : o El nombre del patrón que se utiliza para describir el problema y la solución en una o dos palabras. Un buen nombre permite diseñar con un mayor grado de abstracción y mejora también los procesos de comunicación entre los diseñadores de software orientado a objetos. o El problema especifica cuando debe ser aplicado un patrón. Explica el problema y su contexto. Puede representar problemas específicos diseño tales como cómo representar algoritmos por medio de objetos. Puede describir estructuras de clases u objetos que repetidamente son causantes de diseños inflexibles. Algunas veces el problema puede incluir una lista de condiciones que deben cumplirse para que sea lógico aplicar el patrón. o La solución describe los elementos que hacen el diseño, sus relaciones, responsabilidades y colaboraciones, la solución no describe un diseño o una implementación particular, ya que un patrón es como un molde que puede ser aplicado en muchas situaciones diferentes. En vez de esto, los patrones proveen una descripción abstracta de un problema y de cómo un arreglo especial de elementos lo resuelven. o Las consecuencias son los resultados de aplicar el patrón. Aunque la consecuencias no son comúnmente comentadas o conocidas durante las decisiones de diseño, son críticas para evaluar las alternativas y para entender los costos y beneficios de aplicar el patrón. Después de haber definido lo que son los patrones de diseño podemos nombrar ciertas características básicas de ellos [ 4 ]: o Son soluciones concretas. Proponen soluciones a problemas concretos, no son teorías genéricas. o Son soluciones técnicas. Indican resoluciones técnicas basadas en Programación Orientada a Objetos (POO). En ocasiones tienen más utilidad con algunos lenguajes de programación y en otras son aplicables a cualquier lenguaje. o Se utilizan en situaciones frecuentes. Ya que se basan en la experiencia acumulada la resolver problemas reiterativos. o Favorecen la reutilización de código. Ayudan a construir software basado en la reutilización, a construir clases reutilizables. Los propios patrones se reutilizan cada vez que se vuelven a aplicar. o El uso de un patrón no se refleja en el código. Al aplicar un patrón, el código resultante no tiene por que delatar el patrón o patrones que lo inspiró. No obstante últimamente hay múltiples esfuerzos enfocados a la construcción de herramientas de desarrollo basados en los patrones y frecuentemente se incluye en los nombres de las clases el nombre del patrón en que se basan facilitando así la comunicación entre desarrolladores. o Es difícil reutilizar la implementación de un patrón. Al aplicar un patrón aparecen clases concretas que solucionan un problema concreto y que no será aplicable a otros problemas que requieran el mismo patrón. Clasificación de los patrones de diseño Los patrones de diseño se clasifican según su propósito en [ 4 ]: o Patrones de Creación: Tratan la creación de instancias. o Patrones Estructurales: Tratan la relación entre clases, la combinación clases y la formación de estructuras de mayor complejidad. o Patrones de Comportamiento: Tratan la interacción y cooperación entre clases Los patrones de diseño se pueden clasificar según su ámbito [4]: o De clase: Basados en la herencia de clases. o De objeto: Basados en la utilización dinámica de objetos. Además de esta clasificación de los patrones, podemos decir que existen patrones diferentes a los patrones de diseño tales como: o Patrones de Arquitectura. Formas de descomponer, conectar y relacionar sistemas, trata conceptos como: niveles, tuberías y filtros. Es un nivel de abstracción mayor que el de los Patrones de Diseño. o Patrones de Programación (Idioms). Patrones de bajo nivel acerca de un lenguaje de programación concreto, describen como implementar cuestiones concretas. Están en un nivel de abstracción menor que los patrones de diseño. o Patrones de Análisis. Conjunto de reglas que permiten modelar un sistema de forma satisfactoria. o Patrones de Organizacionales. Describen como organizar grupos humanos, generalmente relacionados con el software. o Otros Patrones de Software. Se puede hablar de patrones de Programación concurrente, de Interfaz Gráfica, de Organización de Código, de Optimización de Código, de Robustez de Código, de Fase de Prueba o Patrones de Asignación de Responsabilidades: describen los principios fundamentales de la asignación de responsabilidades a objetos, expresados en forma de patrones de diseño. o Antipatrones: tratan de, en vez de identificar soluciones, identificar problemas o trampas comunes que se presentan en muchos diseños con el objetivo de que el mismo error no sea cometido dos veces. Patrones de Creación [4] Los patrones de creación abstraen la forma en que se crean los objetos, de forma que permite tratar las clases a crear de forma genérica apartando la decisión de qué clases crear o como crearlas. Según a donde quede desplazada dicha decisión se habla de Patrones de Clase (utiliza la herencia para determinar la creación de las instancias, es decir en los constructores de las clases) o Patrones de Objeto (es en métodos de los objetos creados donde se modifica la clase). Los patrones de Creación proveen diferentes maneras para remover las referencias explicitas a clases concretas del código donde deben ser utilizadas. Patrones de Creación de Clase: o Factoría Abstracta o Constructor Patrones de Creación de Objeto: o Método Factoría o Prototipo o Singleton o Conjunto de Objetos Patrones Estructurales [ 3 ] Los patrones estructurales tienen que ver con la forma en que las clases y los objetos son agrupados para formar grandes estructuras. Los patrones estructurales de clase usan la herencia para formar interfaces o implementaciones. Los patrones estructurales de objeto describen formas de agrupar objetos para dar o crear nuevas funcionalidades. Patrones Estructurales de Clase: o Herencia Múltiple o Adaptador de Clases Patrones Estructurales de Objeto: o o o o o o Adaptador de Clase Puente Compuesto Decorador Fachada Flyweigth o Proxy Patrones de Comportamiento [ 3 ] Los patrones de comportamiento están relacionados con los algoritmos y con la asignación de responsabilidades entre los objetos. Los patrones de comportamiento no describen sólo patrones de clases y de objetos, sino que describen los patrones de cómo éstos se comunican. Éstos patrones caracterizan complicados flujos de control que son difíciles de seguir o imaginar en tiempo de ejecución. Los principales patrones de comportamiento son: o o o o o o o o o o o o Experto Comando Interprete Iterador Mediador Memento Observador Estado Estrategia Plantilla Visitante Vista / Controlador Referencias [ 1 ] Christopher Alexander. [ 2 ] “UML y Patrones” Craig Larman [ 3 ] “Design Patterns Elements of Reusable Object-Oriented Software” [ 4 ] www.teleprogramadores.com Guía de Patrones.