User Tools

Site Tools


wiki:pdd_11

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
wiki:pdd_11 [2025/04/10 12:51] adminwiki:pdd_11 [2025/04/10 12:57] (current) admin
Line 7: Line 7:
  
 **Solución**: El patrón de diseño Template Method resuelve el problema planteado. Este especifica cómo implementar el esqueleto de un algoritmo en una clase abstracta X, pero dejando pendientes algunos pasos —o métodos abstractos—. Estos métodos serán implementados en las subclases de X. En resumen, un Template Method permite que las subclases personalicen un algoritmo, sin cambiar su estructura general implementada en la clase base. **Solución**: El patrón de diseño Template Method resuelve el problema planteado. Este especifica cómo implementar el esqueleto de un algoritmo en una clase abstracta X, pero dejando pendientes algunos pasos —o métodos abstractos—. Estos métodos serán implementados en las subclases de X. En resumen, un Template Method permite que las subclases personalicen un algoritmo, sin cambiar su estructura general implementada en la clase base.
 +
 +Un ejemplo de Template Method para nuestro contexto y problema se muestra a continuación:
 +
 +<code java>
 +
 +abstract class Funcionario {
 +
 +  double salario;
 +  ...
 +  abstract double calcDescuentosAFP();
 +  abstract double calcDescuentosPlanSalud();
 +  abstract double calcOtrosDescuentos();
 +
 +  public double calcSalarioLiquido() { // template method
 +    double afp= calcDescuentosAFP();
 +    double salud= calcDescontosPlanSalud();
 +    double otros = calcOtrosDescuentos();
 +    return salario - afp- saude - otros;
 +  }
 +}
 +</code>
 +
 +En este ejemplo, ''calcSalarioLiquido'' es un método template para el cálculo del salario de los empleados. Establece que debemos calcular tres descuentos: para la seguridad social (AFP), para el plan de salud del empleado y otros descuentos. Después de esto, el salario neto es el salario del empleado menos esos tres descuentos. Sin embargo, en la clase Funcionario, aún no sabemos cómo calcular los descuentos, ya que varían según el tipo de empleado (público o CLT). Por lo tanto, se crean métodos abstractos para representar cada uno de esos pasos en la rutina de cálculo de salarios. Como son abstractos, la clase ''Funcionario'' también se declara como abstracta. Como el lector ya debe haber notado, las subclases de Funcionario —como ''FuncionarioPublico'' y ''FuncionarioCLT''— heredarán el método ''calcSalarioLiquido'', que no necesitará ser modificado. Sin embargo, será responsabilidad de las subclases implementar los tres pasos (métodos) abstractos: ''calcDescontosPrevidencia'', ''calcDescontosPlanoSaude'' y ''calcOutrosDescontos''.
 +
 +Los métodos template permiten que el código antiguo llame al código nuevo. En el ejemplo, la clase ''Funcionario'' probablemente fue implementada antes que ''FuncionarioPublico'' y ''FuncionarioCLT''. Por lo tanto, decimos que Funcionario es más antigua que sus subclases. A pesar de esto, Funcionario incluye un método que llamará código nuevo, implementado en las subclases. Este recurso de los sistemas orientados a objetos se llama inversión de control. Es fundamental, por ejemplo, para la implementación de marcos de trabajo (frameworks), es decir, aplicaciones semi-listas que, antes de ser utilizadas, deben ser personalizadas por sus clientes. Aunque no es el único instrumento disponible para este fin, los métodos template constituyen una alternativa interesante para que un cliente implemente el código faltante en un marco de trabajo.
 +
wiki/pdd_11.1744303890.txt.gz · Last modified: 2025/04/10 12:51 by admin