Logo Studenta

02 Semana 1 - Clase 2

¡Este material tiene más páginas!

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)

Otros materiales