Ecco un rapido inizio per far girare le marce ...
ParkingLot è una classe.
ParkingSpace è una classe.
ParkingSpace ha un ingresso.
L'ingresso ha una posizione o, più specificamente, una distanza dall'ingresso.
ParkingLotSign è una classe.
ParkingLot ha un ParkingLotSign.
ParkingLot ha un numero finito di ParkingSpaces.
HandicappedParkingSpace è una sottoclasse di ParkingSpace.
RegularParkingSpace è una sottoclasse di ParkingSpace.
CompactParkingSpace è una sottoclasse di ParkingSpace.
ParkingLot mantiene un array di ParkingSpaces e un array separato di ParkingSpaces liberi in ordine di distanza dal suo ingresso.
ParkingLotSign può essere detto di visualizzare "pieno", o "vuoto", o "vuoto / normale / parzialmente occupato" chiamando .Full (), .Empty () o .Normal ()
Parker è una classe.
Parker può parcheggiare ().
Parker può annullare il parcheggio ().
Valet è una sottoclasse di Parker che può chiamare ParkingLot.FindVacantSpaceNearestEntrance (), che restituisce ParkingSpace.
Parker dispone di ParkingSpace.
Parker può chiamare ParkingSpace.Take () e ParkingSpace.Vacate ().
Parker chiama Entrance.Entering () e Entrance.Exiting () e ParkingSpace notifica ParkingLot quando viene preso o lasciato libero in modo che ParkingLot possa determinare se è pieno o meno. Se è nuovo pieno o appena vuoto o non è pieno o vuoto, dovrebbe cambiare ParkingLotSign.Full () o ParkingLotSign.Empty () o ParkingLotSign.Normal ().
HandicappedParker potrebbe essere una sottoclasse di Parker e CompactParker una sottoclasse di Parker e RegularParker una sottoclasse di Parker. (potrebbe essere eccessivo, in realtà.)
In questa soluzione, è possibile che Parker debba essere rinominato Auto.