Parcheggio, OOP Design-Design personalizzato [chiuso]
-
13-11-2019 - |
Domanda
Sto lavorando sull'esempio del parcheggio e ho fatto alcune ipotesi mentre progettavo.
Ho un paio di domande nell'assegnazione degli attributi agli oggetti/oggetti.
1) Se parkingSpace non è assegnato da un sistema, vale a dire, l'utente solo nel lotto, trova un posto appropriato (auto/bici/camion/portatori di handicap) e parcheggia la sua auto.
Penso di non aver bisogno di un oggetto ParkingSpace, ma invece, posso mantenere un conteggio di no_of_free_places per ciascuno dei category_of_parking_space.
Poiché lo spazio di parcheggio è grande, manteniamo solo tre variabili.
- no_of_free_slots_Car
- no_of_free_slots_Bike
- no_free_slots_Truck
- no_free_slots_Handicapped
quando un veicolo entra, diminuiamo solo uno dei valori di cui sopra (il che significa che degli X posti disponibili, l'utente ne sceglie uno e parcheggia lì), e quando i veicoli escono, aumentiamo il valore corrispondente.(in breve, il parcheggio non è assegnato da nessuno, il veicolo va solo in uno dei luoghi e parchi idonei lì)
2) Supponendo che abbiamo un unico misuratore di parcheggio globale.
-- >start_time / end_time dovrebbe essere un attributo del Veicolo?
O
-- >vehicle_id, start_time, end_time essere parte di ParkingMeter.
3) Supponendo la necessità di oggetto parkingSpace, dovrebbe 4_wheeler, 2_wheeler, handicapped essere un tipo enum o una classe separata del tutto.
Se il suo enum, possiamo usare findEmptySlot (parkingSpace_type);
Se sono una classe separata del tutto, e ParkingLot ha un metodo findEmptySlot();
Come possiamo ottenere lo slot appropriato?
ParkingMeter sarà responsabile di impostare l'inizio del veicolo, i tempi di fine giusto?
Se il ha più importi, 1hr-20$, 2hr-30,, 3hr-40,, 5hr-50$
è buono avere questi parte della classe ParkingMeter o, includerli in una classe separata "ParkingPrice"
Soluzione
Okay,
- Non ho davvero capito la domanda, ma in effetti userei un array
ParkingSpace
oggetti per descrivere gli spazi del parco. - Poiché l'ora è per veicolo, l'ora dovrebbe essere impostata sul veicolo.
- Userei una classe diversa per ciascuno, e ognuno dovrebbe estendere la classe astratta
Vehicle
.Consente flessibilità con attributi comuni e unici di ogni tipo di veicolo (numero di serie per tutti i veicoli, ma solo 4_wheelers hanno porte per esempio).Per quanto riguarda come trovare posti auto vuoti, ciascunoParkingSpace
l'oggetto avrebbe un$takenBy
proprietà, che conterrebbe un'istanza dell'oggetto veicolo lo occupa.Dovrebbe default anull
, quindi, semplicemente scorrere l'array di spazi nel tuoParkingLot
classe, e trovare quello con$space->takenBy == null
.