presentacion patrones de diseno gof

42
Patrones de Diseño Patrones de Diseño Diseño de Aplicaciones Juan Francisco Soto

Upload: juansoto86

Post on 25-Jun-2015

6.986 views

Category:

Documents


3 download

DESCRIPTION

Presentacion Realizada en la materia Ingenieria de Software de la Universidad de Moron, se cubrieron los siguientes patrones GoF: Decorator, FlyWeight y Template Method

TRANSCRIPT

Page 1: Presentacion Patrones De Diseno GoF

Patrones de Diseño

Patrones de Diseño

Diseño de Aplicaciones

Juan Francisco Soto

Page 2: Presentacion Patrones De Diseno GoF

Patrones de Diseño

Patrones a desarollar

•Estructurales Decorator FlyWeight

Comportamiento Template Method

Page 3: Presentacion Patrones De Diseno GoF

Patrones de Diseño

Patrones Estructurales

Decorator

Page 4: Presentacion Patrones De Diseno GoF

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

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

Patrones de Diseño

Decorator: Estructura

Page 7: Presentacion Patrones De Diseno GoF

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

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

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

Patrones de Diseño

Class Explosion

Class Explosion

Page 11: Presentacion Patrones De Diseno GoF

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

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

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

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

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

Patrones de Diseño

Patrones Relacionados

• Adapter• Composite• Strategy

Page 17: Presentacion Patrones De Diseno GoF

Patrones de Diseño

Patrones Estructurales

FlyWeight

Page 18: Presentacion Patrones De Diseno GoF

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

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

Patrones de Diseño

FlyWeight, su estructura

Page 21: Presentacion Patrones De Diseno GoF

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

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

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

Patrones de Diseño

Implementacion de FlyWeight

Page 25: Presentacion Patrones De Diseno GoF

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

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

Patrones de Diseño

Beneficios

• Reduccion de costos de almacenamiento en la infraestructura

Page 28: Presentacion Patrones De Diseno GoF

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

Patrones de Diseño

Patrones Relacionados

• Composite

Page 30: Presentacion Patrones De Diseno GoF

Patrones de Diseño

Patrones de Comportamiento

Template Method

Page 31: Presentacion Patrones De Diseno GoF

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

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

Patrones de Diseño

Estructura

Page 34: Presentacion Patrones De Diseno GoF

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

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

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

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

Patrones de Diseño

Desventajas

Se puede producir ambigüedad si no se escribe bien

Page 39: Presentacion Patrones De Diseno GoF

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

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

Patrones de Diseño

Preguntas

Any Questions?

Page 42: Presentacion Patrones De Diseno GoF

Patrones de Diseño

¡¡¡GRACIAS!!!!