¿Cómo diseñar un estacionamiento usando principios orientados a objetos?

Diseñe un estacionamiento utilizando principios orientados a objetos. Preguntado en: Amazon, Apple, Google y muchas más entrevistas Solución:Para nuestros propósitos en este momento, haremos las siguientes suposiciones. Hicimos estas suposiciones específicas para agregar un poco de complejidad al problema sin agregar demasiado. Si hiciste suposiciones diferentes, está totalmente bien. 1) El estacionamiento tiene varios niveles. Cada nivel tiene varias filas de puntos. 2) El estacionamiento puede estacionar motocicletas, automóviles y autobuses. 3) El estacionamiento tiene lugares para motocicletas, lugares compactos y lugares grandes. 4) Una motocicleta puede estacionar en cualquier lugar. 5) Un automóvil puede estacionar en un solo lugar compacto o en un solo lugar grande. 6) Un autobús puede estacionar en cinco espacios grandes consecutivos y dentro de la misma fila. No se puede estacionar en lugares pequeños. En la siguiente implementación, hemos creado una clase abstracta de Vehículo, de la que heredan Coche, Autobús y Motocicleta. Para manejar los diferentes tamaños de lugares de estacionamiento, 

Lógica principal en Java dada a continuación 

Java

// Vehicle and its inherited classes.
public enum VehicleSize { Motorcycle, Compact,Large }
 
public abstract class Vehicle
{
      protected ArrayList<ParkingSpot> parkingSpots =
                           new ArrayList<ParkingSpot>();
      protected String licensePlate;
      protected int spotsNeeded;
      protected VehicleSize size;
 
      public int getSpotsNeeded()
      {
          return spotsNeeded;
      }
      public VehicleSize getSize()
      {
          return size;
      }
 
      /* Park vehicle in this spot (among others,
         potentially) */
      public void parkinSpot(ParkingSpot s)
      {
          parkingSpots.add(s);
      }
 
 
      /* Remove vehicle from spot, and notify spot
         that it's gone */
      public void clearSpots() { ... }
 
      /* Checks if the spot is big enough for the
         vehicle (and is available).
         This * compares the SIZE only.It does not
        check if it has enough spots. */
      public abstract boolean canFitinSpot(ParkingSpot spot);
}
 
public class Bus extends Vehicle
{
    public Bus()
    {
        spotsNeeded = 5;
        size = VehicleSize.Large;
    }
 
    /* Checks if the spot is a Large. Doesn't check
     num of spots */
    public boolean canFitinSpot(ParkingSpot spot)
    {... }
}
 
public class Car extends Vehicle
{
    public Car()
    {
        spotsNeeded = 1;
        size = VehicleSize.Compact;
    }
 
    /* Checks if the spot is a Compact or a Large. */
    public boolean canFitinSpot(ParkingSpot spot)
    { ... }
}
 
public class Motorcycle extends Vehicle
{
    public Motorcycle()
    {
        spotsNeeded = 1;
        size = VehicleSize.Motorcycle;
    }
    public boolean canFitinSpot(ParkingSpot spot)
    { ... }
}

El ParkingSpot se implementa teniendo solo una variable que representa el tamaño del lugar. Podríamos haber implementado esto al tener clases para LargeSpot, CompactSpot y MotorcycleSpot que heredan de ParkingSpot, pero esto probablemente sea exagerado. Las manchas probablemente no tengan comportamientos diferentes, aparte de sus tamaños. 

Java

public class ParkingSpot
{
    private Vehicle vehicle;
    private VehicleSize spotSize;
    private int row;
    private int spotNumber;
    private Level level;
 
    public ParkingSpot(Level lvl, int r, int n,
                         VehicleSize s)
    { ... }
 
    public boolean isAvailable()
    {
        return vehicle == null;
    }
 
    /* Check if the spot is big enough and is available */
    public boolean canFitVehicle(Vehicle vehicle) { ... }
 
    /* Park vehicle in this spot. */
    public boolean park(Vehicle v) {..}
 
    public int getRow()
    {
        return row;
    }
    public int getSpotNumber()
    {
        return spotNumber;
    }
 
    /* Remove vehicle from spot, and notify
      level that a new spot is available */
    public void removeVehicle() { ... }
}

Este artículo es una contribución del Sr. Somesh Awasthi . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *