Design an object-oriented model for a parking lot management system.
Requirements:
-
The parking lot has multiple levels; each level has multiple parking spots.
-
Each spot has a size: small, medium, or large.
-
Vehicles can be of different types: motorcycle, car, or bus/truck.
-
A vehicle can only be parked in a spot of a compatible size. A bus or truck may require multiple adjacent large spots.
-
The system must support:
-
Vehicle entry: find and reserve an appropriate spot (or group of spots) for an incoming vehicle.
-
Vehicle exit: free the spot(s) and calculate the parking fee based on time parked.
-
Query operations: report the number of available spots per size and per level, and whether the lot is full.
Assumptions:
-
Ignore distributed systems concerns; you are designing an in-process object-oriented model, not a networked service.
-
You may assume time and payment processing are handled by simple helper components.
Describe:
-
The main classes, their responsibilities, and key attributes.
-
The relationships between classes (inheritance, composition, etc.).
-
The main methods needed to support the above operations.
-
Any design patterns or principles (for example, SOLID) you apply.