La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Template Method Patrón de comportamiento. Propósito Definir el esqueleto de un algoritmo en una operación, dejando algunos pasos para las subclases. Permite.

Presentaciones similares


Presentación del tema: "Template Method Patrón de comportamiento. Propósito Definir el esqueleto de un algoritmo en una operación, dejando algunos pasos para las subclases. Permite."— Transcripción de la presentación:

1 Template Method Patrón de comportamiento

2 Propósito Definir el esqueleto de un algoritmo en una operación, dejando algunos pasos para las subclases. Permite a las subclases redefinir ciertos pasos de un algoritmo sin cambiar la estructura del mismo.

3 Motivación Supongamos que tenemos una aplicación definida por dos clases, la clase “Application” y la clase “Document”. La clase “Application” se ocupa de abrir documentos almacenados en un formato externo (un fichero). Un objeto de la clase “Document”, representa la información en un documento, una vez que se ha leído del fichero.

4 Motivación La operación OpenDocument() permite abrir y leer un documento. Se trata de un template method. Define su estructura mediante operaciones abstractas, las cuales serán implementadas por las clases hijas para determinar el comportamiento específico de cada una de ellas. void Application::OpenDocument(const char* name){ if (!CanOpenDocument(name)) { return; } Document* doc=DoCreateDocument(); if (doc){ _docs -> AddDocument(doc); AboutToOpenDocument(doc); doc -> Open(); doc -> Read(); } }

5 Aplicabilidad 1. Se usa para implementar partes invariantes de un algoritmo, y dejar a las subclases implementar el comportamiento que puede variar. 2. Cuando tenemos un comportamiento común en diferentes clases, puede ser refactorizado para evitar la duplicación de código. Para ello se identifican las partes diferentes del código, se separan mediante nuevas operaciones y se reemplazan con un método que hace uso de ellas. 3. Para controlar la redefinición de operaciones en las subclases, es posible definir un método Template que llama a una operación “Hook” dentro de la operación que queremos evitar su redefinición, permitiendo únicamente la extensión de la operación “Hook”.

6 Aplicabilidad Una subclase puede heredar el comportamiento de una clase padre redefiniendo la operación y llamando a la operación del padre explícitamente: void ClaseDerivada::Operacion(){ ClasePadre::Operacion() // Comportamiento añadido. }

7 Aplicabilidad Podemos transformar dicha operación con un método Template, para dar el control a la clase padre sobre sus subclases. La idea consiste en llamar a una operación auxiliar desde la operación de la clase padre, las subclases deben redefinir esta operación (donde es una operación vacía en la clase padre) para añadir su propio comportamiento. void ClasePadre::Operacion(){ //Comportamiento de la clase padre OperacionAux(); } void ClasePadre::OperacionAux(){} void ClaseHija::OperacionAux(){ //Comportamiento añadido de la clase hija. }

8 Composición Clase abstracta (Aplicación)  Define las operaciones primitivas abstractas que suponen las partes variantes, obligando a las subclases a implementarlas.  Implementa métodos Template definiendo el esqueleto de un algoritmo. Los métodos pueden llamar tanto a las operaciones primitivas, como a cualquier otro tipo de operación. Clase concreta (Mi aplicación)  Implementa las operaciones primitivas para determinar el comportamiento específico de la clase concreta.

9 Estructura

10 Consejos de implementación En C++. Las operaciones primitivas pueden definirse como protegidas, permitiendo a las clases hijas su implementación. Tendrán que usarse únicamente dentro del método Template, el cual no debería ser redefinido, por lo que nunca se declarará como virtual. Las operaciones primitivas que obligatoriamente hay que definir, se declaran como virtuales puras. Minimizar las operaciones primitivas. Es importante que el número de operaciones primitivas sea pequeño, cuantas mas operaciones haya que definir, mas tedioso será el trabajo que conlleva crear nuevas clases. Convenios de nombres. Se debe poder diferenciar las operaciones que podrían ser redefinidas con las que tienen que ser definidas, por ejemplo añadiendo un prefijo a sus nombres.

11 Ejemplo El ejemplo muestra como una clase padre define la parte invariante del código y las clases hijas la parte relativa a su comportamiento específico. void View::Display(){ SetFocus(); DoDisplay(); ResetFocus(); } Void View::DoDisplay(){} void MyView::DoDisplay(){ //render the view’s contents }


Descargar ppt "Template Method Patrón de comportamiento. Propósito Definir el esqueleto de un algoritmo en una operación, dejando algunos pasos para las subclases. Permite."

Presentaciones similares


Anuncios Google