Skip to content

Instantly share code, notes, and snippets.

@JuanjoFuchs
Created June 8, 2012 15:41
Show Gist options
  • Save JuanjoFuchs/2896236 to your computer and use it in GitHub Desktop.
Save JuanjoFuchs/2896236 to your computer and use it in GitHub Desktop.
Ejemplo del principio Abierto Cerrado (OCP)
using System.Collections.Generic;
namespace OCP_Empleados.Refactorizado
{
public abstract class Empleado
{
public string Nombre { get; set; }
public double Sueldo { get; set; }
public double Bono { get; set; }
public abstract void CalcularBono();
}
public class Programador : Empleado
{
public override void CalcularBono()
{
Bono = Sueldo * 2;
}
}
public class Gerente : Empleado
{
public override void CalcularBono()
{
Bono = Sueldo * 15;
}
}
public class EmpleadosServicio
{
public List<Empleado> Empleados { get; set; }
public void CalcularBonos()
{
foreach (var empleado in Empleados)
{
empleado.CalcularBono();
}
}
}
}
using System.Collections.Generic;
namespace OCP_Empleados.SinRefactorizar
{
public enum TipoEmpleado
{
Programador,
Gerente
}
public class Empleado
{
public string Nombre { get; set; }
public double Sueldo { get; set; }
public double Bono { get; set; }
public TipoEmpleado Tipo { get; set; }
}
public class Gerente : Empleado
{
}
public class Programador : Empleado
{
}
public class EmpleadosServicio
{
public List<Empleado> Empleados { get; set; }
public void CalcularBonos()
{
foreach (var empleado in Empleados)
{
double bono = 0;
switch (empleado.Tipo)
{
case TipoEmpleado.Programador:
bono = empleado.Sueldo * 2;
break;
case TipoEmpleado.Gerente:
bono = empleado.Sueldo * 10;
break;
// Estamos contratando
// analistas funcionales!!
}
empleado.Bono = bono;
}
}
public void CalcularBonos2()
{
foreach (var empleado in Empleados)
{
if (empleado is Programador)
{
empleado.Bono = empleado.Sueldo * 2;
}
else if (empleado is Gerente)
{
empleado.Bono = empleado.Sueldo * 10;
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment