Rancang tempat parkir OO. Kelas dan fungsi apa yang akan dimilikinya. Seharusnya tertulis, penuh, kosong dan juga dapat menemukan tempat untuk parkir Valet. Tempat parkir memiliki 3 jenis tempat parkir: biasa, cacat, dan kompak.
Terima kasih!
Rancang tempat parkir OO. Kelas dan fungsi apa yang akan dimilikinya. Seharusnya tertulis, penuh, kosong dan juga dapat menemukan tempat untuk parkir Valet. Tempat parkir memiliki 3 jenis tempat parkir: biasa, cacat, dan kompak.
Terima kasih!
Jawaban:
Ini adalah awal yang cepat untuk membuat roda gigi berputar ...
ParkingLot adalah sebuah kelas.
ParkingSpace adalah sebuah kelas.
ParkingSpace memiliki Pintu Masuk.
Pintu masuk memiliki lokasi atau lebih tepatnya, jarak dari Pintu Masuk.
ParkingLotSign adalah sebuah kelas.
ParkingLot memiliki ParkingLotSign.
ParkingLot memiliki jumlah ParkingSpaces yang terbatas.
HandicappedParkingSpace adalah subclass dari ParkingSpace.
RegularParkingSpace adalah subclass dari ParkingSpace.
CompactParkingSpace adalah subclass dari ParkingSpace.
ParkingLot menyimpan berbagai ParkingSpaces, dan berbagai ParkingSpaces kosong yang terpisah dalam urutan jarak dari Pintu Masuknya.
ParkingLotSign dapat diberi tahu untuk menampilkan "penuh", atau "kosong", atau "kosong / normal / sebagian terisi" dengan memanggil .Full (), .Empty () atau .Normal ()
Parker adalah sebuah kelas.
Parker dapat Park ().
Parker dapat Unpark ().
Valet adalah subclass dari Parker yang dapat memanggil ParkingLot.FindVacantSpaceNearestEntrance (), yang mengembalikan ParkingSpace.
Parker memiliki ParkingSpace.
Parker dapat memanggil ParkingSpace.Take () dan ParkingSpace.Vacate ().
Parker memanggil Entrance.Entering () dan Entrance.Exiting () dan ParkingSpace memberi tahu ParkingLot saat diambil atau dikosongkan sehingga ParkingLot dapat menentukan apakah sudah penuh atau tidak. Jika baru penuh atau baru kosong atau baru tidak penuh atau kosong, ini harus mengubah ParkingLotSign.Full () atau ParkingLotSign.Empty () atau ParkingLotSign.Normal ().
HandicappedParker adalah subkelas dari Parker dan CompactParker merupakan subkelas dari Parker dan RegularParker merupakan subkelas dari Parker. (mungkin berlebihan, sebenarnya.)
Dalam solusi ini, ada kemungkinan Parker harus diganti namanya menjadi Mobil.
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
tidak diurutkan lagi. Anda harus membuatnya disortir sehingga findNearestVacant
mengembalikan tempat parkir terdekat.
findNearestVacant
, jika implementasinya hanya menemukan ruang kosong, bukan yang "terdekat"? Mengapa tidak "findVacant"? Meskipun akan lebih baik untuk mengembalikan ruang "terdekat", menggunakan beberapa status yang disimpan di kelas. Mungkin, kita dapat menyimpan jarak dari "pintu masuk" dan "keluar" di kelas "ruang" sehingga "terdekat" dapat dihitung juga. Atau kita dapat dengan mudah mengetahui koordinat ruang, sehingga jarak dari semua pintu masuk dan keluar dapat dihitung sesuai kebutuhan.
parkVehicle
harus mengembalikan nilai boolean yang menunjukkan apakah kendaraan diparkir atau tidak.
Model tidak ada secara terpisah. Struktur yang Anda tetapkan untuk simulasi mobil yang memasuki tempat parkir, sistem tertanam yang memandu Anda ke ruang kosong, sistem penagihan parkir mobil, atau untuk gerbang / mesin tiket otomatis yang biasa ada di tempat parkir, semuanya berbeda.
Di tempat parkir Berorientasi Objek, tidak diperlukan petugas karena mobil akan "tahu cara parkir".
Menemukan mobil yang dapat digunakan di tempat parkir akan sulit; model yang paling umum akan menampilkan semua bagiannya yang bergerak sebagai variabel anggota publik, atau mereka akan menjadi mobil "terenkapsulasi penuh" tanpa jendela atau pintu.
Ruang parkir di tempat parkir OO kami tidak akan sesuai dengan ukuran dan bentuk mobil ("ketidaksesuaian impedansi" antara ruang dan mobil)
Label lisensi di lot kami memiliki titik di antara setiap huruf dan digit. Parkir khusus penyandang cacat hanya akan tersedia untuk izin yang diawali dengan "_", dan izin yang diawali dengan "m_" akan ditarik.
Anda akan membutuhkan tempat parkir, yang menampung larik multi-dimensi (ditentukan dalam konstruktor) dengan tipe "ruang". Tempat parkir dapat melacak berapa banyak ruang yang diambil melalui panggilan ke fungsi yang mengisi dan mengosongkan ruang. Ruang dapat menampung jenis enumerasi yang memberi tahu jenis ruang itu. Ruang juga memiliki metode yang diambil (). untuk parkir valet, cari saja ruang pertama yang terbuka dan letakkan mobil di sana. Anda juga akan membutuhkan benda Mobil untuk diletakkan di ruang, yang menampung apakah itu kendaraan cacat, kompak, atau biasa.
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;
}