Автостоянка, дизайн ООП - Индивидуальный дизайн [закрыто]
-
13-11-2019 - |
Вопрос
Я работаю над примером парковки и сделал несколько предположений при проектировании.
У меня есть пара вопросов по присвоению атрибутов элементам/объектам.
1) Если парковочное место не назначено системой, т.е. пользователь просто заходит на стоянку, находит подходящее место (автомобиль/велосипед/ грузовик/для инвалидов) и паркует свой автомобиль.
Я думаю, что мне не нужен объект ParkingSpace, но вместо этого я могу вести подсчет no_of_free_places для каждого из category_of_parking_space.
Поскольку парковочное место большое, мы просто учитываем три переменные.
- no_of_free_slots_Car нет_фри_слотов_кара
- no_of_free_slots_Bike без_слотов
- no_free_slots_Truck без свободных мест
- no_free_slots_Handicapped нет_ свободных слотов_handicapped
когда въезжает транспортное средство, мы просто уменьшаем одно из приведенных выше значений (что означает, что из доступных X мест пользователь выбирает одно и паркуется там), а когда транспортное средство выезжает, мы увеличиваем соответствующее значение.(короче говоря, место для парковки никем не назначается, транспортное средство просто направляется в одно из подходящих мест и паркуется там)
2) Предположим, что у нас есть единый глобальный парковочный счетчик.
--> Должно ли start_time/end_time быть атрибутом транспортного средства?
Или
--> vehicle_id, start_time, end_time должны быть частью ParkingMeter.
3) Предполагая необходимость в объекте ParkingSpace, должны ли 4_wheeler, 2_wheeler, handicapped быть типом перечисления или вообще отдельным классом.
Если это перечисление, мы можем использовать findEmptySlot(parkingSpace_type);
Если они вообще являются отдельным классом, а ParkingLot имеет метод findEmptySlot();
Как мы можем получить соответствующий слот?
ParkingMeter будет отвечать за установку времени начала и окончания движения автомобиля, верно?
Если у вас несколько сумм, 1 час - 20$, 2 часа - 30$, 3 часа - 40$, 5 часов - 50$
хорошо ли иметь их частью класса ParkingMeter или включить их в отдельный класс "ParkingPrice"
Решение
Окей,
- Я действительно не понял вопроса, но я бы действительно использовал массив
ParkingSpace
объекты для описания пространств в парке. - Поскольку время указано для каждого транспортного средства, оно должно быть установлено на транспортном средстве.
- Я бы использовал другой класс для каждого, и каждый должен расширять абстрактный класс
Vehicle
.Это обеспечивает гибкость при использовании общих и уникальных атрибутов каждого типа транспортного средства (серийный номер для всех транспортных средств, но, например, только у 4_wheelers есть двери).Что касается того, как найти свободные парковочные места, то каждыйParkingSpace
объект имел бы$takenBy
свойство, которое содержало бы экземпляр объекта vehicle, занимает его.По умолчанию должно быть установлено значениеnull
, затем вы просто перебираете массив пробелов в вашемParkingLot
класс, и найдите тот, у которого$space->takenBy == null
.