Voici un démarrage rapide pour faire tourner les vitesses ...
ParkingLot est une classe.
ParkingSpace est une classe.
ParkingSpace a une entrée.
L'entrée a un emplacement ou, plus précisément, la distance de l'entrée.
ParkingLotSign est une classe.
ParkingLot a un ParkingLotSign.
ParkingLot a un nombre fini de ParkingSpaces.
HandicappedParkingSpace est une sous-classe de ParkingSpace.
RegularParkingSpace est une sous-classe de ParkingSpace.
CompactParkingSpace est une sous-classe de ParkingSpace.
ParkingLot conserve un éventail de ParkingSpaces et un tableau séparé de ParkingSpaces vacants par ordre de distance de son entrée.
ParkingLotSign peut être invité à afficher «plein», «vide» ou «vide / normal / partiellement occupé» en appelant .Full (), .Empty () ou .Normal ()
Parker est une classe.
Parker peut se garer ().
Parker peut Unpark ().
Valet est une sous-classe de Parker qui peut appeler ParkingLot.FindVacantSpaceNearestEntrance (), qui renvoie un ParkingSpace.
Parker a un ParkingSpace.
Parker peut appeler ParkingSpace.Take () et ParkingSpace.Vacate ().
Parker appelle Entrance.Entering () et Entrance.Exiting () et ParkingSpace informe ParkingLot quand il est pris ou libéré afin que ParkingLot puisse déterminer s'il est plein ou non. S'il est nouvellement plein ou nouvellement vide ou nouvellement pas plein ou vide, il devrait changer le ParkingLotSign.Full () ou ParkingLotSign.Empty () ou ParkingLotSign.Normal ().
HandicappedParker pourrait être une sous-classe de Parker et CompactParker une sous-classe de Parker et RegularParker une sous-classe de Parker. (peut-être exagéré, en fait.)
Dans cette solution, il est possible que Parker soit renommé Car.