PATRONES DE DISEO Ing Arles Rodrguez Portela Patrones

  • Slides: 70
Download presentation
PATRONES DE DISEÑO Ing. Arles Rodríguez Portela

PATRONES DE DISEÑO Ing. Arles Rodríguez Portela

Patrones de Diseño ¡Alguien quiere resolver tus problemas! Es una solución estándar a un

Patrones de Diseño ¡Alguien quiere resolver tus problemas! Es una solución estándar a un problema común. Una técnica para hacer código mas flexible haciendo que este reuna cierto criterio. Un diseño o un diseño o implementación que cumple cierto propósito Un idioma de programación de alto nivel. Atajos para describir ciertos aspectos de programación para describir ciertos aspectos de organización de un programa. Conexiones entre componentes de un programa. La figura de un diagrama de objetos o de componentes.

Simu. Duck Juego de Simulación de estanques de Patos. Se muestra una variedad de

Simu. Duck Juego de Simulación de estanques de Patos. Se muestra una variedad de especies de patos nadando y graznando. Los diseñadores inicialmente utilizaron técnicas orientadas a objetos y crearon una superclase Pato de la que las otras heredan.

Simu. Duck

Simu. Duck

Simu. Duck La compañía ha tenido presiones de sus competidores. Requieren mostrar algo realmente

Simu. Duck La compañía ha tenido presiones de sus competidores. Requieren mostrar algo realmente innovador a los inversionistas la próxima semana. Se necesita que los Patos Vuelen!

Simu. Duck Comercial dijo que no habia ningún problema para entregar eso en una

Simu. Duck Comercial dijo que no habia ningún problema para entregar eso en una semana. Jefe: Joe es muy bueno en OOP, ¿qué tan dificil puede ser?

Objetivo

Objetivo

Joe!

Joe!

La solución de Joe

La solución de Joe

Pero algo salió horriblemente mal Joe… Estuve en la reunión con los inversionistas. Y

Pero algo salió horriblemente mal Joe… Estuve en la reunión con los inversionistas. Y vimos patos de goma volando alrededor de la pantalla… es esto una broma? Deberías entrar en monster. com

¿Qué pasó? Joe falló al no notar que NO todas las clases de pato

¿Qué pasó? Joe falló al no notar que NO todas las clases de pato vuelan. Cuando Joe añadió este comportamiento a la superclase, añadió la propiedad de volar a especies de pato que no vuelan.

Diseño de Joe

Diseño de Joe

Diseño de Joe ¡Si! Una falla en el diseño, pero que acaso unos patitos

Diseño de Joe ¡Si! Una falla en el diseño, pero que acaso unos patitos de goma volando, ¿no se ven simpáticos?

Conclusión La idea de herencia de Joe no se ve muy bien cuando llega

Conclusión La idea de herencia de Joe no se ve muy bien cuando llega la hora de hacer mantenimiento.

Joe medita sobre el uso de herencia Pues sobreescribo el método de volar del

Joe medita sobre el uso de herencia Pues sobreescribo el método de volar del patito de goma para que no haga nada…

Auto-recuperación Entonces que pasará cuando añadan patos de madera que no vuelen ni graznen…

Auto-recuperación Entonces que pasará cuando añadan patos de madera que no vuelen ni graznen… : S

¡Quiz! |

¡Quiz! |

¿Y si uti. Iizo interfaces? Joe piensa que la herencia no es una muy

¿Y si uti. Iizo interfaces? Joe piensa que la herencia no es una muy buena opción porque un memorando dice que cada seis meses se va a actualizar el producto. Por cada clase Pato que salga me toca modificar los metodos de volar y graznar… ¡por siempre! Necesita una vía limpia para tener solo uno pero no todos los tipos de Pato volando o graznando.

Razonamiento de Joe Saco el Vuelo de la superclase y hago una interfaz Flyable

Razonamiento de Joe Saco el Vuelo de la superclase y hago una interfaz Flyable con un método fly(), los patos que se suponen vuelan, implementarán esta interfaz… ¡Lo mismo para graznar!

¿Qué piensa sobre el razonamiento de Joe?

¿Qué piensa sobre el razonamiento de Joe?

La Jefe de Joe ¡Es la peor idea que jamás he oido! Usted dice

