Bir OO otoparkı tasarlayın. Hangi sınıflara ve işlevlere sahip olacağı. Dolu, boş ve ayrıca Vale park yeri bulabilmeli. Arazide 3 farklı park türü vardır: normal, engelli ve kompakt.
Teşekkürler!
Bir OO otoparkı tasarlayın. Hangi sınıflara ve işlevlere sahip olacağı. Dolu, boş ve ayrıca Vale park yeri bulabilmeli. Arazide 3 farklı park türü vardır: normal, engelli ve kompakt.
Teşekkürler!
Yanıtlar:
İşte vitesleri döndürmek için hızlı bir başlangıç ...
ParkingLot bir sınıftır.
ParkingSpace bir sınıftır.
ParkingSpace'de bir Giriş vardır.
Girişin bir konumu veya daha spesifik olarak Girişten uzaklığı vardır.
ParkingLotSign bir sınıftır.
ParkingLot'ta bir ParkingLotSign vardır.
ParkingLot'un sınırlı sayıda ParkingSpace'i vardır.
HandicappedParkingSpace, ParkingSpace'in bir alt sınıfıdır.
RegularParkingSpace, ParkingSpace'in bir alt sınıfıdır.
CompactParkingSpace, ParkingSpace'in bir alt sınıfıdır.
ParkingLot, bir dizi Park Alanını ve ayrı bir boş Otopark Alanı dizisini Girişinden uzaklık sırasına göre tutar.
ParkingLotSign'a .Full (), .Empty () veya .Normal () çağrılarak "dolu" veya "boş" veya "boş / normal / kısmen dolu" görüntülenmesi söylenebilir.
Parker bir sınıftır.
Parker, Park edebilir ().
Parker Unpark () olabilir.
Vale, bir ParkingSpace döndüren ParkingLot.FindVacantSpaceNearestEntrance () öğesini çağırabilen bir Parker alt sınıfıdır.
Parker'ın bir Park Alanı var.
Parker, ParkingSpace.Take () ve ParkingSpace.Vacate () çağrılarını yapabilir.
Parker, Entrance.Entering () ve Entrance.Exiting () 'i çağırır ve ParkingSpace, park yeri alındığında veya boşaltıldığında, ParkingLot'a bildirimde bulunur, böylece ParkingLot dolu olup olmadığını belirleyebilir. Yeni doluysa veya yeni boşsa veya yeni dolu veya boş değilse, ParkingLotSign.Full () veya ParkingLotSign.Empty () veya ParkingLotSign.Normal () değerini değiştirmesi gerekir.
HandicappedParker, Parker'ın ve CompactParker'in bir alt sınıfı, Parker'ın bir alt sınıfı ve RegularParker'ın bir Parker alt sınıfı olabilir. (aslında aşırı olabilir.)
Bu çözümde, Parker'ın Car olarak yeniden adlandırılması mümkündür.
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
artık sıralanmaz. En findNearestVacant
yakın park yerini döndürmesi için onu sıralamak zorundasınız .
findNearestVacant
Uygulanması zorunlu olarak "en yakın" olanı değil de yalnızca boş bir alan bulduğunda işlev neden adlandırılır ? Neden "Vacant'ı bulmuyorsun"? Sınıfta depolanan bazı durumları kullanarak "en yakın" alanı döndürmek iyi olurdu. Belki, "giriş" ve "çıkış" dan olan mesafeleri "uzay" sınıfında saklayabiliriz, böylece "en yakın" da hesaplanabilir. Veya basitçe mekanın koordinatlarını, böylece tüm girişlerden ve çıkışlar ihtiyaca göre hesaplanabilir.
parkVehicle
, aracın park halinde olup olmadığını gösteren bir boole değeri döndürmelidir.
Modeller tek başına varolmaz. Bir otoparka giren araçların simülasyonu, sizi boş bir alana yönlendiren gömülü bir sistem, bir otopark faturalama sistemi veya otoparklarda olağan otomatik kapılar / bilet makineleri için tanımlayacağınız yapılar birbirinden farklıdır.
Nesne Tabanlı bir otoparkta, araçlara "nasıl park edileceğini bileceği" için görevliye ihtiyaç olmayacaktır.
Arazide kullanılabilir bir araba bulmak zor olacak; en yaygın modellerin ya tüm hareketli parçaları genel üye değişkenleri olarak açığa çıkacak ya da penceresiz ya da kapısı olmayan "tamamen kapsüllenmiş" arabalar olacaktır.
OO otoparkımızdaki park alanları, arabaların boyutuna ve şekline uymayacaktır (alanlar ve arabalar arasında bir "engelleme uyuşmazlığı")
Partimizdeki lisans etiketlerinde her harf ve rakam arasında bir nokta olacaktır. Engelli otoparkı yalnızca "_" ile başlayan lisanslar için geçerli olacak ve "m_" ile başlayan lisanslar çekilecektir.
"boşluk" türünde çok boyutlu bir diziyi (kurucuda belirtilmiş) tutan bir park yerine ihtiyacınız olacaktır. Park yeri, boşlukları dolduran ve boşaltan işlevlere yapılan çağrılar yoluyla kaç adet alan alındığını takip edebilir. Alan, ne tür bir alan olduğunu söyleyen numaralandırılmış bir tür tutabilir. Space ayrıca alınan bir yönteme () sahiptir. Vale park hizmeti için, açılan ilk boşluğu bulun ve arabayı oraya koyun. Ayrıca boşluğa koymak için engelli, kompakt veya normal bir araç olup olmadığını tutan bir Araba nesnesine de ihtiyacınız olacak.
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;
}