Дизайн автостоянки OO. Какие у него будут классы и функции. Он должен сказать, полный, пустой, а также уметь найти место для парковки. На участке есть 3 вида парковок: обычная, для инвалидов и компактная.
Спасибо!
Дизайн автостоянки OO. Какие у него будут классы и функции. Он должен сказать, полный, пустой, а также уметь найти место для парковки. На участке есть 3 вида парковок: обычная, для инвалидов и компактная.
Спасибо!
Ответы:
Вот быстрый старт, чтобы включить шестеренки ...
ParkingLot - это класс.
ParkingSpace - это класс.
ParkingSpace имеет вход.
У входа есть местоположение или, более конкретно, расстояние от входа.
ParkingLotSign - это класс.
ParkingLot имеет знак ParkingLotSign.
ParkingLot имеет ограниченное количество парковочных мест.
HandicappedParkingSpace - это подкласс ParkingSpace.
RegularParkingSpace - это подкласс ParkingSpace.
CompactParkingSpace - это подкласс ParkingSpace.
ParkingLot хранит массив парковочных мест и отдельный массив свободных парковочных мест в порядке удаления от входа.
Можно указать ParkingLotSign для отображения «полный», «пустой» или «пустой / нормальный / частично занятый» путем вызова .Full (), .Empty () или .Normal ()
Паркер - это класс.
Паркер может припарковаться ().
Паркер может разблокировать ().
Valet - это подкласс Parker, который может вызывать ParkingLot.FindVacantSpaceNearestEntrance (), который возвращает ParkingSpace.
Паркер имеет парковочное место.
Паркер может вызывать ParkingSpace.Take () и ParkingSpace.Vacate ().
Паркер вызывает Entrance.Entering () и Entrance.Exiting (), а ParkingSpace уведомляет ParkingLot, когда он занят или освобождается, чтобы ParkingLot мог определить, заполнен он или нет. Если он только что заполнен, или недавно опустел, или только что не заполнен или пуст, он должен изменить ParkingLotSign.Full () или ParkingLotSign.Empty () или ParkingLotSign.Normal ().
HandicappedParker может быть подклассом Parker, а CompactParker - подклассом Parker, а RegularParker - подклассом Parker. (на самом деле может быть излишним.)
В этом решении возможно, что Parker следует переименовать в Car.
public class ParkingLot
{
Vector<ParkingSpace> vacantParkingSpaces = null;
Vector<ParkingSpace> fullParkingSpaces = null;
int parkingSpaceCount = 0;
boolean isFull;
boolean isEmpty;
ParkingSpace findNearestVacant(ParkingType type)
{
Iterator<ParkingSpace> itr = vacantParkingSpaces.iterator();
while(itr.hasNext())
{
ParkingSpace parkingSpace = itr.next();
if(parkingSpace.parkingType == type)
{
return parkingSpace;
}
}
return null;
}
void parkVehicle(ParkingType type, Vehicle vehicle)
{
if(!isFull())
{
ParkingSpace parkingSpace = findNearestVacant(type);
if(parkingSpace != null)
{
parkingSpace.vehicle = vehicle;
parkingSpace.isVacant = false;
vacantParkingSpaces.remove(parkingSpace);
fullParkingSpaces.add(parkingSpace);
if(fullParkingSpaces.size() == parkingSpaceCount)
isFull = true;
isEmpty = false;
}
}
}
void releaseVehicle(Vehicle vehicle)
{
if(!isEmpty())
{
Iterator<ParkingSpace> itr = fullParkingSpaces.iterator();
while(itr.hasNext())
{
ParkingSpace parkingSpace = itr.next();
if(parkingSpace.vehicle.equals(vehicle))
{
fullParkingSpaces.remove(parkingSpace);
vacantParkingSpaces.add(parkingSpace);
parkingSpace.isVacant = true;
parkingSpace.vehicle = null;
if(vacantParkingSpaces.size() == parkingSpaceCount)
isEmpty = true;
isFull = false;
}
}
}
}
boolean isFull()
{
return isFull;
}
boolean isEmpty()
{
return isEmpty;
}
}
public class ParkingSpace
{
boolean isVacant;
Vehicle vehicle;
ParkingType parkingType;
int distance;
}
public class Vehicle
{
int num;
}
public enum ParkingType
{
REGULAR,
HANDICAPPED,
COMPACT,
MAX_PARKING_TYPE,
}
vacantParkingSpaces
он больше не сортируется. Вы должны сделать так, чтобы оно findNearestVacant
возвращало ближайшее парковочное место.
findNearestVacant
, если ее реализация находит только свободное место, не обязательно «ближайшее»? Почему бы не найти "findVacant"? Хотя было бы хорошо вернуть «ближайшее» пространство, используя некоторые состояния, хранящиеся в классе. Возможно, мы можем сохранить расстояния от «входа» и «выхода» в классе «space», чтобы также можно было вычислить «ближайший». Или мы можем просто координаты пространства, чтобы расстояния от всех входов и выходы могут быть рассчитаны по мере необходимости.
parkVehicle
должна возвращать логическое значение, указывающее, был ли автомобиль припаркован или нет.
Модели не существуют изолированно. Структуры, которые вы определяете для моделирования въезда автомобилей на автостоянку, встроенную систему, которая направляет вас к свободному месту, систему выставления счетов за парковку или автоматические ворота / билетные автоматы, обычные на автостоянках, все разные.
На объектно-ориентированной парковке не будет необходимости в обслуживающем персонале, потому что автомобили «умеют парковаться».
Найти на участке подходящую машину будет сложно; в наиболее распространенных моделях либо все их движущиеся части будут представлены как общедоступные переменные-члены, либо они будут «полностью инкапсулированными» автомобилями без окон и дверей.
Парковочные места на нашей автостоянке OO не будут соответствовать размеру и форме автомобилей («несоответствие препятствий» между местами и машинами)
Лицензионные бирки на нашем участке будут иметь точку между буквой и цифрой. Парковка для инвалидов будет доступна только для лицензий, начинающихся с "_", а лицензии, начинающиеся с "m_", будут отбуксированы.
вам понадобится парковка, содержащая многомерный массив (указанный в конструкторе) типа «пробел». Парковка может отслеживать, сколько места занято с помощью вызовов функций, заполняющих и пустые пространства. Пространство может содержать нумерованный тип, который сообщает, что это за пространство. Пробел также имеет метод take (). для парковки автомобиля служащим просто найдите первое открытое место и поместите туда машину. Вам также понадобится объект Car, который можно разместить в пространстве, независимо от того, является ли он автомобилем для инвалидов, компактным или обычным автомобилем.
class ParkingLot
{
Space[][] spaces;
ParkingLot(wide, long); // constructor
FindOpenSpace(TypeOfCar); // find first open space where type matches
}
enum TypeOfSpace = {compact, handicapped, regular };
enum TypeOfCar = {compact, handicapped, regular };
class Space
{
TypeOfSpace type;
bool empty;
// gets and sets here
// make sure car type
}
class car
{
TypeOfCar type;
}