Hier ist ein schneller Start, um die Gänge zum Laufen zu bringen ...
ParkingLot ist eine Klasse.
ParkingSpace ist eine Klasse.
ParkingSpace hat einen Eingang.
Der Eingang hat einen Ort oder genauer gesagt eine Entfernung vom Eingang.
ParkingLotSign ist eine Klasse.
ParkingLot hat ein ParkingLotSign.
ParkingLot hat eine begrenzte Anzahl von Parkplätzen.
HandicappedParkingSpace ist eine Unterklasse von ParkingSpace.
RegularParkingSpace ist eine Unterklasse von ParkingSpace.
CompactParkingSpace ist eine Unterklasse von ParkingSpace.
ParkingLot verwaltet eine Reihe von Parkplätzen und eine separate Reihe von freien Parkplätzen in der Reihenfolge der Entfernung vom Eingang.
ParkingLotSign kann durch Aufrufen von .Full (), .Empty () oder .Normal () angewiesen werden, "voll" oder "leer" oder "leer / normal / teilweise belegt" anzuzeigen.
Parker ist eine Klasse.
Parker kann parken ().
Parker kann () entparken.
Valet ist eine Unterklasse von Parker, die ParkingLot.FindVacantSpaceNearestEntrance () aufrufen kann und einen ParkingSpace zurückgibt.
Parker hat einen Parkplatz.
Parker kann ParkingSpace.Take () und ParkingSpace.Vacate () aufrufen.
Parker ruft Entrance.Entering () und Entrance.Exiting () auf und ParkingSpace benachrichtigt ParkingLot, wenn es genommen oder geräumt wird, damit ParkingLot feststellen kann, ob es voll ist oder nicht. Wenn es neu voll oder neu leer oder neu nicht voll oder leer ist, sollte es ParkingLotSign.Full () oder ParkingLotSign.Empty () oder ParkingLotSign.Normal () ändern.
HandicappedParker kann eine Unterklasse von Parker und CompactParker eine Unterklasse von Parker und RegularParker eine Unterklasse von Parker sein. (Könnte tatsächlich übertrieben sein.)
In dieser Lösung ist es möglich, dass Parker in Auto umbenannt wird.