28
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Tecnología de Programación Martín L. Larrea Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur

Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Tecnología de Programación

Martín L. Larrea

Departamento de Ciencias e Ingeniería de la ComputaciónUniversidad Nacional del Sur

Page 2: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrones de diseño

Los patrones de diseño nombran, explican y evalúan un diseño importante y recurrente

en los sistemas orientados a objetos.

Erich Gamma Ralph Johnson John Vlissides Richard Helm

Gang Of Four

Page 3: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrones GoF

Los siguientes son los patrones de diseño conocidos como GoF

PROPÓSITO

Chain of Responsibility

Command

Iterator

Mediator

Memento

Flyweight

Observer

State

Strategy

Visitor

Adapter

Bridge

Composite

Decorator

Facade

Proxy

Abstract Factory

Builder

Prototype

Singleton

OBJETO

InterpreterTemplate Method

Adapter Factory MethodCLASE

SCOPE

COMPORTAMIENTOESTRUCTURALCREACIONAL

Page 4: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrones de ComportamientoBehavioral Patterns

Page 5: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrones de comportamiento

Los patrones de comportamiento se centran en los algoritmos y la asignación de responsabilidades entre los

objetos.

Son patrones tanto de clases y objetos (similares a los anteriores)

como de comunicación entre ellos. Caracterizan flujo de control complejo.

Los patrones de comportamiento de clases (behavioral class patterns)

utilizan herencia para distribuir el comportamiento entre las clases.

Los patrones de comportamiento de objetos (behavioral object patterns)

utilizan composición de objetos en lugar de herencia. Algunos describen cómo los objetos cooperan entre sí para

realizar una tarea compleja, imposible para sólo uno de ellos.

Page 6: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Strategy

VikingStarcraft 2

Page 7: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Strategy

avanzarVolando(p:Pos) { activarAnimacion(“volando”); moverA(p,velocidadVuelo);}

avanzarCaminando(p:Pos) { Lista[Pos] ruta; activarAnimacion(“caminando”); ruta = buscarCamino(posActual,p); foreach(paso in ruta){ moverA(paso,velocidadPiso); }}

Page 8: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

,

, ,

Patrón Strategy

stratAvance

avanzar(p1,p2:Pos) { activarAnimacion(“volando”); moverA(p,velocidadVuelo);}

avanzar(p1,p2:Pos) { Lista[Pos] ruta; activarAnimacion(“caminando”); ruta = buscarCamino(posActual,p); foreach(paso in ruta){ moverA(paso,velocidadPiso); }}

avanzar(p:Pos) {stratAvance.avanzar(PosActual,p);}

Page 9: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Strategy

Page 10: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón State

standing kneeling running

if (posicion=1)//standingthen shoot(7); else if (posición=2) //kneelingthen shoot(8)else if (posición=3) //runningthen shoot(2)

Page 11: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón State

standing kneeling running down

if (posicion=1)//standingthen saltar()else if (posición=2) //kneelingthen pararse()else if (posición=3) //runningthen saltar()

Page 12: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón State

disparar(){ posicion.disparar();}

disparar(){ shoot(2);}

Page 13: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón State

up(){ posicion.up();}

up(){ saltar();} up(){

pararse();}

Page 14: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón State - UML

interfaz de los estados

estadosconcretos

Page 15: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Visitor

$

Necesito calcular

cuánto dinero

hay en total en

todos nuestros cajeros

Page 16: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Visitor

$

1..* cajeros

contarTotal():entero{ total=0; foreach(c in Cajeros){ total = total + c.getDinero() } return total;}

Page 17: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Visitor

$

1..* cajeros

Necesito calcular el

promedio de errores

de todo nuestro

sistema de cajeros

Page 18: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Visitor

$

1..* cajeros

contarErrores():entero{ total=0; cant=1; foreach(c in Cajeros){ total = total + c.getErrores(); cant++; } return (total div cant);}

Page 19: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Visitor

$

1..* cajeros

Necesito apagar

todos los cajeros del

sistema

Page 20: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Visitor

$

1..* cajeros

shutdown() { foreach(c in Cajeros){

c.anular(); }}

Page 21: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Visitor

1..* cajeros

operacionX() { foreach(c in Cajeros){

//hacer algo con cada cajero }}

Page 22: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Visitor

1..* cajeros

operacionX(Algo a) { foreach(c in Cajeros){

//hacer algo con cada cajero }}

Page 23: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Visitor

1..* cajeros

operacionX(Algo a) { foreach(c in Cajeros){

//hacer algo con cada cajeroc.aceptar(a)

}}

aceptar(Algo a)

aceptar(Algo a) {//permitir que a realice tareas sobre mi

}

Page 24: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Visitor

1..* cajeros

operacionX(Algo a) { foreach(c in Cajeros){

//hacer algo con cada cajeroc.aceptar(a)

}}

aceptar(Algo a)

aceptar(Algo a) {//permitir que a realice tareas sobre mia.operarCon(this)

}

Page 25: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Visitor

visitors

interfaz de los

visitados

interfaz de

visitors

visitados

Page 26: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Visitor

operarConCajeros(Visitor v) { foreach(c in Cajeros){ c.aceptar(v) }}

Page 27: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Visitor

aceptar(Visitor v) { v.visitarCajero(this)}

visitarCajero(Cajero c){ total = total + c.getDinero();}

Page 28: Tecnología de Programacióndcm/tdp/downloads/Clases/2019-2do-tdp-Clase-10... · Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Patrones

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Patrón Visitor

https://www.youtube.com/watch?v=KSEyIXnknoY

PatternCraftVisitor Pattern