Thiết kế một bãi đậu xe OO. Nó sẽ có những lớp và chức năng nào. Nó sẽ nói, đầy đủ, trống rỗng và cũng có thể tìm thấy chỗ đậu xe cho người phục vụ. Lô có 3 hình thức đậu khác nhau: thông thường, khuyết tật và nhỏ gọn.
Cảm ơn!
Thiết kế một bãi đậu xe OO. Nó sẽ có những lớp và chức năng nào. Nó sẽ nói, đầy đủ, trống rỗng và cũng có thể tìm thấy chỗ đậu xe cho người phục vụ. Lô có 3 hình thức đậu khác nhau: thông thường, khuyết tật và nhỏ gọn.
Cảm ơn!
Câu trả lời:
Đây là cách bắt đầu nhanh để chuyển bánh răng ...
ParkingLot là một lớp.
ParkingSpace là một lớp.
Bãi đậu xe có một Lối vào.
Entrance có vị trí hay cụ thể hơn là khoảng cách với Entrance.
ParkingLotSign là một lớp.
ParkingLot có một ParkingLotSign.
ParkingLot có số lượng ParkingSpaces hữu hạn.
HandicappedParkingSpace là một lớp con của ParkingSpace.
RegularParkingSpace là một lớp con của ParkingSpace.
CompactParkingSpace là một lớp con của ParkingSpace.
ParkingLot giữ một loạt các Bãi đậu xe, và một mảng Bãi đậu xe trống riêng biệt theo thứ tự khoảng cách từ Lối vào của nó.
ParkingLotSign có thể được yêu cầu hiển thị "đầy đủ", hoặc "trống", hoặc "trống / bình thường / bị chiếm một phần" bằng cách gọi .Full (), .Empty () hoặc .Normal ()
Parker là một đẳng cấp.
Parker có thể Park ().
Parker có thể Unpark ().
Valet là một lớp con của Parker có thể gọi ParkingLot.FindVacantSpaceNearestEntrance (), trả về một ParkingSpace.
Parker có một Bãi đậu xe.
Parker có thể gọi ParkingSpace.Take () và ParkingSpace.Vacate ().
Parker gọi Entrance.Entering () và Entrance.Exiting () và ParkingSpace thông báo cho ParkingLot khi nó được lấy hoặc bỏ trống để ParkingLot có thể xác định xem nó đã đầy hay chưa. Nếu nó mới đầy hoặc mới trống hoặc mới không đầy hoặc trống, nó nên thay đổi ParkingLotSign.Full () hoặc ParkingLotSign.Empty () hoặc ParkingLotSign.Normal ().
HandicappedParker có thể là một lớp con của Parker và CompactParker là một lớp con của Parker và RegularParker là một lớp con của Parker. (thực ra có thể là quá mức cần thiết.)
Trong giải pháp này, có thể Parker nên được đổi tên thành 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
không được sắp xếp nữa. Bạn phải sắp xếp nó để findNearestVacant
trả lại chỗ đậu xe gần nhất.
findNearestVacant
, khi việc triển khai nó chỉ tìm thấy một khoảng trống, không nhất thiết là "gần nhất"? Tại sao không phải là "findVacant"? Mặc dù sẽ rất tốt nếu trả về không gian "gần nhất" bằng cách sử dụng một số trạng thái được lưu trữ trong lớp. Có thể, chúng ta có thể lưu trữ khoảng cách từ "lối vào" và "lối ra" trong lớp "không gian" để cũng có thể tính được "gần nhất" Hoặc chúng ta có thể đơn giản là tọa độ của không gian, để khoảng cách từ tất cả các lối vào và các lối thoát có thể được tính toán khi cần thiết.
parkVehicle
sẽ trả về một giá trị boolean cho biết phương tiện đã được đậu hay chưa.
Mô hình không tồn tại biệt lập. Các cấu trúc bạn sẽ xác định để mô phỏng ô tô vào bãi đỗ xe, hệ thống nhúng hướng dẫn bạn đến chỗ trống, hệ thống tính tiền đỗ xe hoặc cho cổng / máy soát vé tự động thường thấy ở các bãi đỗ xe đều khác nhau.
Trong một bãi đậu xe Hướng Đối tượng, sẽ không cần tiếp viên vì những chiếc xe sẽ "biết cách đậu".
Tìm một chiếc xe còn sử dụng được trên lô đất sẽ rất khó; các mô hình phổ biến nhất sẽ có tất cả các bộ phận chuyển động của chúng được phơi bày dưới dạng các biến thành viên công khai, hoặc chúng sẽ là những chiếc xe "được gói gọn" không có cửa sổ hoặc cửa ra vào.
Chỗ đậu xe trong bãi đậu xe OO của chúng tôi sẽ không phù hợp với kích thước và hình dạng của ô tô ("sự không tương xứng" giữa chỗ và ô tô)
Thẻ giấy phép trên lô của chúng tôi sẽ có một dấu chấm giữa mỗi chữ cái và chữ số. Bãi đậu xe dành cho người khuyết tật sẽ chỉ có sẵn cho các giấy phép bắt đầu bằng "_" và các giấy phép bắt đầu bằng "m_" sẽ được kéo.
bạn sẽ cần một bãi đậu xe, chứa một mảng đa chiều (được chỉ định trong phương thức khởi tạo) kiểu "khoảng trắng". Bãi đậu xe có thể theo dõi bao nhiêu chỗ trống được sử dụng thông qua các lệnh gọi đến các hàm lấp đầy và chỗ trống. Không gian cũng có một phương thức là (). đối với bãi đậu xe có người phục vụ, chỉ cần tìm khoảng trống đầu tiên mở ra và đặt xe ở đó. Bạn cũng sẽ cần một đối tượng Xe hơi để đặt trong không gian, có thể giữ cho dù đó là phương tiện khuyết tật, nhỏ gọn hay thông thường.
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;
}