Проектуйте паркувальну станцію OO. Які класи та функції вони матимуть. Слід сказати, повний, порожній, а також зможете знайти місце для паркування автомобіля Valet. На ділянці є 3 різні види паркування: регулярне, інвалідне та компактне.
Дякую!
Проектуйте паркувальну станцію OO. Які класи та функції вони матимуть. Слід сказати, повний, порожній, а також зможете знайти місце для паркування автомобіля Valet. На ділянці є 3 різні види паркування: регулярне, інвалідне та компактне.
Дякую!
Відповіді:
Ось швидкий старт, щоб передачі поверталися ...
ParkingLot - клас.
ParkingSpace - клас.
ParkingSpace має вхід.
Вхід має місце розташування або, точніше, відстань від Входу.
ParkingLotSign - клас.
У ParkingLot є ParkingLotSign.
ParkingLot має обмежену кількість ParkingSpaces.
HandicappedParkingSpace - це підклас ParkingSpace.
RegularParkingSpace - це підклас ParkingSpace.
CompactParkingSpace - це підклас ParkingSpace.
ParkingLot зберігає масив ParkingSpaces та окремий масив вільних ParkingSpaces у порядку відстані від його входу.
ParkingLotSign може бути запропоновано відображати "повний", "порожній" або "порожній / нормальний / частково зайнятий", зателефонувавши. Full (), .Empty () або .Normal ()
Паркер - клас.
Паркер може Парк ().
Паркер може відпаркувати ().
Valet - це підклас Parker, який може викликати ParkingLot.FindVacantSpaceNearestEntrance (), який повертає ParkingSpace.
У Parker є ParkingSpace.
Паркер може зателефонувати ParkingSpace.Take () та ParkingSpace.Vacate ().
Паркер дзвонить Entrance.Entering () і Entrance.Exiting () і ParkingSpace повідомляє ParkingLot про його взяття або звільнення, щоб ParkingLot міг визначити, заповнений він чи ні. Якщо він нещодавно повний або нещодавно порожній або нещодавно не повний або порожній, він повинен змінити ParkingLotSign.Full () або ParkingLotSign.Empty () або ParkingLotSign.Normal ().
HandicappedParker може бути підкласом Parker, а CompactParker - підкласом Parker, а RegularParker - підкласом Parker. (можливо, надмірне вбивство.)
У цьому рішенні можливо, що Паркер повинен бути перейменований на Автомобіль.
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"? Хоча було б добре повернути "найближчий" простір, використовуючи деякі стани, що зберігаються в класі. Можливо, ми можемо зберігати відстані від «входу» та «виходу» в класі «простір», щоб можна було також обчислити «найближчий», або просто просто координати простору, так що відстані від усіх входів і виходи можуть бути обчислені за потребою.
parkVehicle
повинна повертати булеве значення, що вказує, був автомобіль припаркований чи ні.
Моделі не існують ізольовано. Структури, які ви б визначили для моделювання автомобілів, що в’їжджають на автостоянку, вбудована система, яка спрямовує вас на вільний простір, систему виставлення рахунків на парковку автомобіля або на автоматизовані ворота / машини для продажу квитків, звичайні на автостоянках, всі різні.
На об'єктно-орієнтованій парковці супроводжувачів не буде потреби, оскільки машини будуть «вміти паркувати».
Знайти корисну машину на партії буде складно; найпоширеніші моделі або матимуть, щоб всі їх рухомі частини були викритими як публічні змінні, або вони будуть "повністю капсульовані" машини без вікон і дверей.
Місце для паркування на нашому парковці OO не буде відповідати розмірам та формі автомобілів ("невідповідність невідповідності" між місцями та автомобілями)
Мітки ліцензій на нашому лоті матимуть крапку між кожною літерою та цифрою. Паркування для інвалідів буде доступне лише для ліцензій, що починаються з "_", а ліцензії, що починаються з "m_", буксируються.
вам знадобиться стоянка, яка містить багатовимірний масив (вказаний у конструкторі) типу "пробіл". На стоянці можна відстежувати, скільки місця було зайнято за допомогою дзвінків до функцій, які заповнюють та порожні місця. У просторі може бути перелічений тип, який повідомляє, який це простір. Простір також має метод, прийнятий (). Для паркування автомобіля, просто знайдіть перше місце, яке відкриється, і поставте машину туди. Вам також знадобиться автомобільний об’єкт, щоб розмістити його в просторі, який вміщує, чи є це інваліди, компактні або звичайні транспортні засоби.
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;
}