Based on the requirements and use cases, identify the main objects of the system and analyze how they interact and relate to each other...
ParkingLot - represent system coordinator and manage state. Check the availabilities of each parkingSpots, handle vehicle park and exit.
ParkingSpot - represent parking spot metadata, including parking spot type (small, large, larger), occupied status, floor, charge unit.
Floor - represent floor metadata, including parkingSpots information
Vehicle - represent vehicle metadata, including vehicle type (motorcycle, car, truck)
Ticket - mange the parking session, record enter time, exit time, calculate the parking duration, calculate fees, parking spot.
Notification - notify the driver
People - driver, doorman
For each class, define the attributes (data) it will hold and the methods (functions) that operate on the attributes. Ensure they align with the object's responsibilities and adhere to the principle of encapsulation. Write your code in the code editor below.
Explain design tradeoffs you considered. Check and explain whether your design adheres to SOLID principles. Explain how your design can handle changes in scale and whether it would be easy to extend with new functionalities. Identify areas for future improvement...
My design:
For future improvement: