README excerpt
# Trabajo Práctico Final
Programación Orientada a Objetos

7. Fecha de entrega: 08/03/2024.
8. Integrantes:
- Benjamín Morales
- Kevin Quintero
- Índice:
[Introducción:](#introducción)
[Objetivo del Informe](#objetivo-del-informe)
[Enunciado: Empresa de Turismo.](#enunciado-empresa-de-turismo)
[Resolución:](#resolución)
[Diagrama de clases:](#diagrama-de-clases)
[Diagramas de secuencia principales:](#diagramas-de-secuencia-principales)
[Generar un contrato y todo lo que implica:](#generar-un-contrato-y-todo-lo-que-implica)
[Verificar un viaje entre dos fechas:](#verificar-un-viaje-entre-dos-fechas)
[Explicación de cada clase del sistema](#explicacion-de-cada-clase-del-sistema)
[1) Clase EmpresaTurismo:](#1-clase-empresa-turismo)
[2) Clase Cliente:](#2-clase-cliente)
[3) Clase DatosCliente:](#3-clase-datos-cliente)
[4) Clase ViajeroFrecuente:](#4-clase-viajero-frecuente)
[5) Clase Viaje:](#5-claseviaje)
[6) Clase ViajeEspecial:](#6-clase-viaje-especial)
[7) Clase ViajeOrganizado:](#7-clase-viaje-organizado)
[8) Clase FechaElegible:](#8-clase-fecha-elegible)
[9) Clase Etapa:](#9-clase-etapa)
[10) Clase Excursion:](#10-clase-excursion)
[11) Clase ExcursiónElegida:](#11-clase-excursion-elegida)
[12) Clase Contrato:](#12-clase-contrato)
[13) Clase ContratoFlexible:](#13-clase-contrato-flexible)
[14) Clase Cuota:](#14-clase-cuota)
[Guía rápida de usuario - Interfaz gráfica:](#guia-rapida-de-usuario-interfaz-grafica)
[Conclusión:](#conclusion)
# Introducción:
- El presente informe busca ofrecer una explicación detallada del proceso de desarrollo de la aplicación solicitada. Desde la comprensión inicial del enunciado hasta la implementación final de la interfaz gráfica.
## Objetivo del Informe
- El objetivo es proporcionar una guía paso a paso, desde la conceptualización hasta la materialización de la aplicación requerida. Se utilizarán diversas herramientas y metodologías, aprendidas durante el transcurso de la materia, como diagramas UML, diagramas de clase y diagramas de secuencia, para abordar cada fase del proceso con precisión y claridad.
-
# Enunciado: Empresa de Turismo.
Una empresa de turismo ofrece a sus clientes viajes a distintos lugares del mundo. Mantiene en su lista de clientes a todos los que alguna vez han contratado un viaje en la empresa. De cada cliente mantiene los siguientes datos: Apellido, dni, ciudad en que vive y datos de contacto.
Todos los viajes se identifican con un nombre y tienen asociado un costo por persona y el valor correspondiente a impuestos.
La empresa ofrece distintos tipos de viajes:
- **“viajes especiales”**, que se contratan para alguna actividad particular (por ejemplo “viaje de compras”, “asistencia al recital de ... “, etc). En este caso se registra, además del “nombre” del viaje, la ciudad, fecha de salida y, fecha de regreso (Por ejemplo viaje “Concierto de Los Pericos”, en Córdoba, salida el 19/8, regreso el 22/8, ...). También tienen disponibilidad, que se irá actualizando a medida que el viaje sea contratado.
- **“viajes organizados”**. Estos viajes ofrecen varias opciones de fecha de salida, y el cupo correspondiente a cada una. Además se tiene la cantidad de días de duración del viaje y un “plan de viaje” en el que se indican todas las actividades incorporadas en el mismo. El plan de viaje se presenta a partir de las “etapas” que conforman el viaje. Para cada etapa se tiene información del día de llegada, cantidad de días que se permanecerá en la ciudad, hotel, tipo de pensión, lista de actividades (por ejemplo: mañana libre, excursion 1, excursion 2)
- Por ejemplo: Turquía y Grecia, 20 días, para 30 personas, salidas 15/8, 20/9, 2/11.
- etapas: (... día 3- Estambul- llegada 16.50 hs.- Actividades /visita a la basílica de Santa Sofía, visita al Palacio de Topkapi .../)... (dia15- Santorini - Actividades /recorrido de la isla/) ...(día 20 - Buenos Aires).
La empresa tiene “contratos” con sus clientes. Cada vez que un cliente contrata un paquete turístico se genera un Contrato, que tiene un número de contrato y fecha de contrato, viaje o paquete contratado, fecha seleccionada para el viaje y cantidad de personas que viajarán. Los contratos pueden pagarse en cuotas. Para ello se tiene la cantidad de cuotas del contrato y la fecha del próximo vencimiento. Los vencimientos son cada 30 días.
Existe un tipo de contrato “flexible” que tiene las siguientes características: a partir del pago de un plus es posible reprogramar el viaje para una nueva fecha. El valor del plus varía según el viaje, dado que hay viajes y fechas más solicitadas que otras. En caso de no ser posible el cambio se da la opción de cancelar la reserva y el reembolso al cliente se dará según lo siguiente:
- hasta 3 meses antes del viaje el 75% del valor total.
- entre 2 y 3 meses antes del viaje, el 50% del valor total.
- menos de 2 meses el 25% del valor total.
Para los viajes organizados se ofrecen excursiones opcionales cuyo costo NO ESTÁ considerado en el costo base del viaje por persona. Las excursiones opcionales pueden agregarse hasta 1 semana antes del viaje, y pueden contratarse para una cantidad de personas menor a la del contrato.
Es decir, si el contrato considera 5 personas, puede contratarse una excursión OP1 para 3 personas y otra excursión OP2 para 1 persona.
De cada cliente se mantienen todos los contratos realizados: los viejos y los actuales (si hubiera). Se registra cuáles son las preferencias del cliente para poder enviarle información de nuevos paquetes turísticos. Los clientes que son viajeros frecuentes (aquellos que realizan al menos un viaje organizado por año, con la empresa) participan de un sistema de millas de la empresa. Por cada nuevo contrato efectivizado (viaje que realizan) suman millas. Esas millas pueden ser utilizadas para cancelar el 10% de un contrato.
En el caso de los clientes “Viajero Frecuente” cuando se realiza una cancelación el reembolso se hace en millas.
En cualquier caso, un contrato debe estar pagado completamente 1 semana antes de la fecha del viaje asociado al contrato.
Fin del enunciado.
# Resolución:
## <span style="text - decoration: underline;">Diagrama de clases</span>:

Links a los diagramas de clase y de secuencia (también se sube a PEDCO el archivo .drawio para abrirlo en dicha página):
[draw.io](https://app.diagrams.net/?mode=google#G1Sp5r-MM9s-xKqSzJf390D0CYKn6UxwoT)
[https://drive.google.com/file/d/1Sp5r-MM9s-xKqSzJf390D0CYKn6UxwoT/view](https://drive.google.com/file/d/1Sp5r-MM9s-xKqSzJf390D0CYKn6UxwoT/view)
[https://app.diagrams.net/?mode=google#G1Sp5r-MM9s-xKqSzJf390D0CYKn6UxwoT](https://app.diagrams.net/?mode=google#G1Sp5r-MM9s-xKqSzJf390D0CYKn6UxwoT)
## <span style="text - decoration: underline;">Diagramas de secuencia principales</span>:
### Generar un contrato y todo lo que implica:





Los mensajes de buscarCliente y de verificarDisponibilidad se encuentran en el archivo del draw.io.
### Verificar un viaje entre dos fechas:


## Explicación de cada clase del sistema
1. 1) Clase EmpresaTurismo:
Es la clase “principal” o del sistema.
**Relaciones:**
- Relación uno a muchos con la clase Cliente (porque el enunciado dice que se mantiene una lista de clientes que ya han realizado al menos un viaje con la empresa).
- Relación uno a muchos con la clase Viaje (porque mínimo debe haber un viaje para ofrecer a los clientes).
**Variables de instancia:** nombre, colClientes (rel), colViajes (rel).
- 2) Clase Cliente:
**Relaciones:**
- Relación uno a muchos con la clase Contrato (es mínimo uno, dado que se registran los clientes que han contratado al menos un viaje).
- Relación uno a uno con la clase DatosCliente.
**Variables de instancia:** datosCliente (rel), colContratos (rel), preferencias.
La variable colContratos es una OrderedCollection de contratos y datosCliente una referencia a una instancia de DatosCliente.
- 3) Clase DatosCliente:
**Variables de instancia:** apellido, dni (sería su identificación), ciudad, teléfono, email.
- 4) Clase ViajeroFrecuente:
- Subclase de Cliente. Hereda las relaciones y atributos de su superclase.
**Relaciones:**
- Iguales a la de la clase Cliente.
**Variables de instancia:** cantMillas.
**Variables de clase:** ValorMillas.
Es una clase para diferenciar a un cliente normal de un viajero frecuente (cliente que cuenta con al menos un viaje organizado en el último año), este tipo de cliente participa de un sistema de millas de la empresa, teniendo la posibilidad de pagar un viaje con las millas obtenidas mediante la efectivización de los contratos, entre otras.
### 5) Clase Viaje:
Es una clase abstracta, define los atributos y comportamiento común para sus subclases ViajeEspecial y ViajeOrganizado.
**Relaciones:**
- Relación de herencia con las subclases ViajeEspecial y ViajeOrganizado.
**Variables de instancia:** nombre (id), costoPorPersona, valorImp.
**Variables de clase:** no tiene.
**Mensaje de clase**: Posee un mensaje llamado calcularPlus. Este método calcula un "plus" en el monto del viaje basado en la fecha del viaje, el monto original y la cantidad de destinos. Inicialmente, se establece el montoPlus como el 2% del monto original multiplicado por la cantidad de destinos. Luego, se ajusta este monto según si la fecha del viaje cae entre marzo y noviembre, agregando un 2%, o fuera de este rango, agregando un 5%. El resultado final es el monto total, incluyendo el "plus". \
Este método se utiliza al generar un contrato