La Jefe de Joe ¡Es la peor idea que jamás he oido! Usted dice ¿duplicar código? Si sobreescribir algunos métodos era malo que sentirá cuando haya que hacer un pequeño cambio a las 48 especies de pato

¿Qué haría si fuera Joe? Herencia no es una buena opción. Las interfaces resuelven

¿Qué haría si fuera Joe? Herencia no es una buena opción. Las interfaces resuelven parte del problema, pero destruye la reutilización de volar, haciendo una pesadilla el mantenimiento.

Cuál es la única constante en el desarrollo de software (Quiz ii) | ¿La

Cuál es la única constante en el desarrollo de software (Quiz ii) | ¿La única constante en el desarrollo de software con la que usted siempre puede contar, sin importar el lenguaje de programación, o lo que usted esté haciendo o incluso sin importar el producto software en el que esté involucrado?

Cuál es la única constante en el desarrollo de software

Cuál es la única constante en el desarrollo de software

 No importa que tan bien haga su aplicación, sobre el tiempo o la

No importa que tan bien haga su aplicación, sobre el tiempo o la aplicación cambia o muere…

Quiz iii

Quiz iii

Profundizando en el problema Principio de Diseño: Identifique los aspectos de la aplicación que

Profundizando en el problema Principio de Diseño: Identifique los aspectos de la aplicación que varíen y sepárelos de aquellos que se mantienen igual

Principio de diseño Tome las partes que varíen y encapsúlelas, para que así pueda

Principio de diseño Tome las partes que varíen y encapsúlelas, para que así pueda alterarlas o extenderlas sin afectar lo que no debe afectarse. Ganancia: Flexibilidad y menos consecuencias no controladas. Este principio de diseño forma parte de casi todos los patrones de diseño existentes.

Separando los cambios de lo que se mantiene igual La clase Duck no tiene

Separando los cambios de lo que se mantiene igual La clase Duck no tiene problemas que con quack() y fly(). La clase Duck se queda. Se crea un nuevo subconjunto de clases para representar los comportamientos que cambian fly() y quack().

Separando los cambios de lo que se mantiene igual

Separando los cambios de lo que se mantiene igual

Diseñando los comportamientos variables de los patos Se desean mantener las cosas flexibles. Se

Diseñando los comportamientos variables de los patos Se desean mantener las cosas flexibles. Se desea asignar comportamientos a instancias de Pato. Se desea inicializar un pato silvestre (Mallar. Duck) con un tipo específico de comportamiento de vuelo. Porque no asegurar que el comportamiento de un pato cambie dinámicamente. Incluir setters para el comportamiento de los patos para que se pueda cambiar el comportamiento de estos en tiempo de ejecucíón.

Segundo principio Programe a una interface no una implementación

Segundo principio Programe a una interface no una implementación

Solución Se utiliza una interface para cada comportamiento. Fly. Behavior y Quack. Behavior y

Solución Se utiliza una interface para cada comportamiento. Fly. Behavior y Quack. Behavior y cada implementación implementará una de estas interfaces. No hay clases pato que implementen interfaces de Quack y Fly. Se crean algunas clases cuya función es representar un comportamiento.

Solución

Solución

Solución En éste nuevo diseño las subclases de Duck usarán una interface representada por

Solución En éste nuevo diseño las subclases de Duck usarán una interface representada por una interface (Fly. Behavior y Quack. Behavior) así que la implementación actual de el comportamiento (el comportamiento específico se codifica en la clase que implementa (Fly. Behavior o Quack. Behavior) no quedará atado a la clase Pato.

Fuentes No veo porque usar una interfaz para Fly. Behavior se puede hacer lo

Fuentes No veo porque usar una interfaz para Fly. Behavior se puede hacer lo mismo con una superclase abstracta ¿no es lo mismo que usar polimorfismo?

Programar una interface significa programar un supertipo

Programar una interface significa programar un supertipo

Implementando los comportamientos del pato

Implementando los comportamientos del pato

Ganancia Otros tipos de objetos pueden utilizar los comportamientos de volar o graznar porque

Ganancia Otros tipos de objetos pueden utilizar los comportamientos de volar o graznar porque estos comportamientos no quedan escondidos en nuestras clases pato. Se pueden añadir nuevos comportamientos sin modificar la clase pato o tocar alguna de las clases pato que usa comportamientos de volar.

Cuando las cosas cambien, ¿siempre debo devolverme y encapsular estas cosas? No siempre, depende

Cuando las cosas cambien, ¿siempre debo devolverme y encapsular estas cosas? No siempre, depende que flexibilidad requiera el código especificado.

¿Se podría hacer de Duck una interface? No. Cuando todo está enganchado se ve

¿Se podría hacer de Duck una interface? No. Cuando todo está enganchado se ve la utilidad de la clase pato y las especies de pato. ç ¿No es raro tener una clase que es un comportamiento? Un comportamiento puede tener estados y métodos, un comportamiento de volar puede tener valores de instancia representando parámetros de vuelo (aleteos por minuto, maxima altitud, velocidad)

Quiz (iv) |

Quiz (iv) |

Respuestas

Respuestas

Integrando los comportamientos Duck ahora delegará sus comportamientos de volar en vez de usar

Integrando los comportamientos Duck ahora delegará sus comportamientos de volar en vez de usar los metodos de quacking y flying definidos en Duck.

Integrando los comportamientos 1. Se añaden dos instancias de Fly. Behavior y Quack. Behavior

Integrando los comportamientos 1. Se añaden dos instancias de Fly. Behavior y Quack. Behavior de tipo interface. Cada pato selecciona en tiempo de ejecución que interfaz va a utilizar (volar con alas, chillar). Se remueven los metodos fly() y Quack() de la clase Duck y sus subclases. Se reemplazan por Perform. Fly() y Perform. Quack().

Integrando los componentes

Integrando los componentes

 2. Implementar perform. Quack() Duck permite que el objeto que es referenciado por

2. Implementar perform. Quack() Duck permite que el objeto que es referenciado por quack. Behavior grazne por el. Así la preocupación es sobre como graznará.

Cómo se setean los comportamientos

Cómo se setean los comportamientos

¿Qué se está haciendo en ese constructor, si supuestamente no se programaba para una

¿Qué se está haciendo en ese constructor, si supuestamente no se programaba para una interfaz específica?

Código final para Duck

Código final para Duck

Fly. Behavior y sus dos implementaciones

Fly. Behavior y sus dos implementaciones

Quack. Behavior y sus implementaciones

Quack. Behavior y sus implementaciones

Seleccionar el comportamiento dinámicamente

Seleccionar el comportamiento dinámicamente

IS–A, HAS–A, Implements

IS–A, HAS–A, Implements

HAS – A es mejor que IS-A Favorezca composición sobre herencia

HAS – A es mejor que IS-A Favorezca composición sobre herencia

 Hemos visto el patrón Stategy

Hemos visto el patrón Stategy

Impresione a sus amigos e influencie a los ejecutivos El patrón strategy define una

Impresione a sus amigos e influencie a los ejecutivos El patrón strategy define una familia de algoritmos que se encapsulan y se hacen intercambiables, dejando que el algoritmo varíe independientemente de los clientes que lo usen.

Quiz (V) Cada personaje puede usar un arma al tiempo pero puede cambiar armas

Quiz (V) Cada personaje puede usar un arma al tiempo pero puede cambiar armas durante el juego.

Ventajas patrón de diseño Brinda un vocabulario compartido. Permite pensar a nivel de patrones.

Ventajas patrón de diseño Brinda un vocabulario compartido. Permite pensar a nivel de patrones.

Cuando usar patrones de diseño Los patrones de diseño están en su cerebro!

Cuando usar patrones de diseño Los patrones de diseño están en su cerebro!

Resumen

Resumen

Soluciones

Soluciones

Soluciones (ii)

Soluciones (ii)

Fuentes MIT - Design Patterns http: //dspace. mit. edu/bitstream/handle/1721. 1/3 5275/6 -170 Fall-2001/Ocw. Web/Electrical.

Fuentes MIT - Design Patterns http: //dspace. mit. edu/bitstream/handle/1721. 1/3 5275/6 -170 Fall-2001/Ocw. Web/Electrical. Engineering-and-Computer-Science/6170 Laboratory-in-Software. Engineering. Fall 2001/Lecture. Notes/index. htm [FREEMAN] E. Freeman. Head First Design Patterns. O'Reilly Media, 2004.