Skip to content

Liskov Substitution Principle (LSP) #5

Description

@JorgeAlvarez05

La solución propuesta consiste en eliminar las verificaciones explícitas mediante el uso de instanceof SeniorCitizen y reemplazarlas por un comportamiento polimórfico definido en la jerarquía de clases.

Para ello, se incorpora el método isSeniorCitizen() dentro de la clase base Passenger, retornando false por defecto. Posteriormente, la clase SeniorCitizen sobrescribe dicho método retornando true. De esta manera, cualquier componente del sistema puede determinar si un pasajero pertenece a la categoría de ciudadano mayor utilizando únicamente la abstracción Passenger, sin depender del tipo concreto de la subclase.

Como se observa en el diagrama UML de la solución, la responsabilidad de identificar ciudadanos mayores queda encapsulada dentro de la propia jerarquía de clases, permitiendo que los objetos SeniorCitizen puedan sustituir a los objetos Passenger sin alterar el comportamiento esperado del sistema.

**Beneficios de la Propuesta

Mayor Uso del Polimorfismo: El sistema aprovecha las capacidades de la programación orientada a objetos evitando verificaciones explícitas de tipos.

Menor Acoplamiento: Las clases consumidoras dejan de depender de implementaciones concretas y trabajan únicamente con la abstracción Passenger.

Mayor Extensibilidad: Nuevas subclases de Passenger pueden incorporarse fácilmente manteniendo un comportamiento consistente.

Mejor Mantenibilidad: Se reduce la necesidad de modificar código existente cuando aparecen nuevas categorías de pasajeros.

Cumplimiento del Principio LSP: Los objetos de la clase SeniorCitizen pueden sustituir a los objetos de la clase Passenger sin afectar el funcionamiento correcto del sistema, respetando el principio de sustitución de Liskov.

Image

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions