# Designing for Maintainability

## [UML (Unified Modeling Language)](UML.md)

```mermaid
classDiagram
    class AdventurePackage {
        -title: String
        -description: String
    }

    class Trip {
        -startingDate: Date
    }
    
    class Accommodation {
        -name: String
        -address: String
    }

    class Person {
        -name: String
        -address: String
    }

    class Participant {
    }

    class TourGuide {
    }

    class Booking {
        -bookingDate: Date
        -isPaid: Boolean
    }

    Person <|-- Participant
    Person <|-- TourGuide

    AdventurePackage "1" --o "0..*" Trip : contains >
    Trip "0..*" -- "1" Accommodation : has >
    Trip "0..*" -- "1" TourGuide : leads >
    Trip "0..*" -- "0..*" Participant : booked by >

    Participant "1" --o "0..*" Booking : makes >
    Booking "0..*" -- "1" Trip : for >
    Booking "0..*" -- "1" Participant : by >

    TourGuide "1" --o "0..*" AdventurePackage : certified for >

```