presentacion patrones de diseno gof
Post on 25-Jun-2015
6.986 Views
Preview:
DESCRIPTION
TRANSCRIPT
Patrones de Diseño
Patrones de Diseño
Diseño de Aplicaciones
Juan Francisco Soto
Patrones de Diseño
Patrones a desarollar
•Estructurales Decorator FlyWeight
Comportamiento Template Method
Patrones de Diseño
Patrones Estructurales
Decorator
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
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
Patrones de Diseño
Decorator: Estructura
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
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
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
Patrones de Diseño
Class Explosion
Class Explosion
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
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
Patrones de Diseño
Beneficios de Decorator
• Mayor flexibilidad que la herencia estatica
• Evita efecto cascada y tener una jerarquia de clases extensa
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.
Patrones de Diseño
Usos Comunes
Es muy utilizado para adicionar opciones de "embellecimiento" en las interfaces al usuario
Patrones de Diseño
Patrones Relacionados
• Adapter• Composite• Strategy
Patrones de Diseño
Patrones Estructurales
FlyWeight
Patrones de Diseño
Problema en FlyWeight
¿Como reducir la informacion redundante que comparten distintas instancias de un objeto?
Patrones de Diseño
Solución FlyWeight
Crear un objeto FlyWeight que contendrá la informacion en comun y armar una composicion con el ObjetoFactory
Patrones de Diseño
FlyWeight, su estructura
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
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
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
Patrones de Diseño
Implementacion de FlyWeight
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()
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
Patrones de Diseño
Beneficios
• Reduccion de costos de almacenamiento en la infraestructura
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
Patrones de Diseño
Patrones Relacionados
• Composite
Patrones de Diseño
Patrones de Comportamiento
Template Method
Patrones de Diseño
Problema
¿Cómo hacer para permitir que las subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura?
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
Patrones de Diseño
Estructura
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
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()
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()
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
Patrones de Diseño
Desventajas
Se puede producir ambigüedad si no se escribe bien
Patrones de Diseño
Patrones Relacionados
Factory MethodStrategyIntercepting Filter: utiliza el patron
template Method para implementar su estrategia de plantilla
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
Patrones de Diseño
Preguntas
Any Questions?
Patrones de Diseño
¡¡¡GRACIAS!!!!
top related