Proyecto Método Plantilla PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 18

Universidad Mariano Gálvez de Guatemala

Facultad de Sistemas
Ing. Wilson Aguin

Documento Método Plantilla (Template Method)

Jorge Antonio Cujcuj Noj 2990-12-9901


Hugo Estuardo Gómez Gómez 2990-15-11619
Erick Alexander Juárez González 2990-16-22606
Victor Antonio Ramirez Hernández 2990-12-6242
Jonatan David Martínez Martínez 2990-12-8540
INTRODUCCIÓN
Como bien sabemos, el código duplicado es el gran enemigo del «código limpio».
Existe un amplio abanico de recursos para intentar eliminarlo. Algunos patrones de
diseño tienen como objetivo eliminar código duplicado.
En este pequeño proyecto intentaremos explicar cómo funciona el método template
y así poder hacer más legible el código para obtener buenos resultado a la hora de
generar cierta consulta.
OBJETIVO GENERAL

Es abstraer todo el comportamiento que comparten las entidades en una clase


(abstracta) de la que, posteriormente, extenderán dichas entidades. Esta superclase
definirá un método que contendrá el esqueleto de ese algoritmo común (método
plantilla o template method) y delegará determinada responsabilidad en las clases
hijas, mediante uno o varios métodos abstractos que deberán implementar, este
patrón nace con el objetivo de extender determinados comportamientos dentro de un
mismo algoritmo por parte de diferentes entidades. Es decir, diferentes entidades
tienen un comportamiento similar pero que difiere en determinados aspectos
puntuales en función de la entidad concreta.
OBJETIVOS ESPECÍFICOS

1. Cuando es necesario realizar un algoritmo que sea en muchas clases, pero


con pequeñas variaciones entre una y otra.

2. Permite que las subclases redefinan partes específicas del método.

3. Centraliza partes de un método que se definen en todos los subtipos de una


clase pero que siempre tiene una pequeña diferencia en cada subclase.

4. La creación de sistemas de plugins. Por definición este patrón garantiza la


existencia de distintos métodos en una clase que pueden ser sobrescritos por
un descendiente.

5. Proporcionar un método que permite que las subclases redefinan parte del
método sin rescribirlo.
VENTAJAS:
• Se puede reciclar el código fácilmente.

DESVENTAJAS:

• Puede provocar ambigüedad.


• Al llamar demasiadas veces los métodos abstractos, el AbstractClass dejaría
de ser superclase.
Ensayo
Jorge Antonio Cujcuj Noj
podemos definir Template Method es un patrón de diseño de comportamiento que
define el esqueleto de un algoritmo en la superclase, pero permite que las subclases
sobrescriban pasos del algoritmo sin cambiar su estructura y nos ayuda a
estructurar de una manera fácil el manejo de el ahorro de código para ubicar
características que se repiten dentro del código, métodos repetido o clases. Nos
ayuda a plasmar definidamente el código limpio y nos permite métodos abstractos
que extienden de una clase maestra que nos puedan ayudar para no repetir código
varias veces
En este método logramos entender el objetivo del método conocimiento y legibilidad
al poder entenderlo ya que nos ayuda con extraer proceso que ya hemos utilizado.
En este Método plantilla logramos entenderlo ya que nos ayuda con extraer proceso
que ya hemos utilizado y sobre escribirlos sin alterar los valores, por lo general se
duplican distintas partes de código, pero en este método nos ahorramos este trabajo
de repetir código innecesario. una Clase Abstracta declara métodos que actúan
como pasos de un algoritmo, así como el propio método plantilla que invoca estos
métodos en un orden específico. Los pasos pueden declararse abstractos o contar
con una implementación por defecto y una Clases Concretas pueden sobrescribir
todos los pasos, pero no el propio método plantilla
Ensayo
Jonatan David Martínez Martínez
Esta tarea nos ayudará a nosotros como estudiantes, aprender más acerca de los
patrones de diseño, en especial este tema que abarca del método Template.
Entonces, ¿Qué es un patrón de diseño? La respuesta es: son herramientas que
nos proporcionan solución a nuestros problemas, ejecutando y reciclando código.
Ahora que la respuesta es resumida, debemos saber un poco del Method Template.
Es una plantilla que nos permite crear subclases, manteniendo en orden la
arquitectura del sistema sin modificar las clases, también podemos reciclar el
código, usando una pequeña sobrecarga polimórfica.
Esta plantilla es uno de los patrones importantes que se utilizan en el framework por
la facilidad de uso.
ENSAYO
Erick Alexander Juárez González
Lo que dejo el trabajo de método plantilla es sobre la importancia de un código
limpio.
¿para nosotros que es un método plantilla? el método plantilla no es mas que nada
más que un diseñado para marcos, donde cada cual implementa las partes
invariables de la arquitectura de un ámbito.
Las razones por la que usaremos el método plantilla es que las clases que se
implementan tenga un comportamiento rondón.
La desventaja de este método plantilla es que a la hora de copiar o modificar un
objeto o una clase es que genera un código duplicado.
Ensayo
Victor Antonio Ramirez Hernández
En este ensayo podemos definir el método plantilla como una ayuda o estructura de
fácil manejo para ubicar características especiales que se repiten dentro del código
llámese procesos repetido o clases.
Este método nos ayuda a plasmar definidamente el código limpio que le llama para
poder maniobra y crear variables que nos puedan ayudar para no repetir código
varias veces
En este método logramos adquirir conocimiento y legibilidad al poder entenderlo ya
que nos ayuda con extraer proceso que ya hemos utilizado, Cuando se construyen
jerarquías de clases complejas para una aplicación, a menudo se duplican distintas
partes de código. esa situación no es deseable, porque la intención es reutilizar
tanto código como sea posible. La refactorización de código para que los métodos
comunes estén en una superclase es un paso en la dirección correcta. El problema
es que algunas veces una operación que ha sido refactorizada confía en la
información específica que solamente está disponible en una subclase. Debido a
esto, los desarrolladores a menudo deciden no refactorizar y aceptar la presencia
de código duplicado en distintas clases.
Ensayo
Hugo Estuardo Gómez Gómez.

