No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

15 Días
23 Hrs
11 Min
57 Seg

Aplicando el principio de sustitución de Liskov

10/16
Recursos

Aportes 7

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Buenas, en la clase EmployeeFullTime es necesario inicializar la propiedad de ExtraHours en el constructor de ExployeeFullTime.

namespace Liskov
{
    public class EmployeeFullTime : Employee
    {
        public int ExtraHours {get;set;}
        public EmployeeFullTime(string fullname, int hoursWorked, int extrahours) : base(fullname, hoursWorked)
        {
            ExtraHours = extrahours;
        }

        public override decimal CalculateSalary()
        {
            decimal hourValue = 50;
            return hourValue * (HoursWorked + ExtraHours);
        }
    }
}

Desde mi perspectiva esta curso vale oro.

Chat GPT
¡Claro! El Principio de Sustitución de Liskov (Liskov Substitution Principle, LSP) es uno de los cinco principios SOLID y fue propuesto por Barbara Liskov en 1987. Este principio se centra en la relación entre una clase base (o supertipo) y sus clases derivadas (o subtipos). La idea fundamental es que los objetos de una clase derivada deben poder ser usados en lugar de objetos de la clase base sin afectar la corrección del programa.

En términos más simples, si tienes una clase base (supertipo) y una clase derivada (subtipo), deberías poder sustituir una instancia de la clase base con una instancia de la clase derivada sin que el programa deje de funcionar correctamente.

Aquí hay una explicación más detallada:

  1. Relación de herencia:

    • Imagina que tienes una clase base llamada Figura y una clase derivada llamada Círculo. Según el LSP, deberías poder utilizar un objeto de tipo Círculo en cualquier lugar donde se espera un objeto de tipo Figura, ya que Círculo es un subtipo de Figura.
  2. Comportamiento consistente:

    • Las clases derivadas deben comportarse de manera consistente con la clase base. Esto significa que los métodos de la clase base deben poder ser invocados en instancias de la clase derivada, y el resultado debería ser coherente con lo que se espera de la clase base.
  3. No alterar la invariante del tipo:

    • La invariante del tipo es cualquier propiedad que debe mantenerse verdadera para todas las instancias de un tipo. El LSP establece que las clases derivadas no deben alterar la invariante del tipo establecida por la clase base.
  4. Pre y Post condiciones:

    • Cuando un método de la clase base tiene ciertas precondiciones (condiciones que deben ser verdaderas antes de que se llame al método) y postcondiciones (condiciones que deben ser verdaderas después de que el método se haya ejecutado), estas condiciones también deben mantenerse en las clases derivadas.

En resumen, el Principio de Sustitución de Liskov busca garantizar que las clases derivadas extiendan o especialicen el comportamiento de la clase base sin romper la lógica del programa. Esto facilita la creación de sistemas más flexibles y extensibles, ya que las nuevas clases pueden ser introducidas y utilizadas sin afectar el código existente que trabaja con la clase base.

Solo como una opinión, me gustaría que el código se mostrara multilínea para que se evite el uso del scroll horizontal y los alumnos podamos ver en una sola pantalla toda la línea del código

En el foreach del archivo de Program.cs, estaría bueno cambiar el nombre del "item" por "itemEmployee" para que el nombre sea más descriptivo

También podemos pasar la propiedad HourValue a la clase Employee, agregarla al constructor de esa clase abstracta, y cada subclase pasarlo directo sin necesidad que esta subclase lo pida en su constructor.

public Employee(string fullname, int hoursWorked, int hourValue)
        {
            Fullname = fullname;
            HoursWorked = hoursWorked;
            HourValue = hourValue;
        }
public EmployeeFullTime(string fullname, int hoursWorked, int extraHours) : base(fullname, hoursWorked, 50)
        {
            this.ExtraHours = extraHours;
        }
Este principio nunca me habia quedado del todo claro pero con esta aplicacion me funciono bastante bien y ahora entiendo la funcionalidad del principio