oop - tecnica - Pregunta de la entrevista de Amazon: Diseña un estacionamiento de OO
preguntas entrevistas amazon (5)
Diseña un estacionamiento de OO. ¿Qué clases y funciones tendrá? Debería decir, lleno, vacío y también ser capaz de encontrar un lugar para el estacionamiento con valet. El lote tiene 3 tipos diferentes de estacionamiento: regular, para discapacitados y compacto.
¡Gracias!
Aquí hay un comienzo rápido para que los engranajes giren ...
ParkingLot es una clase.
ParkingSpace es una clase.
ParkingSpace tiene una entrada.
La entrada tiene una ubicación o más específicamente, la distancia desde la entrada.
ParkingLotSign es una clase.
ParkingLot tiene un ParkingLotSign.
ParkingLot tiene un número finito de ParkingSpaces.
HandicappedParkingSpace es una subclase de ParkingSpace.
RegularParkingSpace es una subclase de ParkingSpace.
CompactParkingSpace es una subclase de ParkingSpace.
ParkingLot mantiene una variedad de espacios de estacionamiento, y una variedad separada de espacios de estacionamiento vacantes en orden de distancia desde su entrada.
Se puede indicar a ParkingLotSign que muestre "lleno" o "vacío" o "en blanco / normal / parcialmente ocupado" llamando a .Full (), .Empty () o .Normal ()
Parker es una clase.
Parker puede Park ().
Parker puede Unpark ().
Valet es una subclase de Parker que puede llamar a ParkingLot.FindVacantSpaceNearestEntrance (), que devuelve un ParkingSpace.
Parker tiene un ParkingSpace.
Parker puede llamar a ParkingSpace.Take () y ParkingSpace.Vacate ().
Parker llama a Entrance.Entering () y Entrance.Exiting () y ParkingSpace notifican a ParkingLot cuando se toma o se anula para que ParkingLot pueda determinar si está lleno o no. Si está recién lleno o recientemente vacío o no está lleno o vacío recientemente, debería cambiar el ParkingLotSign.Full () o ParkingLotSign.Empty () o ParkingLotSign.Normal ().
HandicappedParker podría ser una subclase de Parker y CompactParker, una subclase de Parker y RegularParker, una subclase de Parker. (podría ser exagerado, en realidad)
En esta solución, es posible que se cambie el nombre de Parker para que sea Coche.
En un estacionamiento orientado a objetos, no habrá necesidad de asistentes porque los autos "sabrán cómo aparcar".
Encontrar un auto utilizable en el lote será difícil; los modelos más comunes tendrán todas sus partes móviles expuestas como variables de miembros públicos, o serán autos "completamente encapsulados" sin ventanas ni puertas.
Los espacios de estacionamiento en nuestro estacionamiento OO no coincidirán con el tamaño y la forma de los automóviles (una "falta de coincidencia de imediance" entre los espacios y los automóviles)
Las etiquetas de licencia en nuestro lote tendrán un punto entre cada letra y dígito. El estacionamiento para discapacitados solo estará disponible para las licencias que comiencen con "_", y las licencias que comiencen con "m_" serán remolcadas.
Los modelos no existen de forma aislada. Las estructuras que definiría para una simulación de automóviles que ingresan en un estacionamiento, un sistema integrado que lo guíe a un espacio libre, un sistema de facturación de estacionamiento de automóviles o para las puertas automáticas / máquinas expendedoras de boletos habituales en los aparcamientos son todas diferentes.
necesitarías un estacionamiento, que contenga una matriz multidimensional (especificada en el constructor) de un tipo "espacio". El estacionamiento puede realizar un seguimiento de cuántos espacios se toman mediante llamadas a funciones que llenan y vacian espacios. El espacio puede contener un tipo enumerado que indique el tipo de espacio que es. Space también tiene un método tomado (). para el servicio de aparcacoches, busque el primer espacio que esté abierto y coloque el automóvil allí. También necesitará un objeto de automóvil para poner en el espacio, que se mantenga si es un vehículo para discapacitados, compacto o regular.
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;
}
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,
}