Problem Statement
Without clear class identification, the system becomes confusing and hard to maintain. Developers may mix responsibilities, causing bugs and making future changes risky and slow.
Jump into concepts and practice - no test required
┌────────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐
│ ParkingLot │──────▶│ Floor │──────▶│ Spot │ │ Vehicle │
└────────────┘ └───────────┘ └───────────┘ └───────────┘
│ │ │ │
│ │ │ │
└──────────────────────────────────────────────────────────┘This diagram shows the relationship between ParkingLot, Floor, Spot, and Vehicle classes. ParkingLot contains Floors; Floors contain Spots; Spots can be occupied by Vehicles.
### Before: No clear classes, everything mixed parking_data = { 'floors': 3, 'spots_per_floor': 10, 'occupied_spots': [(1, 5), (2, 3)], # floor, spot 'vehicles': ['car1', 'car2'] } ### After: Clear class identification class Vehicle: def __init__(self, license_plate): self.license_plate = license_plate class Spot: def __init__(self, spot_number): self.spot_number = spot_number self.vehicle = None def park_vehicle(self, vehicle): self.vehicle = vehicle def remove_vehicle(self): self.vehicle = None class Floor: def __init__(self, floor_number, spots_count): self.floor_number = floor_number self.spots = [Spot(i+1) for i in range(spots_count)] class ParkingLot: def __init__(self, floors_count, spots_per_floor): self.floors = [Floor(i+1, spots_per_floor) for i in range(floors_count)] def park(self, vehicle): for floor in self.floors: for spot in floor.spots: if spot.vehicle is None: spot.park_vehicle(vehicle) return (floor.floor_number, spot.spot_number) return None
class Vehicle {
String licensePlate;
Vehicle(String plate) { licensePlate = plate; }
}
class Spot {
Vehicle parkedVehicle;
boolean isOccupied() { return parkedVehicle != null; }
}
Spot spot = new Spot();
System.out.println(spot.isOccupied());class Floor {
List<Spot> spots;
void addSpot(Spot s) {
spots.add(s);
}
}