presentacion patrones de diseno gof

Post on 25-Jun-2015

6.985 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

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

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