OO 주차장을 설계합니다. 어떤 클래스와 기능을 갖습니다. 꽉 차 있고 비어 있고 발렛 주차 공간도 찾을 수 있어야합니다. 주차장에는 일반, 장애인 및 소형 주차의 3 가지 유형이 있습니다.
감사!
OO 주차장을 설계합니다. 어떤 클래스와 기능을 갖습니다. 꽉 차 있고 비어 있고 발렛 주차 공간도 찾을 수 있어야합니다. 주차장에는 일반, 장애인 및 소형 주차의 3 가지 유형이 있습니다.
감사!
답변:
다음은 기어를 돌리는 빠른 시작입니다 ...
ParkingLot는 클래스입니다.
ParkingSpace는 클래스입니다.
ParkingSpace에는 입구가 있습니다.
입구에는 위치 또는 더 구체적으로 입구와의 거리가 있습니다.
ParkingLotSign은 클래스입니다.
ParkingLot에는 ParkingLotSign이 있습니다.
ParkingLot에는 제한된 수의 ParkingSpace가 있습니다.
HandicappedParkingSpace는 ParkingSpace의 하위 클래스입니다.
RegularParkingSpace는 ParkingSpace의 하위 클래스입니다.
CompactParkingSpace는 ParkingSpace의 하위 클래스입니다.
ParkingLot는 ParkingSpaces의 배열을 유지하고 입구로부터의 거리순으로 별도의 빈 ParkingSpaces 배열을 유지합니다.
ParkingLotSign은 .Full (), .Empty () 또는 .Normal ()을 호출하여 "full", "empty"또는 "blank / normal / partially occupied"를 표시하도록 지시 할 수 있습니다.
Parker는 클래스입니다.
Parker는 Park ()를 사용할 수 있습니다.
Parker는 Unpark () 할 수 있습니다.
Valet는 ParkingSpace를 반환하는 ParkingLot.FindVacantSpaceNearestEntrance ()를 호출 할 수있는 Parker의 하위 클래스입니다.
Parker에는 ParkingSpace가 있습니다.
Parker는 ParkingSpace.Take () 및 ParkingSpace.Vacate ()를 호출 할 수 있습니다.
Parker는 Entrance.Entering () 및 Entrance.Exiting ()을 호출하고 ParkingSpace는 ParkingLot가 차가 찼거나 비었을 때 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"가 아닌 이유는 무엇입니까? 클래스에 저장된 일부 상태를 사용하여 "가장 가까운"공간을 반환하는 것이 좋지만. 아마도, "가장 가까운"도 계산 될 수 있도록 "입구"와 "출구"로부터의 거리를 "공간"클래스에 저장할 수 있습니다. 또는 공간의 좌표 만 계산하여 모든 입구와 필요에 따라 출구를 계산할 수 있습니다.
parkVehicle
는 차량이 주차되었는지 여부를 나타내는 부울 값을 반환해야합니다.
물체 지향 주차장에서는 자동차가 "주차 방법을 알고"있기 때문에 승무원이 필요하지 않습니다.
부지에서 사용할 수있는 차를 찾는 것은 어려울 것입니다. 가장 일반적인 모델은 모든 움직이는 부품이 공개 멤버 변수로 노출되거나 창문이나 문이없는 "완전히 캡슐화 된"자동차입니다.
OO 주차장의 주차 공간은 차량의 크기 및 모양과 일치하지 않습니다 (공간과 차량 간의 "조밀 불일치").
부지의 라이센스 태그에는 각 문자와 숫자 사이에 점이 있습니다. 장애인 주차는 "_"로 시작하는 면허 만 이용 가능하며 "m_"로 시작하는 면허는 견인됩니다.
"공간"유형의 다차원 배열 (생성자에 지정됨)을 보유하는 주차장이 필요합니다. 주차장은 공간을 채우고 비우는 함수에 대한 호출을 통해 얼마나 많은 공간을 차지했는지 추적 할 수 있으며 공간은 어떤 종류의 공간인지 알려주는 열거 형을 보유 할 수 있습니다. 공간에는 또한 taken () 메서드가 있습니다. 주차 대행을 위해 첫 번째로 열리는 공간을 찾아 차를 거기에 두십시오. 또한 장애인, 소형 또는 일반 차량인지 여부를 담을 수있는 공간에 넣을 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;
}