111 votes

Question d'entretien d'embauche Amazon: Concevoir un parking OO

Concevez un parking OO. Quelles classes et fonctions aura-t-il. Il devrait dire: plein, vide et pouvoir également trouver une place pour le service de voiturier. Le lot dispose de 3 types de stationnement: régulier, handicapé et compact.

Merci!

155voto

Chris Morley Points 1126

Voici un démarrage rapide pour obtenir les engrenages tournant...

ParkingLot est une classe.

ParkingSpace est une classe.

ParkingSpace dispose d'une Entrée.

L'entrée a un endroit ou, plus précisément, la distance de l'Entrée.

ParkingLotSign est une classe.

ParkingLot a un ParkingLotSign.

ParkingLot a un nombre fini d'espaces parking moyennant.

HandicappedParkingSpace est une sous-classe de ParkingSpace.

RegularParkingSpace est une sous-classe de ParkingSpace.

CompactParkingSpace est une sous-classe de ParkingSpace.

ParkingLot garde tableau d'espaces parking moyennant, et un tableau séparé de vacant espaces parking moyennant des distances par rapport à son Entrée.

ParkingLotSign peut être dit pour afficher "complet", ou "vide", ou "vide/normal/partiellement occupé" en l'appelant .Plein(), .Empty() ou .Normal()

Parker est une classe.

Parker peut se Garer().

Parker peut-Id().

Service de voiturier est une sous-classe de Parker que l'on peut appeler ParkingLot.FindVacantSpaceNearestEntrance(), qui retourne un ParkingSpace.

Parker a une ParkingSpace.

Parker peut appeler ParkingSpace.Prendre() et ParkingSpace.Quitter().

Parker appels Entrée.En entrant (la) et l'Entrée.Quitter() et ParkingSpace informe ParkingLot quand il est pris ou libérées, de sorte que ParkingLot peut déterminer si elle est pleine ou non. Si elle est de nouveau pleine ou nouvellement vide ou nouvellement pas plein ou vide, il devrait changer le ParkingLotSign.Plein() ou ParkingLotSign.Empty() ou ParkingLotSign.Normal().

HandicappedParker pourrait être une sous-classe de Parker et CompactParker une sous-classe de Parker et RegularParker une sous-classe de Parker. (peut-être exagéré, en fait.)

Dans cette solution, il est possible que Parker devrait être renommé en Voiture.

64voto

Srikant Aggarwal Points 101
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,
}

10voto

Pete Kirkham Points 32484

Les modèles n'existent pas isolément. Les structures que vous définissez pour une simulation d’entrée de voitures dans un parking, un système intégré qui vous guide vers un espace libre, un système de facturation de parking ou les guichets automatiques / guichets automatiques utilisés dans les parkings sont toutes différentes.

5voto

Scott M. Points 4907

vous auriez besoin d'un parking, qui est titulaire d'un tableau multidimensionnel (spécifié dans le constructeur) de type "espace". Le parking peut garder une trace de combien de places sont prises via des appels à des fonctions de remplissage et de vides.L'espace peut contenir un type énuméré qui indique à quel type d'espace qu'il est. L'espace dispose également d'une méthode de prise(). le valet de stationnement, il suffit de trouver le premier espace c'est ouvert, et mettre la voiture. Vous aurez également besoin d'une Voiture objet à mettre dans l'espace, qu'il détient s'il est handicapé, compact ou régulier du véhicule.


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;
}

5voto

Paul Keister Points 7179

Dans un Objet Orienté vers le parking, il n'y aura pas besoin de préposés parce que les voitures "savoir-parc".

Trouver un utilisable voiture sur le lot sera difficile; les modèles les plus courants ont tous leurs pièces mobiles exposées en tant que membre du public des variables, ou ils seront "entièrement encapsulé" les voitures n'ont pas de fenêtres ou de portes.

Les places de parking de notre OO stationnement de ne pas correspondre à la taille et la forme des voitures (un "impediance décalage" entre les espaces et les voitures)

Balises de licence sur notre terrain aura un point entre chaque lettre et chiffre. L'ascenseur parking ne sera disponible que pour les licences qui commencent par "_", et les licences qui commencent par "m_" sera remorqué.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X