22
Tema 3.3.1 Patrones: Façade y Template Method Ingeniería del Software II J. Peña (Teoría)

Tema 3.3.1 Patrones: Façade y Template Method

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tema 3.3.1 Patrones: Façade y Template Method

Tema 3.3.1Patrones: Façade y Template Method

Ingeniería del Software IIJ. Peña (Teoría)

Page 2: Tema 3.3.1 Patrones: Façade y Template Method

Índice

♦ Patrón Façade♦ Patrón Template Method♦ Conclusiones

Page 3: Tema 3.3.1 Patrones: Façade y Template Method

Índice

♦ Patrón Façade♦ Patrón Template Method♦ Conclusiones

Page 4: Tema 3.3.1 Patrones: Façade y Template Method

Façade

1. Intención

♦ Proporcionar una interfaz unificada para un conjunto de interfaces en un subsistema, haciéndolo más fácil de usar

2. Motivación

♦ Reducir la complejidad y minimizar dependencias

clases clientes

clases del subsistema

Fachada

Page 5: Tema 3.3.1 Patrones: Façade y Template Method

Façade

♦ Motivación♦ Estructurar un entorno de programación

Compilador

Clases del subsistema decompilación

Editor DepuradorLinkador

Token

AnaLexAnaSin

ASA TabSim

Compilar()

Page 6: Tema 3.3.1 Patrones: Façade y Template Method

Façade

1) Aplicabilidad:

♦ Se quiera proporcionar una interfaz sencilla para un subsistema complejo

♦ Se quiera desacoplar un subsistema de sus clientes y de otros subsistemas, haciéndolo mas independiente y portable

♦ Se quiera dividir los sistemas en niveles: las fachadas serían el punto de entrada a cada nivel

2) Estructura Clases del subsistema

BA

C D

Fachada

E

Page 7: Tema 3.3.1 Patrones: Façade y Template Method

Façade

1) Participantes♦ Fachada: delegar las peticiones de los clientes en

los objetos del subsistema♦ Clases del subsistema: implementar la

funcionalidad del subsistema

2) Colaboraciones♦ Los clientes se comunican con el subsistema a

través de la fachada, que reenvía las peticiones a los objetos del subsistema apropiados y puede realizar también algún trabajo de traducción

♦ Los clientes que usan la fachada no necesitan acceder directamente a los objetos del sistema

Page 8: Tema 3.3.1 Patrones: Façade y Template Method

Façade

♦ Ejemplo: Fachada para el acceso a BBDD vía JDBC

♦ Para consultar una base de datos es necesario colaborar con objetos de al menos cinco clases diferentes

1.Connection. Conexión a la BBDD

2.DatabaseMetadata. Acceso a nombres de tablas y campos

3.Statement. Crea la sentencia SQL

4.ResultSet. Recuperar la información en crudo

5.ResultSetMetaData. Accede a los campos del ResultSet

♦ Es más que evidente que se puede simplificar la colaboración

Page 9: Tema 3.3.1 Patrones: Façade y Template Method

Façade

1) Consecuencias ♦ Oculta a los clientes de la complejidad del

subsistema y lo hace más fácil de usar♦ Favorece un acoplamiento débil entre el

subsistema y sus clientes, consiguiendo que los cambios de las clases del sistema sean transparentes a los clientes

♦ Facilita la división en capas y reduce dependencias de compilación

♦ No se impide el acceso a las clases del sistema

Page 10: Tema 3.3.1 Patrones: Façade y Template Method

Façade

1) Implementación

♦ Se puede reducir aún más el acoplamiento haciendo que la fachada sea una clase abstracta, de forma que se pueda escoger entre distintas implementaciones del subsistema

♦ Java y las últimas versiones de C++ facilitan la definición de clases privadas a un subsistema.

2) Patrones relacionados

♦ Las fachadas suelen ser Singletons

♦ Indirección (GRASP)

♦ Controlador (GRASP). Los controladores suelen actuar como puntos de entrada (fachadas) de la capa lógica

Page 11: Tema 3.3.1 Patrones: Façade y Template Method

Índice

♦ Patrón Façade♦ Patrón Template Method♦ Conclusiones

Page 12: Tema 3.3.1 Patrones: Façade y Template Method

Template Method

♦ Nombre y clasificación: Template Method. Comportamiento (GoF)

♦ Intención: Definir el esqueleto de un algoritmo en una operación delegando algunos pasos en las subclases

♦ Motivación: La lógica del método compress de Folder y SingleFile es muy similar. ¿Se puede identificar la parte común y elevarla a FileSystemItem?

class SingleFile{ … public compress(String compressionMethod) { String[] inFileName= {new String(getAbsolutePath())}; setCompressionMethod(compressionMethod); compressor.compress(inFileName); }}

Los métodos que incluyen en su código llamadas a métodos abstractos se denominan métodos plantilla

Page 13: Tema 3.3.1 Patrones: Façade y Template Method

Template Method

1)Motivación (cont):class Folder extends FileSystemItem{ … public compress(String compressionMethod) { String[] inFileName= new String[numFileSystemItem()]; for (int i=0; i < numFileSystemItem(); i++) inFileName[i]= getFileSystemItem(i).getAbsolutePath(); setCompressionMethod(compressionMethod); compressor.compress(inFileName, getAbsolutePath()); }}

class FileSystemItem implements …{ … abstract public void compress();}

class FileSystemItem implements …{ … public void compress(){ … } }

Page 14: Tema 3.3.1 Patrones: Façade y Template Method

Template Method

1)Motivación (cont):class FileSystemItem implements IFileSystemItem{ … public void compress(String compressionMethod) {

setCompressionMethod(compressionMethod);compressor.compress( getInFileName(), getAbsolutePath());

}; protected abstract String[] getInFileName();}

class Folder extends FileSystemItem{ … protected String[] getInFileName() { String[] inFileName= new String[numFileSystemItem()]; for (int i=0; i < numFileSystemItem(); i++) inFileName[i]= getFileSystemItem(i).getAbsolutePath(); return inFileName; }}class SingleFile extends FileSystemItem{ … protected String[] getInFileName() { String[] inFileName= {new String (getAbsolutePath()) }; return inFileName; }}

Page 15: Tema 3.3.1 Patrones: Façade y Template Method

Template Method

1) Aplicabilidad: ♦ Factorizar el comportamiento común de varias subclases♦ Implementar las partes fijas de un algoritmo una sola vez y

dejar que las subclases implementen las partes variables♦ Cuando se diseña una biblioteca. Algunas de las clases

pueden tener un comportamiento que dependa de la aplicación que la use. En tal caso, este patrón obliga a que el programador proporcione dicho comportamiento (el compilador avisa de los métodos abstractos sin implementar)

♦ (E) Definir una estructura lo más reutilizable posible para la autenticación de usuarios

♦ Controlar las ampliaciones de las subclases, convirtiendo en métodos plantillas aquéllos métodos que pueden ser redefinidos. En este caso, los métodos abstractos se les denomina métodos de enganche (hook) (Ver cap. 34 de Larman)

♦ (E) Definir un método de enganche para el método m1 de la clase B

Page 16: Tema 3.3.1 Patrones: Façade y Template Method

Template Method

1)Estructura

#abstractMethod1(in p : P2) : T2#abstractMethodN(in p : Pn) : Tn

ConcreteTemplate

+templateMethod(in p : P1) : T1#abstractMethod1(in p : P2) : T2#abstractMethodN(in p : Pn) : Tn

AbstractTemplate

...abstractMethod1(..)...abstractMethodN(..)

Page 17: Tema 3.3.1 Patrones: Façade y Template Method

Template Method

1)Participantes♦ AbstractTemplate: implementa un método

plantilla que define el esqueleto de un algoritmo y define métodos abstractos que implementan las subclases concretas

♦ ConcreteTemplate: implementa los métodos abstractos para realizar los pasos del algoritmo que son específicos de la subclase

2)Colaboraciones♦ Las clases concretas confían en que la clase

abstracta implemente la parte fija del algoritmo♦ (E) Obtener su diagrama de secuencia

Page 18: Tema 3.3.1 Patrones: Façade y Template Method

Template Method

1)Consecuencias (ventajas e inconvenientes)♦ Favorece la reutilización del código. Muy útiles para

construir bibliotecas, pues ayuda a factorizar el comportamiento común de las clases

♦ Lleva a una estructura de control invertido (Principio de Hollywood): la superclase base invoca los métodos de las subclases

2)Implementación♦ Los métodos plantilla no deben redefinirse♦ Los métodos abstractos deben ser protegidos

(accesible a las subclases pero no a los clientes) y abstractos

♦ Minimizar el número de métodos abstractos a fin de facilitar la implementación de las subclases

♦ Convenios de nominación. Se suele usar el prefijo Do

Page 19: Tema 3.3.1 Patrones: Façade y Template Method

Template Method

1)Código de ejemplo

♦ Ver motivación

2)Usos conocidos:

♦ Se suelen encontrar en casi todas las clases abstractas

♦ (E) Identificar el uso de este patrón en algunas clases del JDK

3)Patrones relacionados:

♦ Strategy. El Strategy usa la composición para cambiar todo el algoritmo, los métodos plantilla usan la herencia para cambiar parte de un algoritmo

♦ Factory Method. Los métodos fábrica suelen llamarse desde métodos plantilla

♦ Muy relacionado con la factorización “Pull-up”

Page 20: Tema 3.3.1 Patrones: Façade y Template Method

Índice

♦ Patrón Façade♦ Patrón Template Method♦ Conclusiones

Page 21: Tema 3.3.1 Patrones: Façade y Template Method

Conclusiones

♦ Simplificar/reutilizar♦ Mejorar cohesión acoplamiento♦ Definición teórica del patrón no siempre

igual a su utilización

Page 22: Tema 3.3.1 Patrones: Façade y Template Method

¡Gracias!

Plantea tus sugerencias ydudas en el foro de la asignatura

Directorio: mailman/listinfo/isw2-distServidor: http://listas.us.es