Question d'interview Amazon: Concevoir un parking OO [fermé]


Concevoir un parking OO. Quelles classes et fonctions aura-t-il. Il devrait dire, plein, vide et aussi être en mesure de trouver une place pour le service de voiturier. Le lot dispose de 3 types de parking différents: régulier, handicapé et compact.

Merci!

 99
Author: ojblass, 2009-04-19

5 answers

Voici un début rapide pour faire tourner les engrenages...

ParkingLot est une classe.

ParkingSpace est une classe.

ParkingSpace a une entrée.

L'entrée a un emplacement ou plus précisément, une distance de l'entrée.

ParkingLotSign est une classe.

ParkingLot a un ParkingLotSign.

ParkingLot a un nombre fini d'espaces de stationnement.

HandicappedParkingSpace est une sous-classe de ParkingSpace.

RegularParkingSpace est un sous-classe de ParkingSpace.

CompactParkingSpace est une sous-classe de ParkingSpace.

ParkingLot conserve un tableau d'espaces de stationnement et un tableau distinct d'espaces de stationnement vacants par ordre de distance de son entrée.

ParkingLotSign peut être invité à afficher "plein", ou "vide", ou "vide/normal/partiellement occupé" en appelant .Plein(), .Empty() ou .Normal ()

Parker est une classe.

Parker peut se garer().

Parker peut-Id().

Valet est une sous-classe de Parker qui peut appeler ParkingLot.FindVacantSpaceNearestEntrance (), qui renvoie un espace de stationnement.

Parker a un espace de stationnement.

Parker peut appeler ParkingSpace.Prenez () et ParkingSpace.Libérer().

Parker appelle l'entrée.En entrant (la) et l'Entrée.Exiting () et ParkingSpace notifient ParkingLot lorsqu'il est pris ou libéré afin que ParkingLot puisse déterminer s'il est plein ou non. Si elle est de nouveau pleine ou nouvellement vide ou nouvellement pas plein ou vide, il devrait changer la ParkingLotSign.Full () ou ParkingLotSign.Vide() ou ParkingLotSign.Normal().

Handicapedparker 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 soit renommé Car.

 134
Author: Chris Morley, 2009-04-19 06:28:00
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,
}
 55
Author: Srikant Aggarwal, 2011-12-25 07:47:49

Les modèles n'existent pas isolément. Les structures que vous définissez pour une simulation de voitures entrant dans un parking, un système intégré qui vous guide vers un espace libre, un système de facturation de stationnement ou pour les portails/distributeurs automatiques de billets habituels dans les parkings sont toutes différentes.

 10
Author: Pete Kirkham, 2009-05-07 16:46:39

Dans un parking Orienté objet, il n'y aura pas besoin de préposés car les voitures "sauront se garer".

Trouver une voiture utilisable sur le lot sera difficile; les modèles les plus courants auront soit toutes leurs pièces mobiles exposées en tant que variables des membres publics, soit ce seront des voitures "entièrement encapsulées" sans fenêtres ni portes.

Les places de stationnement dans notre parking OO ne correspondent pas à la taille et à la forme des voitures (une "inadéquation d'impediance" entre les places et les voitures)

Les étiquettes de licence sur notre lot auront un point entre chaque lettre et chaque chiffre. Le stationnement handicapé ne sera disponible que pour les licences commençant par"_", et les licences commençant par" m_ " seront remorquées.

 5
Author: Paul Keister, 2009-04-19 06:31:51

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 du nombre d'espaces pris via des appels aux fonctions qui remplissent et vides des espaces.Space peut contenir un type énuméré qui indique de quel type d'espace il s'agit. L'espace a également une méthode taken (). pour le service de voiturier, il suffit de trouver le premier espace ouvert et d'y mettre la voiture. Vous aurez également besoin d'un objet de voiture à mettre dans l'espace, qui détient si elle est un véhicule handicapé, compact ou régulier.


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

 4
Author: Scott M., 2009-04-19 06:32:15