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.

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.