Ejercicios Clases Kotlin

Descargar estos ejercicios

Ejercicio 1

Composición: Vehículo y Motor

Implementa una relación de composición entre las clases Vehiculo y Motor. El motor es parte integral del vehículo y no puede existir sin él.

Ejercicio 1: Composición Vehículo-Motor

Creando vehículo con motor integrado...

Vehículo: Toyota Corolla
Motor: 120 CV - Estado: Apagado

Arrancando el vehículo...

Vehículo: Toyota Corolla  
Motor: 120 CV - Estado: Encendido 

Presiona cualquier tecla para salir...

Vehiculo-marca: string {readonly}-modelo: string {readonly}+Vehiculo(marca: string, modelo: string, potencia: int)+GetMarca(): string+GetModelo(): string+Arranca(): void+ACadena(): stringMotor-potencia: int {readonly}-encendido: bool+Motor(potencia: int)+GetPotencia(): int+GetEncendido(): bool+SetEncendido(encendido: bool): void+Enciende(): void+Apaga(): void+EstaEncendido(): bool+ACadena(): stringtiene

Requisitos:

Ejercicio 2

data class como Value Objects

Implementa un sistema para gestionar pisos de alquiler usando una data class con un enumerado definido dentro de la propia clase. El objetivo es demostrar cómo modificar una o dos propiedades con copy(...) manteniendo el resto intacto.

Ejercicio 2: Piso de alquiler con data class y enum interno

=== DATA CLASS PisoAlquiler ===
Creando piso base...
Piso original: Piso #101 en Calle Mayor 12 | ESTUDIO | 850.0€/mes | Estado: Disponible

--- Modificando con copy(...) ---
Piso con nuevo precio: Piso #101 en Calle Mayor 12, 3A | ESTUDIO  | 920.0€/mes | Estado: Disponible
Piso actualizado (tipo y alquilado): Piso #101 en Calle Mayor 12, 3A | ATICO | 920.0€/mes | Estado: Alquilado

--- Tipo de inmueble ---
ESTUDIO como [Microestudio, Ideal para una persona]
PISO como [Apartamento peque�o, Perfecto para parejas]
DUPLEX como [Dos plantas, M�s espacio para familias]
ATICO como [Vistas panor�micas, Terraza grande]

Requisitos:

Ayuda

La idea es que un objeto PisoAlquiler se convierta en otra versión distinta sin cambiar el original, usando copy(...) cuando quieras actualizar uno o dos campos como el precio y el estado de disponibilidad.

Ejercicio 3

Patrón Sum Type: Resultado de Pago

Estás desarrollando el módulo de cobros de una tienda online. Dependiendo del monto de la compra y del estado del sistema, un pago puede tener tres resultados posibles, y cada uno lleva información diferente.

Debes implementar el patrón Sum Type para modelar el resultado de una transacción y un objeto que procese dichos pagos.

Especificaciones:

  1. Crea una sealed interface llamada ResultadoPago.

  2. Definir las Variantes (Los Casos): Crea tres data classes anidadas que implementen ResultadoPago:

    • Aprobado: Debe contener un UUID codigoTransaccion.
    • Rechazado: Debe contener un String motivo.
    • EnRevision: (Para montos sospechosos) Debe contener un Int nivelRiesgo (ej. de 1 a 5).
  3. Crea un object llamado PasarelaDePago con la función: fun procesar(monto: BigDecimal): ResultadoPago

    Implementa la siguiente lógica simulada:

    • Si el monto es menor a cero: Retorna Rechazado con motivo "Monto inválido".
    • Si el monto es mayor a 5000: Retorna EnRevision con nivel de riesgo 5.
    • Si el monto es mayor a 1000: Retorna EnRevision con nivel de riesgo 1.
    • En cualquier otro caso: Retorna Aprobado con un identificador generado aleatoriamente (UUID.randomUUID()).
  4. En la función main:

    • Crea una lista inmutable (listOf) de montos de prueba (BigDecimal): -50, 100, 2500 y 6000.

    • Itera sobre la lista procesando cada pago con PasarelaDePago.procesar(monto).

    • Utiliza una expresión when exhaustiva (Pattern Matching / Smart Casts) sobre el resultado para formatear e imprimir un mensaje en consola según el tipo, accediendo directamente a sus propiedades:

      • ResultadoPago.Aprobado: "[OK] Pago exitoso. ID: ${resultado.codigoTransaccion}"
      • ResultadoPago.Rechazado: "[X] Error en el pago. Motivo: ${resultado.motivo}"
      • ResultadoPago.EnRevision: "[?] El pago requiere auditoría. Riesgo: ${resultado.nivelRiesgo}"
    • Muestra por consola el monto formateado en moneda junto con el mensaje resultante.