设计一个OO停车场。它将具有哪些类别和功能。它应该说,全,空,也能找到代客泊车的地方。该地段有3种不同类型的停车场:普通停车场,残疾人停车场和紧凑型停车场。
谢谢!
答案 0 :(得分:145)
这是让齿轮转动的快速开始......
ParkingLot是一个班级。
ParkingSpace是一个班级。
ParkingSpace有一个入口。
入口有一个位置,或者更具体地说,是距离入口的距离。
ParkingLotSign是一个班级。
ParkingLot有ParkingLotSign。
ParkingLot拥有有限数量的停车位。
HandicappedParkingSpace是ParkingSpace的子类。
RegularParkingSpace是ParkingSpace的子类。
CompactParkingSpace是ParkingSpace的子类。
ParkingLot保留了一系列ParkingSpaces,以及一系列空置的ParkingSpaces,距离入口处的距离不远。
通过调用.Full(),. Empty()或.Normal()
,可以告诉ParkingLotSign显示“full”,“empty”或“blank / normal / partial occupied” 帕克是一个班级。派克可以停车()。
Parker可以Unpark()。
Valet是Parker的子类,可以调用ParkingLot.FindVacantSpaceNearestEntrance(),它返回一个ParkingSpace。
帕克有一个停车位。Parker可以调用ParkingSpace.Take()和ParkingSpace.Vacate()。
Parker呼叫Entrance.Entering()和Entrance.Exiting(),并且ParkingSpace会在停车时通知ParkingLot,以便ParkingLot可以确定它是否已满。如果它是新满或新空或新满或空,则应更改ParkingLotSign.Full()或ParkingLotSign.Empty()或ParkingLotSign.Normal()。
HandicappedParker可以是Parker的子类,CompactParker是Parker的子类,而ParkP的子类是RegularParker。 (实际上可能有点矫枉过正。)
在此解决方案中,可能应将Parker重命名为Car。
答案 1 :(得分:63)
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,
}
答案 2 :(得分:10)
模型不是孤立存在的。您为进入停车场的汽车模拟定义的结构,引导您进入自由空间的嵌入式系统,停车计费系统或停车场中常见的自动门/售票机都是不同的。
答案 3 :(得分:5)
在面向对象的停车场,不需要服务员,因为汽车将“知道如何停车”。
在这个地段找到一辆可用的汽车将很困难;最常见的模型要么将所有活动部件作为公共成员变量公开,要么将是“完全封装”的车辆,没有窗户或门。
我们OO停车场的停车位与汽车的大小和形状不符(空间和车厢之间的“阻碍不匹配”)
我们地段的许可证标签在每个字母和数字之间都有一个点。 Handicaped parking仅适用于以“_”开头的许可证,而以“m_”开头的许可证将被拖走。
答案 4 :(得分:5)
你需要一个停车场,它拥有一个“空间”类型的多维数组(在构造函数中指定)。停车场可以通过调用填充和清空空间的函数来跟踪占用的空间数量。空间可以保持枚举类型,告诉它是什么类型的空间。空间也有一个方法()。代客泊车,找到第一个打开的空间,把车放在那里。您还需要一个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;
}