@startuml
class Rocket {
    +addStage()
    +updateMassProperties()
    +prepareForFlight()
    +applyFlightState()
    +getTotalMass()
    +getCenterOfGravity()
    +getCenterOfPressure()
}

class Stage {
    +addMotor()
    +setAirframe()
    +setFinSet()
    +setRecoverySystem()
    +updateMassProperties()
    +getTotalThrust()
}

class Motor {
    +addThrustDataPoint()
    +ignite()
    +update()
    +getCurrentThrust()
}

class Airframe {
    +getLength()
    +getReferenceArea()
}

class FinSet {
    +calculateNormalForceCoefficient()
    +calculateCenterOfPressure()
    +calculateDragArea()
    +calculateMass()
}

class RecoverySystem {
    +checkDeploymentCondition()
    +deploy()
    +isDeployed()
}

Rocket "1" *-- "*" Stage
Stage "1" *-- "*" Motor
Stage "1" *-- "0..1" Airframe
Stage "1" *-- "0..1" FinSet
Stage "1" *-- "0..1" RecoverySystem
@enduml