En el ensayo presente definimos que el patrón de diseño témplate método, nos


ayuda a tener un desarrollo más limpio y sin duplicidad de código.
Este patrón de diseño tiene la característica que el esqueleto de nuestro algoritmo
principal no sufrirá cambios bruscos ya que las subclases derivadas de la clase
principal darán su propio modo de operación.
Logramos adquirir como equipo conocimiento y experiencia para poder comprender
este patrón de diseño, ya que nos ayuda a no duplicar código, tener código más
entendible para todo el equipo y tener código más limpio, nos ayuda a ya no copiar
y pegar código que ya tenemos realizado y poderlo reutilizar.
TEMPLATE METHOD
También llamado: Método plantilla
Template Method es un patrón de diseño de comportamiento que define el
esqueleto de un algoritmo en la superclase pero permite que las subclases
sobrescriban pasos del algoritmo sin cambiar su estructura.

APLICABILIDAD

1. Utiliza el patrón Template Method cuando quieras permitir a tus clientes que
extiendan únicamente pasos particulares de un algoritmo, pero no todo el
algoritmo o su estructura.

2. El patrón Template Method te permite convertir un algoritmo monolítico en


una serie de pasos individuales que se pueden extender fácilmente con
subclases, manteniendo intacta la estructura definida en una superclase.

3. Utiliza el patrón cuando tengas muchas clases que contengan algoritmos casi
idénticos, pero con algunas diferencias mínimas. Como resultado, puede que
tengas que modificar todas las clases cuando el algoritmo cambie.

4. Cuando conviertes un algoritmo así en un método plantilla, también puedes


elevar los pasos con implementaciones similares a una superclase,
eliminando la duplicación del código. El código que varía entre subclases
puede permanecer en las subclases.

CÓMO IMPLEMENTARLO

1. Analiza el algoritmo objetivo para ver si puedes dividirlo en pasos. Considera


qué pasos son comunes a todas las subclases y cuáles siempre serán
únicos.

2. Crea la clase base abstracta y declara el método plantilla y un grupo de


métodos abstractos que representen los pasos del algoritmo. Perfila la
estructura del algoritmo en el método plantilla ejecutando los pasos
correspondientes. Considera declarar el método plantilla como final para
evitar que las subclases lo sobrescriban.
3. No hay problema en que todos los pasos acaben siendo abstractos. Sin
embargo, a algunos pasos les vendría bien tener una implementación por
defecto. Las subclases no tienen que implementar esos métodos.

4. Piensa en añadir ganchos entre los pasos cruciales del algoritmo.

5. Para cada variación del algoritmo, crea una nueva subclase concreta.
Ésta debe implementar todos los pasos abstractos, pero
también puede sobrescribir algunos de los opcionales.

PROS Y CONTRAS

1. Puedes permitir a los clientes que sobrescriban tan solo ciertas partes de un
algoritmo grande, para que les afecten menos los cambios que tienen lugar
en otras partes del algoritmo

2. Puedes colocar el código duplicado dentro de una superclase.

3. Algunos clientes pueden verse limitados por el esqueleto proporcionado de


un algoritmo.

4. Puede que violes el principio de sustitución de Liskov suprimiendo una


implementación por defecto de un paso a través de una subclase.

5. Los métodos plantilla tienden a ser más difíciles de mantener cuantos más
pasos tengan.

RELACIONES CON OTROS PATRONES

