Patrones de Desarrollo
Semestre 9
Patrones de desarrollo
Patrones de desarrollo
Semestre 9
Patrones de desarrollo
Tabla de contenido
Presentacin general de la asignatura Competencias generales Contenido de la asignatura Mapa conceptual de la asignatura Introduccin Conceptos previos Mapa conceptual Fascculo 1 Logros Fundamentos de Patrones Origen e Historia de los patrones Patrones Que es un Patrn Algunas definiciones de patrn Patrones para el desarrollo de software Caractersticas de un buen patrn Tipos de patrones Patrones arquitectnicos Patrones de Diseo Patrones de Creacin Patrones Estructurales Patrones de Comportamiento Cmo usar un Patrn de Diseo Elementos de un patrn de diseo Descripcin de patrones de diseo Actividad de trabajo colaborativo Resumen Bibliografa recomendada Nexo Seguimiento al autoaprendizaje
Pgina 1 1 3 7 7 8 9 9 9 10 11 13 13 14 14 15 15 15 16 17 18 18 19 20 22 22 23 23 25
Semestre 9
Patrones de desarrollo
Copyright2008 FUNDICIN UNIVERSITARIA SAN MARTN Facultad de Universidad Abierta y a Distancia, Educacin a Travs de Escenarios Mltiples Bogot, D.C. Prohibida la reproduccin total o parcial sin autorizacin por escrito del Presidente de la Fundacin. La redaccin de este fascculo estuvo a cargo de MIGUEL HERNNDEZ BEJARANO Docente tutor Programa de Ingeniera de Sistemas a Distancia. Sede Bogot, D.C. Revis y aprob Ingeniero MACK UESSELER Correccin de estilo MARLON CARRERO RAMREZ Diseo grfico y diagramacin a cargo de SANTIAGO BECERRA SENZ ORLANDO DAZ CRDENAS Impreso en: GRFICAS SAN MARTN Calle 61A No. 14-18 - Tels.: 2350298 - 2359825 Bogot, D.C., Junio de 2012
Patrones de desarrollo
Semestre 9
Competencias generales
Mediante el estudio y seguimiento al contenido de los fascculos de esta asignatura, los estudiantes deben alcanzar el desarrollo de las siguientes habilidades, actitudes y aptitudes. Cognitivas: Definir qu tipo de patrn se ajusta al desarrollo de un aplicativo de software. Identificar los tipos de patrones. Comprender los elementos de un patrn. Implementar patrones de diseo de software en la construccin de aplicaciones.
RPatrones de desarrollo
Patrones de desarrollo
Contextual: Habilidad para definir la estructura visual del diagrama de clases correspondiente a un patrn de diseo Destreza en la creacin de clases de Java y su compilacin empleando herramientas informticas de compilacin y depuracin, como IDES de programacin ms especializados. Tener el conocimiento de los fundamentos, los tipos, los elementos de los patrones de diseo de software. Desarrollar la capacidad argumentativa para explicar y justificar la utilizacin de determinados patrones de diseo en una aplicacin de software. Valorativas Reconocer la importancia de la aplicacin de patrones en la construccin de proyectos de software. Evaluar el tipo de patrn a implementar segn requerimientos de la aplicacin de software. Comunicativas Aplicar patrones en la construccin programas de software. Escribir aplicaciones que implementen patrones. Elaborar diseo de clases que apliquen patrones utilizando herramientas UML. Utilizar los medios tecnolgicos para interactuar con los dems y aprender a trabajar en equipo.
Patrones de desarrollo
Patrones de desarrollo
Patrones de desarrollo
o Caractersticas generales o Ejemplo Patrn Decorator o Caractersticas generales o Ejemplo Fascculo 4 Patrn Observer o o Caractersticas generales Ejemplo Caractersticas generales Ejemplo
Patrn Iterator o o
Otros Patrones
Fascculo 5 Aplicacin Patrones de Creacin o Programa que implementa el patrn Factory Method Diagramas de clases Codificacin aplicacin Enunciado Diagramas de clases Codificacin aplicacin
Aplicacin Patrones Estructurales o Programa que aplica el patrn Proxy Enunciado Diagramas de clases Codificacin aplicacin
Patrones de desarrollo
Patrones de desarrollo
Enunciado Diagramas de clases Codificacin aplicacin
Fascculo 6 Aplicacin Patrones de Creacin o Programa utilizando el patrn Abstract Factory Diagrama de clases Codificacin aplicacin Aplicacin Patrones Estructurales o Programa utilizando el patrn Composite. Diagrama de clases Codificacin aplicacin Aplicacin Patrones Comportamiento o Programa aplicando patrn Mediator. Diagrama de clases Codificacin aplicacin o Programa estados utilizando el patrn State. Diagrama de clases Codificacin aplicacin Fascculo 7 ARQUITECTURA Modelo/Vista/Controlador o El Modelo o La Vista o El controlador o Ventajas o Desventajas o Enunciado Aplicacin
Patrones de desarrollo
Patrones de desarrollo
Fascculo 8 Modelo Vista Controlador en Java Swing o Arquitectura de Java Swing o Modelos y componentes o Codificacin aplicacin o Enunciado programa o Diagrama de clases o Codificacin aplicacin
Patrones de desarrollo
Introduccin
El desarrollo de software es una tarea compleja, que depende en gran medida de la experiencia de los ingenieros de sistemas involucrados. En los ltimos aos, las tecnologas orientadas a objetos son las ms utilizadas para la construccin de aplicaciones de software. Se ha comprobado cmo este paradigma de programacin presenta una serie de ventajas dentro de las que estn: Reduccin de tiempos. Disminucin del esfuerzo de mantenimiento. Eficiencia.
Patrones de desarrollo
Patrones de desarrollo
Consistencia. Fiabilidad. Proteccin de la inversin en desarrollos.
Los patrones de diseo son conocidos ms comnmente como "Design Patterns". Se trata de soluciones simples y afinadas a problemas especficos y comunes del diseo orientado a objetos. Los patrones, como elemento de la reutilizacin de cdigo, comenzaron a utilizarse en la construccin de aplicaciones de software como una solucin estndar a un problema comn de programacin con una tcnica para flexibilizar el cdigo hacindolo satisfacer ciertos criterios. En ese sentido se han construido una serie de fascculos que tienen como objetivo familiarizar al estudiante del Programa de Ingeniera de Sistemas con el uso de patrones para el diseo y construccin de aplicaciones de software, obteniendo un mayor grado de fiabilidad y flexibilidad en los diseos, al reutilizar estructuras ya probadas en otros contextos de una forma ms sencilla de comprender y mantener al estar documentados sobre la base de un conjunto de patrones ampliamente conocidos y difundidos. En otras palabras, rehusar soluciones que funcionaron bien una vez.
Conceptos previos
Es fundamental que para el desarrollo y seguimiento del contenido del fascculo, y del curso de patrones, el estudiante realice una revisin a los conceptos de los siguientes temas: Programacin Orientada a Objetos o Abstraccin o Encapsulamientos o Herencia o modularidad
Patrones de desarrollo
Patrones de desarrollo
Programacin en Java Fundamentos UML o Diagramas UML de Clases y Objetos
L o gro s
Al finalizar el estudio del presente fascculo el estudiante estar en capacidad de: Comprender qu es un patrn de diseo de software. Reconocer los tipos de patrones Conocer la evolucin histrica de los patrones de diseo de software Categorizar los tipos de patrones y sus caractersticas
Fundamentos de patrones
El concepto de patrn como elemento reutilizable de experiencia y conocimiento en el rea del desarrollo de aplicaciones de software, ha teniendo un espacio ms activo en la comunidad de orientacin a objetos, este
Fascculo No. 1 Semestre 9
Patrones de desarrollo
Patrones de desarrollo
hecho se deriva el trmino patrn de software y ms concretamente el de patrn de diseo para hacer referencia al uso de patrones en el Diseo Orientado a Objeto (DOO). Antes de empezar a trabajar con los patrones se inicia con una revisin del origen, evolucin y los fundamentos de patrones de diseo.
Patrones de desarrollo
10
Patrones de desarrollo
En 1991, Jim Coplien comenz a realizar un catlogo de idioms (que son un tipo de patrones) en C++ y publica su libro Advanced C++ Programming Styles and Idioms. Desde 1990 a 1994, Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides (el grupo de los cuatro) realizaron un primer catlogo de patrones de diseo. En Abril de 1994 el libro Design Patterns: Elements of Reusable Object- Oriented Software (Gang of Four, [GoF]) es publicado. En 1997 Brad Appleton publica Patterns and Software: Essential Concepts and Terminology. Mark Grand publica en 1998 Patterns in Java (volumen 1) que es un catlogo de patrones de diseo ilustrados con UML. En 1999 el mismo autor publica Patterns in Java (volumen 2) en donde se aaden alg unos patrones de diseo ms y otros tipos de patrones tales como patrones de organizacin de cdigo, patrones de optimizacin de cdigo, entre otros.
Patrones
En las diferentes actividades que realiza el hombre se pueden encontrar una serie de caractersticas comunes que se repiten como por ejemplo elaboracin de las prendas de vestir, anexar y recorrer una lista; recorrer un arreglo, entre otros. Ejemplos: 1. Patrn de un pantaln, el modelo puede ser de papel, cartn o tela segn el cual se corta un material determinado, donde el sastre o modista realiza primero el patrn y luego corta la tela.
11
Patrones de desarrollo
Patrones de desarrollo
2. Patrones de las listas, para recorrerla y anexar un nodo al final de esta. Recorre la lista para buscar un dato
Suponga que se tiene una lista con dos nodos anexar nodo 2
Patrones de desarrollo
12
Patrones de desarrollo
3. Patron de programacin para recorrer los vectores for ( int i = 0 ; i < arreglo.length ; i++) { sentencias } 4. El patrn de diapositivas de una presentacin es un almacenamiento de los estilos de una presentacin como el tipo, el tamao de las vietas y fuentes; el diseo de fondo y las combinaciones de colores de relleno, entre otros, correspondiente a la informacin de la plantilla.
Qu es un patrn?
Segn el diccionario de la Real Academia Espaola un patrn es: Dechado que sirve de muestra para sacar otra cosa igual, estando esta definicin muy cercana a la idea que se persigue con los patrones software, donde los patrones en lugar de servir como muestra fsica, sirven para almacenar y documentar soluciones recurrentes de problemas. En programacin orientada a objetos los patrones encierren buenas prcticas de diseo y estas se basan en los principios del desarrollo de software de un determinado tipo de problema. Los patrones son un aspecto importante de la estrategia de reutilizacin de software dentro de una organizacin. Los patrones no son una librera, son un esqueleto bsico que cada desarrollador luego adapta a sus necesidades y requerimientos propios de cada aplicacin.
13
Patrones de desarrollo
Patrones de desarrollo
pleton (Software Configuration Management Patterns, Editorial: Addison-wesley, 2003) Cada patrn es una regla de tres partes, la cual expresa una relacin entre un cierto contexto, un problema y una solucin. El patrn esta resumiendo al mismo tiempo una cosa que tiene su lugar en el mundo, y la regla que dice cmo crear esa cosa y cundo se debe crear. Chri stopher Alexander, The Timeless Way of Building, 1.979
Patrones de desarrollo
14
Patrones arquitectnicos
Expresan una organizacin estructural fundamental para un sistema software. Conformados por un conjunto de subsistemas predefinidos, especificando sus responsabilidades, respectivas e incluyen las reglas y criterios para organizar las relaciones existentes entre ellos. Se recogen aqu ocho patrones estructurales, agrupados en cuatro categoras:
Del caos a la organizacin Niveles Tuberas y filtros Pizarra Intermediario o broker MVC: Modelo-Vista-Controlador PAC: Presentacin, Abstraccin, Control Microkernel Reflexin
Patrones de diseo
Ofrecen esquemas para refinar subsistemas y componentes de un sistema software, o las relaciones entre ellos. Son normalmente una estructura de comunicacin recurrente entre componentes que sirve para resolver un problema general de diseo dentro de un contexto particular. Idioms: Un idiom es patrn de bajo nivel, especfico de un determinado lenguaje de programacin. Describen cmo implementar aspectos particulares de los componentes, o de las relaciones entre ellos, utilizando las
Fascculo No. 1 Semestre 9
15
Patrones de desarrollo
Patrones de desarrollo
caractersticas de un determinado lenguaje. Como ejemplo de un idiom se tiene aplicacin en en C++ para copiar cadenas de caracteres: while (*destino++ = *src++); Centrando de nuevo la atencin en los patrones de diseo, en el libro de GoF se distinguen tres tipos de patrones de diseo: patrones de creacin, patrones estructurales y patrones de comportamiento. Adems, en cada una de las categoras se presentan dos subtipos de patrones los que trabajan con clases y patrones que trabajan con objetos.
Patrones de creacin
Los patrones de creacin abstraen el proceso de instanciacin de los objetos y se caracterizan por que Resuelven problemas relativos a la creacin de objetos Abstraen el proceso de creacin de objetos. Permiten crear sistemas independientes de cmo los objetos son creados, compuestos y representados. Permiten el reconocimientos en el sistema de las clases abstractas
Los ingenieros de sistemas dedicados al desarrollo de software no resuelven los problemas desde sus principios; reutilizan soluciones que les han funcionado en aplicaciones de software anteriores, haciendo uso de los patrones de clases y objetos de comunicacin. Estos patrones resuelven problemas de diseo especficos y hacen el diseo flexible y reusable.
Patrones de desarrollo
16
Patrones de desarrollo
Los Patrones de Creacin pueden ser:
mbito Clase Mtodo de Fabricacin Objeto Fbrica Constructor Prototipo Singleton Creacin
Patrones estructurales
En este tipo de patrn las clases y objetos se combinan para formar estructuras ms complejas caracterizado por: Patrones basados en herencia. o Slo una forma de Adapter. Patrones basados en composicin. o Describen formas de combinar objetos para obtener nueva funcionalidad. o Brindan la posibilidad de cambiar la composicin en tiempo de ejecucin.
mbito Clase Estructurales Adaptador (clases) Adaptador (objetos) Puente Composicin Decorador Fachada Flyweight Apoderado
Tabla 3 Patrones estructurales
Objeto
17
Patrones de desarrollo
Objeto
Las anteriores tablas presenta la clasificacin segn su propsito en los patrones de diseo. Patrones de creacin: Estn relacionados con la creacin de instancias. Patrones estructurales: tratan la relacin entre clases, la combinacin de clases y la formacin de estructuras de mayor complejidad. Patrones de comportamiento: Se refieren a la interaccin y cooperacin entre clases.
18
Patrones de desarrollo
Definir las clases. Definir los nombres de las operaciones. Implementar las operaciones para asegurar las responsabilidades y colaboraciones del patrn.
19
Patrones de desarrollo
20
Patrones de desarrollo
Colaboraciones entre participantes: Indica cmo interactan los diferentes participantes (clases y objetos) que intervienen en su estructura. Consecuencias: Describe las ventajas e inconvenientes de la aplicacin del patrn. Adems se indica cmo soporta los objetivos y qu aspectos del sistema pueden variar. Implementacin: Tcnicas y peligros que conlleva la implementacin del patrn. Cdigo de ejemplo: Solucin limitada que puede servir de base para implementaciones que usen el patrn. Usos conocidos (campo opcional): Ejemplos de uso del patrn en sistemas reales. Patrones relacionados (campo opcional): Listado de patrones relacionados incidiendo en las diferencias de uso y en el posible uso conjunto de estos, es decir con qu patrones debera usarse. Ventajas de utilizar patrones Los patrones favorecen la reutilizacin de diseos y arquitecturas a gran escala. Capturan el conocimiento de los expertos y lo hacen accesible a toda la comunidad software. Proporcionan un cmulo de conocimiento utilizable por toda la comunidad software. Favorecen la transmisin de conocimiento entre profesionales y entre clientes y desarrolladores Proporcionan un lenguaje comn. Los nombres de los patrones forman parte del vocabulario tcnico del ingeniero software.
21
Patrones de desarrollo
Patrones de desarrollo
Los patrones de diseo son un tema importante en el desarrollo de software ya que permiten retomar: La experiencia de aplicaciones de software construidas anteriormente, el poder buscar ayuda en las comunidades de desarrolladores de software para resolver problemas comunes.
1. En grupos de dos estudiantes establecer las diferencias entre a. Patrones y algoritmos. b. Patrones y frameworks. c. Donde usar los patrones. 2. Consultar y elaborar un resumen sobre los antipatrones
En este fascculo se present una introduccin al mundo de los patrones de diseo de software, partiendo desde la perspectiva inicial de este concepto, compuesto por soluciones simples y crudas a problemas especficos y comunes del diseo orientado a objetos. Los patrones son una forma literaria para resolver problemas de ingeniera del software, que tiene sus races en los patrones de la arquitectura. Las metodologas orientadas a objetos tienen como uno de sus principios no reinventar la rueda para la resolucin de diferentes problemas. Por lo tanto los patrones se convierten en un escenario de importancia de las Tecnologas Orientadas a Objetos en el principio de la reutilizacin. Existen diferentes mbitos dentro de la ingeniera del software donde se pueden aplicar los patrones dentro de los que se pueden mencionar:
Patrones de desarrollo
22
Patrones de desarrollo
Patrones de creacin (creational patterns) Ayudan a que el sistema sea independiente de la forma en que los objetos son creados, representados o inicializados. (Creacin de Instancias) Patrones de Estructura (structural patterns) Se enfocan a la forma en que las clases y objetos se acomodan para formar estructuras mayores. Este patrn es importante para lograr que libreras de clases desarrolladas independientemente, trabajen juntas. Patrones de Comportamiento (behavioral patterns) Se enfocan los algoritmos y la asignacin de responsabilidades entre objetos.
Booch, Grady. Object-Oriented Analysis and Design. Second Edition. Benjamin/Cummings, Redwood: 1994. Jacobson, Ivar, Grady Booch, and James Rumbaugh. El Proceso Unificado de Desarrollo de Software. Mxico: Addison-Wesley, 1999. Kruchten, Philippe. "Architectural Blueprints--The 4+1 View Model of Software Architecture". IEEE Software, Institute of Electrical and Electronics Engineers. November 1995, pp. 42-50. Larman, Craig. UML y Patrones, Introduccin al anlisis y diseo orientado a objetos. Mxico: Prentice Hall, 1999. Muller, Pierre-Alain. Modlisation Object avec UML. Paris: Eyrolles, 1997. Wilson, Scott F. Analyzing Requirements and Defining Solution Architectures. Redmond: Microsoft Press, 1999.
En el fascculo dos se abordar el tema de los patrones de creacin los cuales permiten generar Independencia al sistema del modo en que se crean, componen y representan los objetos.
23
Patrones de desarrollo
Patrones de desarrollo
Patrones de desarrollo
24
Patrones de desarrollo
2. Corresponde a los patrones que hacen al sistema independiente de las creaciones de objetos: a. b. c. d. Patrones de comportamiento. Patrones de creacin. Patrones estructurales. Patrones de idioma.
3. Patrones que se centran en algoritmos y asignacin de responsabilidades entre objetos: a. b. c. d. Patrones de comportamiento. Patrones de creacin. Patrones estructurales. Patrones de idioma.
4. No slo determinan patrones de clases y objetos, sino tambin patrones de comunicacin entre los mismos: a. b. c. d. Patrones de comportamiento. Patrones de creacin. Patrones estructurales. Patrones de idioma.
25
Patrones de desarrollo
Patrones de desarrollo
5. Los elementos de un patrn de diseo son: a. b. c. d. nombre, problema, solucin, consecuencias. nombre, problema, cdigo fuente, patrones relacionados. nombre, clasificacin, propsito, motivacin. estructura, participantes, colaboracin, consecuencias.
Patrones de desarrollo
26