@startuml
skinparam packageStyle rectangle
skinparam shadowing false
skinparam linetype polyline
'skinparam classAttributeIconSize 0

class VFMUI implements Runnable {
    +run()
}

class RegisterCheckUpUI implements Runnable {
    -CheckUpController
    +run()
    +RegisterCheckUpUI()
    -requestRegistrationPlate()
    -requestCheckUpDate()
    -requestKmAtLastCheckUp()
    -submitData()
}

class CheckUpController {
    +CheckUpController(getVehicleRepository)
    +getInstance()
    +registerCheckUp(licensePlate: String, checkUpDate: Date, kmAtCheckUp: double)
}

class Repositories {
    -VehicleRepository
    -Repositories()
    +getInstance()
    +getVehicleRepository()
}

class VehicleRepository {
    +List<Vehicle>
    +getVehicle
    +getVehicles()
    +updateVehicle()
    +existsVehicle()
    +add()
    +validateVehicle()
}

class Vehicle {
    - String registrationPlate
    - double currentKm
    - double checkUpKmFrequency
    + double kmAtNextCheckUp
    -validateVehicle()
    +registerCheckUp()
    +isCheckUpDue()
    +getCheckUpList()
    +clone()
    +compareTo()
}

class checkUp {
- double kmAtLastCheckUp
- Date checkUpDate
+ CheckUp()
+ getKmAtLastCheckUp()
}


RegisterCheckUpUI ..> CheckUpController
CheckUpController ..> "1" Repositories
Repositories "1" -> "1" VehicleRepository
VehicleRepository "1" --> "*" Vehicle
Vehicle "1" --> "*" checkUp : registerCheckUp
CheckUpController ..> Vehicle
CheckUpController ---> VehicleRepository
VFMUI ..> RegisterCheckUpUI
Repositories --> Repositories : instance

@enduml