oop - versandmitarbeiter - Amazon-Interview Frage: Entwerfen Sie einen OO-Parkplatz



amazon vorstellungsgespräch versandmitarbeiter (4)

Entwerfen Sie einen OO-Parkplatz. Welche Klassen und Funktionen wird es haben? Es sollte sagen, voll, leer und auch in der Lage sein, einen Parkplatz für Valet zu finden. Das Grundstück hat 3 verschiedene Arten von Parkplätzen: normal, behindert und kompakt.

Vielen Dank!

https://src-bin.com


Answer #1

Hier ist ein kurzer Start um die Zahnräder zu drehen ...

ParkingLot ist eine Klasse.

ParkingSpace ist eine Klasse.

ParkingSpace hat einen Eingang.

Der Eingang hat einen Ort oder genauer, Entfernung vom Eingang.

ParkingLotSign ist eine Klasse.

ParkingLot hat ein ParkingLotSign.

ParkingLot hat eine endliche Anzahl von ParkingSpaces.

HandicappedParkingSpace ist eine Unterklasse von ParkingSpace.

RegularParkingSpace ist eine Unterklasse von ParkingSpace.

CompactParkingSpace ist eine Unterklasse von ParkingSpace.

ParkingLot hält eine Reihe von ParkingSpaces und eine separate Reihe von freien ParkingSpaces in der Reihenfolge der Entfernung von seinem Eingang.

ParkingLotSign kann durch Aufruf von .Full (), .Empty () oder .Normal () aufgefordert werden, "full", "empty" oder "blank / normal / partially occupied" anzuzeigen.

Parker ist eine Klasse.

Parker kann parken ().

Parker kann Unpark ().

Valet ist eine Unterklasse von Parker, die ParkingLot.FindVacantSpaceNearestEntrance () aufrufen kann, die einen ParkingSpace zurückgibt.

Parker hat einen Parkplatz.

Parker kann ParkingSpace.Take () und ParkingSpace.Vacate () anrufen.

Parker ruft Entrance.Entering () und Entrance.Exiting () an und ParkingSpace benachrichtigt ParkingLot, wenn es genommen oder geräumt wurde, damit ParkingLot feststellen kann, ob es voll ist oder nicht. Wenn es neu voll oder neu leer oder neu nicht voll oder leer ist, sollte es die ParkingLotSign.Full () oder ParkingLotSign.Empty () oder ParkingLotSign.Normal () ändern.

HandicappedParker könnte eine Unterklasse von Parker und CompactParker eine Unterklasse von Parker und RegularParker eine Unterklasse von Parker sein. (könnte eigentlich übertrieben sein.)

In dieser Lösung ist es möglich, dass Parker in Auto umbenannt werden sollte.


Answer #2

In einem Objektorientierten Parkplatz werden keine Teilnehmer benötigt, da die Autos "wissen, wie man parkt".

Ein brauchbares Auto auf dem Grundstück zu finden wird schwierig sein; Bei den gängigsten Modellen werden entweder alle beweglichen Teile als öffentliche Variablen angezeigt oder es handelt sich um vollständig gekapselte Fahrzeuge ohne Fenster oder Türen.

Die Parkplätze in unserem OO-Parkplatz passen nicht zu der Größe und Form der Autos (ein "Impediance Mismatch" zwischen den Räumen und den Autos)

Lizenz-Tags auf unserem Grundstück haben einen Punkt zwischen jedem Buchstaben und jeder Ziffer. Behinderte Parkplätze sind nur für Lizenzen verfügbar, die mit "_" beginnen, und Lizenzen, die mit "m_" beginnen, werden abgeschleppt.


Answer #3

Sie benötigen einen Parkplatz, der ein mehrdimensionales Array (im Konstruktor angegeben) vom Typ "space" enthält. Der Parkplatz kann verfolgen, wie viele Räume über Aufrufe von Funktionen belegt werden, die Leerzeichen ausfüllen und leeren. Der Raum kann einen Aufzählungstyp enthalten, der angibt, um welchen Raum es sich handelt. Space hat auch eine Methode (). Für den Parkservice, finden Sie einfach den ersten Raum, der geöffnet ist und legen Sie das Auto dort. Sie brauchen auch ein Auto-Objekt, das in den Raum passt, egal ob es sich um ein behindertes, kompaktes oder normales Fahrzeug handelt.


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


Answer #4
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,
}




oop