1. Factory Method es una especialización del Template Method. Al mismo


tiempo, un Factory Method puede servir como paso de un gran Template
Method.

2. Template Method se basa en la herencia: te permite alterar partes de un


algoritmo extendiendo esas partes en subclases. Strategy se basa en la
composición: puedes alterar partes del comportamiento del objeto
suministrándole distintas estrategias que se correspondan con ese
comportamiento. Template Method trabaja al nivel de la clase, por lo que es
estático. Strategy trabaja al nivel del objeto, permitiéndote cambiar los
comportamientos durante el tiempo de ejecución.
Código del proyecto:

1. Clase maestra ProamericaCuentaBancaria:


package ClasesCodigo;

/**
* @author jorge
* @version 1
*/
public abstract class ProamericaCuentaBancaria {

/**
* variables declaradas como privadas
*/
private String NoCuenta;
private static float SaldoInicial;

/**
* @return the NoCuenta
*/
public String getNoCuenta() {
return NoCuenta;
}

/**
* @param NoCuenta the NoCuenta to set
*/
public void setNoCuenta(String NoCuenta) {
this.NoCuenta = NoCuenta;
}

/**
* @return the SaldoInicial
*/
public float getSaldoInicial() {
return SaldoInicial;
}

/**
* @param SaldoInicial the SaldoInicial to set
* @return
*/
public float setSaldoInicial(float SaldoInicial) {
return this.SaldoInicial = SaldoInicial;
}

/**
*
* @param Extra
* @return
*/
public float deposito(float Extra){
this.SaldoInicial = this.SaldoInicial + Extra;
return this.SaldoInicial;
}

/**
*
* @param Retiro
* @return
*/
public float Retiros(float Retiro){
if(Retiro <= this.SaldoInicial){
this.SaldoInicial= this.SaldoInicial - Retiro;
}else{
this.SaldoInicial= this.SaldoInicial;
}
return this.SaldoInicial;
}

/**
*
*
*/
public abstract String mensajes();

/**
*
* @param NoCuenta
* @param Monto
* @param Opcion
*/
public void Operaciones(String NoCuenta, float Monto, int Opcion){
setNoCuenta(NoCuenta);
switch(Opcion){
case 1:
deposito(Monto);
break;
case 2:
Retiros(Monto);
break;
default:
}
}

2. Clase Ventanilla
package ClasesCodigo;

import Vistas.VentanillaVista;

/**
*
* @author jorge
*/
public class Ventanilla extends ProamericaCuentaBancaria{

public Ventanilla() {
}

public Ventanilla(String NoCuenta, float monto, int Opcion){


Operaciones(NoCuenta, monto, Opcion);
}

public String mensajes(){


return "Bienvenido a ventanilla, en que le podemos ayudar?";
}

3. Clase CajeroAutomatico
package ClasesCodigo;

/**
*
* @author jorge
*/
public class CajeroAutomatico extends ProamericaCuentaBancaria{

/**
*
*/
public CajeroAutomatico(){
}
/**
*
* @param NoCuenta
* @param Monto
* @param Opcion
*/
public CajeroAutomatico(String NoCuenta, float Monto, int Opcion){
Operaciones(NoCuenta, Monto, Opcion);
}

@Override
public String mensajes() {
return "Bienvenido al cajero, Por favor ingrese los datos...";
}

4. Clase Autobanco
package ClasesCodigo;

/**
*
* @author jorge
*/
public class AutoBanco extends ProamericaCuentaBancaria{

/**
*
*/
public AutoBanco(){
}

/**
*
* @param NoCuenta
* @param Monto
* @param Opcion
*/
public AutoBanco(String NoCuenta, float Monto, int Opcion){
Operaciones(NoCuenta, Monto, Opcion);
}

@Override
public String mensajes() {
return "Bienvenido al AutoBanco, en que le podemos ayudar?";
}
}

CONCLUSIONES

1. Este patrón de diseño nos ayuda a tener un desarrollo más limpio y


entendible para el equipo de desarrollo y proporcionar una lógica más visible
y contar con un sistema más rápido para verificar cualquier consulta.

2. Logramos observar que con este patrón de diseño es mucho más fácil
localizar errores y poder hacer modificaciones al código fácilmente

3. En este patrón de diseño nos ayuda a combatir el código duplicado en las


nuestras soluciones de nuestro Código
RECOMENDACIONES

1. Usar este método nos ayuda a que nuestro código sea más legible y
ordenado dentro del esqueleto de este.

2. Ayuda a optimizar las soluciones para evitar la duplicidad de código y


procesos dentro de nuestro código.

3. Permite como implementa el comportamiento real de un algoritmo con un


código limpio y ordenado y poder tener acceso a cualquier actualización de
datos.

También podría gustarte