Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Semana 1: Patrones de diseño C URSO: L ENGUA JE D E P ROGRAMACI ÓN I V C I C LO: V I S EMESTRE: 2 0 21-2 DOC ENTE: I NG. A NGEL M A RTHANS RUI Z , M G. UNIVERSIDAD NACIONAL DE LA AMAZONÍA PERUANA FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA Introducción Diseñar software orientado a objetos es difícil, y diseñar software orientado a objetos reutilizable es aún más difícil. Hay que encontrar los objetos pertinentes, agruparlos en clases con la granularidad adecuada, definir las interfaces de las clases y las jerarquías de herencia, y establecer relaciones clave entre ellas. El diseño debe ser específico para el problema en cuestión, pero también lo suficientemente general como para abordar futuros problemas y requisitos. También hay que evitar el rediseño, o al menos minimizarlo. Los diseñadores orientados a objetos con experiencia le dirán que un diseño reutilizable y flexible es difícil, si no imposible, de hacer "bien" la primera vez. Antes de terminar un diseño, suelen intentar reutilizarlo varias veces, modificándolo cada vez. Introducción Una cosa que los diseñadores expertos saben que no deben hacer es resolver todos los problemas a partir de los primeros principios. Más bien, reutilizan las soluciones que les han funcionado en el pasado. Cuando encuentran una buena solución, la utilizan una y otra vez. Esa experiencia es parte de lo que les convierte en expertos. En consecuencia, en muchos sistemas orientados a objetos se encuentran patrones recurrentes de clases y objetos comunicantes. Estos patrones resuelven problemas de diseño específicos y hacen que los diseños orientados a objetos sean más flexibles, elegantes y, en última instancia, reutilizables. Ayudan a los diseñadores a reutilizar los diseños que han tenido éxito basando los nuevos diseños en la experiencia previa. Un diseñador que esté familiarizado con estos patrones puede aplicarlos inmediatamente a los problemas de diseño sin tener que redescubrirlos. Introducción Los patrones de diseño facilitan la reutilización de diseños y arquitecturas de éxito. Expresar las técnicas probadas como patrones de diseño las hace más accesibles para desarrolladores de nuevos sistemas. Los patrones de diseño le ayudan a elegir alternativas de diseño que hacen que un sistema sea reutilizable y a evitar alternativas que comprometen la reutilización. Los patrones de diseño pueden incluso mejorar la documentación y el mantenimiento de los sistemas existentes al proporcionar una especificación explícita de las interacciones entre clases y objetos y su intención subyacente. En pocas palabras, los patrones de diseño ayudan a un diseñador a conseguir un diseño "correcto" más rápidamente. Qué es un Patrón de Diseño? Cada patrón describe un problema que se presenta una y otra vez en nuestro entorno, y luego describe el núcleo de la solución a ese problema, de tal manera que se puede utilizar esta solución un millón de veces, sin hacerlo nunca de la misma manera dos veces. Los patrones de diseño son soluciones habituales a problemas comunes en el diseño de software. Cada patrón es como un plano que se puede personalizar para resolver un problema de diseño particular de tu código. Qué es un Patrón de Diseño? Los patrones de diseño son soluciones habituales a problemas que ocurren con frecuencia en el diseño de software. Son como planos prefabricados que se pueden personalizar para resolver un problema de diseño recurrente en tu código. No se puede elegir un patrón y copiarlo en el programa como si se tratara de funciones o bibliotecas ya preparadas. El patrón no es una porción específica de código, sino un concepto general para resolver un problema particular. Puedes seguir los detalles del patrón e implementar una solución que encaje con las realidades de tu propio programa. Qué es un Patrón de Diseño? A menudo los patrones se confunden con algoritmos porque ambos conceptos describen soluciones típicas a problemas conocidos. Mientras que un algoritmo siempre define un grupo claro de acciones para lograr un objetivo, un patrón es una descripción de más alto nivel de una solución. El código del mismo patrón aplicado a dos programas distintos puede ser diferente. Una analogía de un algoritmo sería una receta de cocina: ambos cuentan con pasos claros para alcanzar una meta. Por su parte, un patrón es más similar a un plano, ya que puedes observar cómo son su resultado y sus funciones, pero el orden exacto de la implementación depende de ti. En qué consiste el patrón? La mayoría de los patrones se describe con mucha formalidad para que la gente pueda reproducirlos en muchos contextos. Aquí tienes las secciones que suelen estar presentes en la descripción de un patrón: El propósito del patrón explica brevemente el problema y la solución. La motivación explica en más detalle el problema y la solución que brinda el patrón. La estructura de las clases muestra cada una de las partes del patrón y el modo en que se relacionan. El ejemplo de código en uno de los lenguajes de programación populares facilita la asimilación de la idea que se esconde tras el patrón. Algunos catálogos de patrones enumeran otros detalles útiles, como la aplicabilidad del patrón, los pasos de implementación y las relaciones con otros patrones. En qué consiste el patrón? • Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software • Un patrón de diseño resulta ser una solución a un problema de diseño • Para que la solución sea considerada un patrón, debe poseer ciertas características En qué consiste el patrón? La plantilla más común es la utilizada precisamente por el GoF (Gang Of Four) y consta de los siguientes apartados: Gang of Four: Erich Gamma, John Vlissides, Ralph Johnson y Richard Helm. En 1995, publicaron “Patrones de diseño” • Nombre del Patrón • Clasificación del Patrón • Intención • Motivación • Aplicabilidad • Estructura • Participantes • Colaboraciones • Consecuencias • Implementación • Ejemplo de código • Usos conocidos • Patrones relacionados Elementos esenciales En general, un patrón tiene cuatro elementos esenciales: 1. El nombre del patrón es un elemento que podemos utilizar para describir un problema de diseño, sus soluciones y consecuencias en una o dos palabras. Nombrar un patrón aumenta inmediatamente nuestro vocabulario de diseño. Nos permite diseñar a un mayor nivel de abstracción. Tener un vocabulario para los patrones nos permite hablar de ellos con nuestros colegas, en nuestra documentación e incluso con nosotros mismos. Hace más fácil pensar en los diseños y comunicarlos y sus compensaciones a los demás. Elementos esenciales 2. El problema describe cuándo aplicar el patrón. Explica el problema y su contexto. Puede describir problemas de diseño específicos, como la forma de representar algoritmos como objetos. Puede describir estructuras de clases u objetos que son sintomáticas de un diseño inflexible. A veces, el problema incluirá una lista de condiciones que deben cumplirse antes de que tenga sentido aplicar el patrón. Elementos esenciales 3. La solución describe los elementos que componen el diseño, sus relaciones, responsabilidades y colaboraciones. La solución no describe un diseño concreto o una implementación, porque un patrón es como una plantilla que puede aplicarse en muchas situaciones diferentes. En cambio, el patrón proporciona una descripción abstracta de un problema de diseño y de cómo una disposición general de elementos (clases y objetos en nuestro caso) lo resuelve. Elementos esenciales 4. Las consecuencias son los resultados de la aplicación del patrón. Aunque las consecuencias a menudo no se mencionan cuando se describen las decisiones de diseño, son fundamentales para evaluar las alternativas de diseño y para comprender los costes y beneficios de la aplicación del patrón. Las consecuencias para el software suelen referirse a lascompensaciones de espacio y tiempo. También pueden referirse a cuestiones de lenguaje e implementación. Dado que la reutilización es a menudo un factor en el diseño orientado a objetos, las consecuencias de un patrón incluyen su impacto en la flexibilidad, extensibilidad o portabilidad de un sistema. Enumerar estas consecuencias de forma explícita ayuda a comprenderlas y evaluarlas. Clasificación de los patrones Los patrones pueden clasificarse por su propósito: Los patrones creacionales proporcionan mecanismos de creación de objetos que incrementan la flexibilidad y la reutilización de código existente. Resuelven problemas relacionados con la creación de instancias de objetos. Los patrones estructurales explican cómo ensamblar objetos y clases en estructuras más grandes a la vez que se mantiene la flexibilidad y eficiencia de la estructura. Se centran en problemas relacionados con la forma de estructura de las clases. Los patrones de comportamiento se encargan de una comunicación efectiva y la asignación de responsabilidades entre objetos. Permiten resolver problemas relacionados con el comportamiento de la aplicación, normalmente en tiempo de ejecución. Clasificación de los patrones Patrones Creacionales • Object Pool se obtienen objetos nuevos a través de la clonación • Abstract Factory interface que crea familias de objetos sin especificar sus clases • Builder permite crear objetos complejos incrementalmente • Factory Method permite que sean las clases derivadas las que creen objetos • Prototype permite clonar instancias a partir de un prototipo • Singleton asegura que una clase solo tiene una única instancia Patrones Estructurales • Adapter traductor que adapta la interface de un servidor a un cliente • Bridge abstracción que vincula a una entre muchas implementaciones • Composite estructura para construir jerarquías basadas en composición • Decorator extender la funcionalidad dinámicamente de modo transparente • Facade definir una interface unificada para varios subsistemas • Flyweight compartición eficiente de muchos objetos • Proxy proporciona un sustituto de otro objeto para controlar su acceso • Módulo agrupa varios elementos relacionados, como clases singletons y métodos utilizados igualmente en una entidad única Patrones de Comportamiento • Chain of Responsibility solicitud delegada al responsable de proporcionar un servicio • Command encapsula una solicitud como un objeto • Interpreter intérprete y representación de la gramática de un lenguaje • Iterator modo de acceso secuencial a elementos agregados a un objeto • Mediator encapsular la interacción entre objetos • Memento capturar el estado interno de un objeto para restaurarlo luego Patrones de Comportamiento • Observer define una dependencia de uno a muchos entre objetos • State objeto cuyo comportamiento depende de su estado • Strategy abstracción para seleccionar un algoritmo entre varios • Template Method define en una operación el esqueleto de un algoritmo • Visitor permite definir nuevas operaciones sobre una jerarquía de clases sin modificar las clases sobre las que opera Referencias https://www.youtube.com/playlist?list=PLC238B0613515968F https://docs.microsoft.com/es-es/previous- versions/bb972240(v=msdn.10)?redirectedfrom=MSDN https://www.youtube.com/playlist?list=PLC238B0613515968F https://docs.microsoft.com/es-es/previous-versions/bb972240(v=msdn.10)?redirectedfrom=MSDN Tarea Académica 1 - Individual Investigar los patrones de diseño de código: (propósito, problema, solución y ejemplo de código) • Patrón de creación (SINGLETON). • Patrón de estructura (DECORADOR). • Patrón de comportamiento (OBSERVER). Tarea Académica 2 (Grupal) Investiga sobre los siguientes enunciados. 1. ¿Qué factores motivaron la aparición de los patrones de diseño? 2. ¿Qué característica(s) de los patrones de diseño facilitan su reutilización? 3. ¿Cuál es el principal objetivo del patrón Strategy? ¿Y del Adapter? 4. ¿Qué situaciones pueden motivar la utilización de un Adapter? 5. ¿Qué relación existe entre el patrón Template Method y el patrón Strategy? 6. ¿Qué situaciones pueden motivar la utilización de un Decorator? 7. ¿Qué alternativas hay a la utilización de un Decorator? Tarea Académica 3 (Grupal) Investigar y solucionar los problemas propuestos sobre patrones de diseño de código: 1. Aplica el patrón Observer Se solicita desarrollar una paleta de colores donde el usuario1 pueda seleccionar y visualizar el color que le guste, a la ve z dicha selección debe ser controlada en tiempo real por el usuario2 y el usuario3 que hacen seguimiento a la elección realizada, el problema radica en que estos usuarios se encuentran en habitaciones distintas y no pueden ver la selección del usuario1. 2. Aplica el patrón Abstract Factory Se solicita la creación de diferentes vehículos de transporte (buses, camiones y taxis) sin que se especifique en detalle la forma de su creación. 3. Aplica el patrón Singleton Se solicita generar un historial de los eventos ejecutados por 3 usuarios del sistema, estos eventos se generan cada vez que alguno de los usuarios presiona un botón determinado de un panel de opciones, este historial debe contener la fecha y hora de ejecución del evento, además del usuario y opción presionada. 4. Aplica patrón de Diseño Decorator Un restaurante de comidas rápidas ofrece 3 tipos de combos (básico, familiar, especial) cada combo tiene características dife rentes en cuanto a cantidad, porciones, salsas entre otros, el restaurante también ofrece la posibilidad de aumentar el pedido mediante diferentes porciones adicionales (tomate, papas, carne y queso). El objetivo es crear un sistema de pedidos que permita al usuario seleccionar el combo deseado, así como armar su propio pedido con las porciones adicionales, el sistema deberá informar sobre el pedido del usuario y el valor total del mismo. Semana 1: �Patrones de diseño Introducción Introducción Introducción Qué es un Patrón de Diseño? Qué es un Patrón de Diseño? Qué es un Patrón de Diseño? En qué consiste el patrón? En qué consiste el patrón? En qué consiste el patrón? Elementos esenciales Elementos esenciales Elementos esenciales Elementos esenciales Clasificación de los patrones Clasificación de los patrones Patrones Creacionales Patrones Estructurales Patrones de Comportamiento Patrones de Comportamiento Referencias Tarea Académica 1 - Individual Tarea Académica 2 (Grupal) Tarea Académica 3 (Grupal)
Compartir