Download - Presentacion Patrones De Diseno GoF
![Page 1: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/1.jpg)
Patrones de Diseño
Patrones de Diseño
Diseño de Aplicaciones
Juan Francisco Soto
![Page 2: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/2.jpg)
Patrones de Diseño
Patrones a desarollar
•Estructurales Decorator FlyWeight
Comportamiento Template Method
![Page 3: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/3.jpg)
Patrones de Diseño
Patrones Estructurales
Decorator
![Page 4: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/4.jpg)
Patrones de Diseño
Problema en Decorator
¿Cómo agregar dinámicamente funcionalidades a un objeto sin tener que crear sucesivas clases que hereden las mismas de su superclase?
Las funcionalidades se pueden agregar por herencia, pero no es flexible porque la responsabilidad es adicionada estáticamente
![Page 5: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/5.jpg)
Patrones de Diseño
Solución Decorator
La solución alternativa y flexible consiste en rodear el objeto con otro objeto que es el que adiciona la nueva responsabilidad y proveer una alternativa al proceso de subclassing
![Page 6: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/6.jpg)
Patrones de Diseño
Decorator: Estructura
![Page 7: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/7.jpg)
Patrones de Diseño
Decotor: Participantes de su estructura
Component: interface de los objetos a los que se les pueden adicionar responsabilidades dinámicamente
ConcreteComponent: objeto al que se le puede adicionar una responsabilidad.
Decorator: Mantiene una referencia al objeto Component y define una interface de acuerdo con la interface de Component.
ConcreteDecorator: adiciona la responsabilidad al component
![Page 8: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/8.jpg)
Patrones de Diseño
Ejemplo
• Escenario (StarBucks Coffe)Beverage es una clase abstracta
El metodo cost es abstracta, cada subclase necesita definir su propia implementacion
![Page 9: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/9.jpg)
Patrones de Diseño
Problema en Starbucks Coffe
• El cliente puede pedir diferentes agregados a su bebida: chocolate, salsa, leche, leche batida y el costo de cada agregado en cada tipo de bebida es diferente
• Se necesita obtener todas las combinaciones posibles de funcionalidades
• Al momento de crear las clases voy a obtener el siguiente diagrama
![Page 10: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/10.jpg)
Patrones de Diseño
Class Explosion
Class Explosion
![Page 11: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/11.jpg)
Patrones de Diseño
Implementacion de Decorator
Se agregaron nuevos valores booleanos
Cost no es mas abstracto y puede calcular el costo asociado para cada bebida en particular
![Page 12: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/12.jpg)
Patrones de Diseño
Aplicabilidad de Decorator
• Para añadir objetos individuales de forma dinámica y transparente
• Responsabilidades de un objeto pueden ser retiradas
• Cuando la extensión mediante la herencia no es viable
• Cuando Hay una necesidad de extender la funcionalidad de una clase, pero no hay razones para extenderlo a través de la herencia
• Cuando Hay la necesidad de extender dinámicamente la funcionalidad de un objeto y quizás quitar la funcionalidad extendida
![Page 13: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/13.jpg)
Patrones de Diseño
Beneficios de Decorator
• Mayor flexibilidad que la herencia estatica
• Evita efecto cascada y tener una jerarquia de clases extensa
![Page 14: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/14.jpg)
Patrones de Diseño
Desventajas Decorator
• Un Decorator y su Component no son idénticos. Desde el punto de vista de la identidad de los objetos, un DecoratorComponent no es identico al Component. Por esto no se puede confiar en en la identidad de los objetos cuando se usan Decorators
• El patrón Decorator hace que hayan muchos objetos pequeños que son muy parecidos.
![Page 15: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/15.jpg)
Patrones de Diseño
Usos Comunes
Es muy utilizado para adicionar opciones de "embellecimiento" en las interfaces al usuario
![Page 16: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/16.jpg)
Patrones de Diseño
Patrones Relacionados
• Adapter• Composite• Strategy
![Page 17: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/17.jpg)
Patrones de Diseño
Patrones Estructurales
FlyWeight
![Page 18: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/18.jpg)
Patrones de Diseño
Problema en FlyWeight
¿Como reducir la informacion redundante que comparten distintas instancias de un objeto?
![Page 19: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/19.jpg)
Patrones de Diseño
Solución FlyWeight
Crear un objeto FlyWeight que contendrá la informacion en comun y armar una composicion con el ObjetoFactory
![Page 20: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/20.jpg)
Patrones de Diseño
FlyWeight, su estructura
![Page 21: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/21.jpg)
Patrones de Diseño
Ejemplo
• Escenario (Habitacion con varias pelotas)
Los atributos Radio y color desperdician memoria y son redundantes ya que son atributos propios que no necesariamente tienen que repetirse en todas las instancias
![Page 22: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/22.jpg)
Patrones de Diseño
FlyWeight (Problema)
• Aunque las pelotas tengan distinta coordenada, el radio y el color se repetiran en cada instancia creada haciendo un uso ineficiente de la memoria
![Page 23: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/23.jpg)
Patrones de Diseño
FlyWeight (Solucion)
• Crear una clase FlyWeight que contenga la informacion en comun (radio y color) y otra clase que contendra la informacion concreta de cada clase (x,y) y una referencia a un objeto de tipo FlyWeight
![Page 24: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/24.jpg)
Patrones de Diseño
Implementacion de FlyWeight
![Page 25: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/25.jpg)
Patrones de Diseño
Ejemplo Python
class PelotaFlyweight(object):color = azulradio = 4
class PelotaConcreta(object):def __init__(self, x, y):
self.x = xself.y = y
detalles = PelotaFlyweight()
![Page 26: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/26.jpg)
Patrones de Diseño
Aplicabilidad de FlyWeight
• Una aplicacion usa un gran numero de objetos
• Costos de almacenamiento son altos debido a la gran cantidad de objetos
![Page 27: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/27.jpg)
Patrones de Diseño
Beneficios
• Reduccion de costos de almacenamiento en la infraestructura
![Page 28: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/28.jpg)
Patrones de Diseño
Desventajas
• Cuando reducimos el costo de almacenamiento referenciando al objeto FlyWeight incrementamos el tiempo de proceso computacional.
• Ej: Una busqueda en un B-Tree puede consumir mas tiempo
![Page 29: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/29.jpg)
Patrones de Diseño
Patrones Relacionados
• Composite
![Page 30: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/30.jpg)
Patrones de Diseño
Patrones de Comportamiento
Template Method
![Page 31: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/31.jpg)
Patrones de Diseño
Problema
¿Cómo hacer para permitir que las subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura?
![Page 32: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/32.jpg)
Patrones de Diseño
Solución
Definir una estructura de herencia en la cual la superclase sirva de plantilla de los métodos de las subclases
![Page 33: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/33.jpg)
Patrones de Diseño
Estructura
![Page 34: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/34.jpg)
Patrones de Diseño
Participantes
AbstractClass (Object)
Define las operaciones primitivas abstractas que las subclases concretas, definen para implementar los pasos de un algoritmo
Implementa un metodo templato para definir el esqueleto de un algoritmo
ConcreteClass (CustumerObject)
Implementa las operaciones primitivas
![Page 35: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/35.jpg)
Patrones de Diseño
Implementacion en Python
class Automovil:
def __init__(self, mar, mod):
self.marca = mar
self.modelo = mod
#Defino metodos primitivos
def CambioMarcha(self):
def Acelerar(self):
def Frenar(self):
#Metodo Template
def Andar(self):
self.Acelerar()
self.CambioMarcha()
self.Frenar()
![Page 36: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/36.jpg)
Patrones de Diseño
Implementacion en Python
class AutomovilManual(Automovil):
def CambioMarcha(self):
print “Cambio marcha como un auto manual”
def Acelerar(self):
print “acelero como un auto manual”
def Frenar(self):
print “Freno como un auto manual”
class AutomovilAutomatico(Automovil):
def CambioMarcha(self):
print “Cambio marcha como un auto automatico”
def Acelerar(self):
print “acelero como un auto automatico”
def Frenar(self):
print “Freno como un auto automatico”
>> automatico = AutomovilAutomatico(Ferrari, F2004)
>> manual = AutomovilManual(RedBull, 6-2010)
>> automatico.andar()
>> manual.andar()
![Page 37: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/37.jpg)
Patrones de Diseño
Ventajas
La principal ventaja es que facilita la reutilizacion de codigo, por eso es fundamental este patron en la mayor parte de Frameworks
![Page 38: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/38.jpg)
Patrones de Diseño
Desventajas
Se puede producir ambigüedad si no se escribe bien
![Page 39: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/39.jpg)
Patrones de Diseño
Patrones Relacionados
Factory MethodStrategyIntercepting Filter: utiliza el patron
template Method para implementar su estrategia de plantilla
![Page 40: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/40.jpg)
Patrones de Diseño
Donde Usarlo
Este patron se vuelve de especialid utilidad cuando es necesario realizar un algoritmo que sea comun para muchas clases pero con pequeñas variaciones entre unas y otras
![Page 41: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/41.jpg)
Patrones de Diseño
Preguntas
Any Questions?
![Page 42: Presentacion Patrones De Diseno GoF](https://reader035.vdocuments.net/reader035/viewer/2022062313/558b8403d8b42a963b8b4722/html5/thumbnails/42.jpg)
Patrones de Diseño
¡¡¡GRACIAS!!!!