Amazon Interview Frage: Entwerfen Sie einen OO-Parkplatz [geschlossen]
114
Entwerfen Sie einen OO-Parkplatz. Welche Klassen und Funktionen wird es haben. Es sollte voll, leer sein und auch Platz für den Parkservice finden. Das Grundstück verfügt über 3 verschiedene Arten von Parkplätzen: reguläre, behinderte und kompakte.
Sind Sie aufgesprungen und haben ausgerufen: "Was hat das mit Büchern zu tun?" und stürmen?
JP Alioto
Das wurde ich von einem Mann gefragt, der in eine andere Situation geriet. Als ich ein fast lehrbuchartiges Gang of Four-Muster passend verwendete, sagte er: "Zumindest kennen Sie Polymorphismus." Dann wurde mir für mein Kommen gedankt und sie sagten, sie würden es mich wissen lassen. Ich war nicht beeindruckt.
David Thornley
Ist das nicht ein Problem mit der Speicherverwaltung?
Sanjeev Kumar Dangi
1
Mussten Sie bei dieser Frage tatsächlich die Klassen und Funktionen auf CollabEdit aufschreiben oder mussten Sie nur darüber sprechen?
Hier ist ein schneller Start, um die Gänge zum Laufen zu bringen ...
ParkingLot ist eine Klasse.
ParkingSpace ist eine Klasse.
ParkingSpace hat einen Eingang.
Der Eingang hat einen Ort oder genauer gesagt eine Entfernung vom Eingang.
ParkingLotSign ist eine Klasse.
ParkingLot hat ein ParkingLotSign.
ParkingLot hat eine begrenzte Anzahl von Parkplätzen.
HandicappedParkingSpace ist eine Unterklasse von ParkingSpace.
RegularParkingSpace ist eine Unterklasse von ParkingSpace.
CompactParkingSpace ist eine Unterklasse von ParkingSpace.
ParkingLot verwaltet eine Reihe von Parkplätzen und eine separate Reihe von freien Parkplätzen in der Reihenfolge der Entfernung vom Eingang.
ParkingLotSign kann durch Aufrufen von .Full (), .Empty () oder .Normal () angewiesen werden, "voll" oder "leer" oder "leer / normal / teilweise belegt" anzuzeigen.
Parker ist eine Klasse.
Parker kann parken ().
Parker kann () entparken.
Valet ist eine Unterklasse von Parker, die ParkingLot.FindVacantSpaceNearestEntrance () aufrufen kann und einen ParkingSpace zurückgibt.
Parker hat einen Parkplatz.
Parker kann ParkingSpace.Take () und ParkingSpace.Vacate () aufrufen.
Parker ruft Entrance.Entering () und Entrance.Exiting () auf und ParkingSpace benachrichtigt ParkingLot, wenn es genommen oder geräumt wird, 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 ParkingLotSign.Full () oder ParkingLotSign.Empty () oder ParkingLotSign.Normal () ändern.
HandicappedParker kann eine Unterklasse von Parker und CompactParker eine Unterklasse von Parker und RegularParker eine Unterklasse von Parker sein. (Könnte tatsächlich übertrieben sein.)
In dieser Lösung ist es möglich, dass Parker in Auto umbenannt wird.
Warum muss ParkingSpace eine Klasse sein? Ich sehe keine Notwendigkeit, ein Objekt dafür zu erstellen? Jeder Parkplatz muss jederzeit behindertengerecht, normal oder kompakt sein. ParkingSpace sollte eher eine Schnittstelle sein.
name_masked
11
Wahrscheinlich können wir dem Parkplatz Stockwerke hinzufügen.
Barry
13
Warum gibt es die ParkingLotSign-Klasse? Würde ein Attribut (z. B. bool isFull;) nicht funktionieren?
Chinmay Nerurkar
3
Warum den Parkplatz erweiterbar machen? Warum nicht einfach ein isHandicapped-Feld und ein isCompact-Feld zum Parkplatz haben?
Verwenden Sie HashMap anstelle von Listen mit der Fahrzeugnummer als Schlüssel für die Effizienz
sanath_p
5
Nachdem Sie das Fahrzeug freigegeben haben, vacantParkingSpaceswird es nicht mehr sortiert. Sie müssen es so sortieren, dass findNearestVacantder nächste Parkplatz zurückgegeben wird.
Laike9m
1
Warum wird die Funktion benannt findNearestVacant, wenn ihre Implementierung nur einen freien Raum findet, nicht unbedingt den "nächsten"? Warum nicht "findVacant"? Obwohl es gut gewesen wäre, den "nächsten" Raum unter Verwendung einiger in der Klasse gespeicherter Zustände zurückzugeben. Vielleicht können wir die Abstände vom "Eingang" und "Ausgang" in der Klasse "Raum" speichern, damit auch "am nächsten" berechnet werden kann, oder wir können einfach die Koordinaten des Raums, so dass die Abstände von allen Eingängen und Ausgänge können bei Bedarf berechnet werden.
Nawaz
1
Außerdem sollte die Funktion parkVehicleeinen booleschen Wert zurückgeben, der angibt, ob das Fahrzeug geparkt wurde oder nicht.
Nawaz
Keine Nullprüfungen. Wird NPE werfen
Hitesh
10
Modelle existieren nicht isoliert. Die Strukturen, die Sie für eine Simulation von Autos definieren würden, die auf einen Parkplatz fahren, ein eingebettetes System, das Sie zu einem freien Platz führt, ein Parkabrechnungssystem oder für die auf Parkplätzen üblichen automatisierten Tore / Fahrkartenautomaten sind alle unterschiedlich.
Auf einem objektorientierten Parkplatz werden keine Begleiter benötigt, da die Autos "wissen, wie man parkt".
Es wird schwierig sein, ein brauchbares Auto auf dem Grundstück zu finden. Bei den gängigsten Modellen werden entweder alle beweglichen Teile als Variablen für öffentliche Mitglieder angezeigt, oder es handelt sich um "vollständig gekapselte" Autos ohne Fenster oder Türen.
Die Parkplätze auf unserem OO-Parkplatz entsprechen nicht der Größe und Form der Autos (eine "Impedanzfehlanpassung" zwischen den Parkplätzen und den Autos).
Lizenzetiketten auf unserem Los haben einen Punkt zwischen jedem Buchstaben und jeder Ziffer. Behindertenparkplätze sind nur für Lizenzen verfügbar, die mit "_" beginnen, und Lizenzen, die mit "m_" beginnen, werden abgeschleppt.
Sie benötigen einen Parkplatz, der ein mehrdimensionales Array (im Konstruktor angegeben) vom Typ "Leerzeichen" enthält. Der Parkplatz kann verfolgen, wie viele Plätze durch Aufrufe von Funktionen belegt werden, die Räume füllen und leeren. Der Platz kann einen Aufzählungstyp enthalten, der angibt, um welche Art von Platz es sich handelt. Space hat auch eine Methode genommen (). Suchen Sie für den Parkservice einfach den ersten offenen Platz und stellen Sie das Auto dort ab. Sie benötigen auch ein Autoobjekt, um es in den Raum zu stellen, das hält, 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;
}
Antworten:
Hier ist ein schneller Start, um die Gänge zum Laufen zu bringen ...
ParkingLot ist eine Klasse.
ParkingSpace ist eine Klasse.
ParkingSpace hat einen Eingang.
Der Eingang hat einen Ort oder genauer gesagt eine Entfernung vom Eingang.
ParkingLotSign ist eine Klasse.
ParkingLot hat ein ParkingLotSign.
ParkingLot hat eine begrenzte Anzahl von Parkplätzen.
HandicappedParkingSpace ist eine Unterklasse von ParkingSpace.
RegularParkingSpace ist eine Unterklasse von ParkingSpace.
CompactParkingSpace ist eine Unterklasse von ParkingSpace.
ParkingLot verwaltet eine Reihe von Parkplätzen und eine separate Reihe von freien Parkplätzen in der Reihenfolge der Entfernung vom Eingang.
ParkingLotSign kann durch Aufrufen von .Full (), .Empty () oder .Normal () angewiesen werden, "voll" oder "leer" oder "leer / normal / teilweise belegt" anzuzeigen.
Parker ist eine Klasse.
Parker kann parken ().
Parker kann () entparken.
Valet ist eine Unterklasse von Parker, die ParkingLot.FindVacantSpaceNearestEntrance () aufrufen kann und einen ParkingSpace zurückgibt.
Parker hat einen Parkplatz.
Parker kann ParkingSpace.Take () und ParkingSpace.Vacate () aufrufen.
Parker ruft Entrance.Entering () und Entrance.Exiting () auf und ParkingSpace benachrichtigt ParkingLot, wenn es genommen oder geräumt wird, 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 ParkingLotSign.Full () oder ParkingLotSign.Empty () oder ParkingLotSign.Normal () ändern.
HandicappedParker kann eine Unterklasse von Parker und CompactParker eine Unterklasse von Parker und RegularParker eine Unterklasse von Parker sein. (Könnte tatsächlich übertrieben sein.)
In dieser Lösung ist es möglich, dass Parker in Auto umbenannt wird.
quelle
quelle
vacantParkingSpaces
wird es nicht mehr sortiert. Sie müssen es so sortieren, dassfindNearestVacant
der nächste Parkplatz zurückgegeben wird.findNearestVacant
, wenn ihre Implementierung nur einen freien Raum findet, nicht unbedingt den "nächsten"? Warum nicht "findVacant"? Obwohl es gut gewesen wäre, den "nächsten" Raum unter Verwendung einiger in der Klasse gespeicherter Zustände zurückzugeben. Vielleicht können wir die Abstände vom "Eingang" und "Ausgang" in der Klasse "Raum" speichern, damit auch "am nächsten" berechnet werden kann, oder wir können einfach die Koordinaten des Raums, so dass die Abstände von allen Eingängen und Ausgänge können bei Bedarf berechnet werden.parkVehicle
einen booleschen Wert zurückgeben, der angibt, ob das Fahrzeug geparkt wurde oder nicht.Modelle existieren nicht isoliert. Die Strukturen, die Sie für eine Simulation von Autos definieren würden, die auf einen Parkplatz fahren, ein eingebettetes System, das Sie zu einem freien Platz führt, ein Parkabrechnungssystem oder für die auf Parkplätzen üblichen automatisierten Tore / Fahrkartenautomaten sind alle unterschiedlich.
quelle
Auf einem objektorientierten Parkplatz werden keine Begleiter benötigt, da die Autos "wissen, wie man parkt".
Es wird schwierig sein, ein brauchbares Auto auf dem Grundstück zu finden. Bei den gängigsten Modellen werden entweder alle beweglichen Teile als Variablen für öffentliche Mitglieder angezeigt, oder es handelt sich um "vollständig gekapselte" Autos ohne Fenster oder Türen.
Die Parkplätze auf unserem OO-Parkplatz entsprechen nicht der Größe und Form der Autos (eine "Impedanzfehlanpassung" zwischen den Parkplätzen und den Autos).
Lizenzetiketten auf unserem Los haben einen Punkt zwischen jedem Buchstaben und jeder Ziffer. Behindertenparkplätze sind nur für Lizenzen verfügbar, die mit "_" beginnen, und Lizenzen, die mit "m_" beginnen, werden abgeschleppt.
quelle
Sie benötigen einen Parkplatz, der ein mehrdimensionales Array (im Konstruktor angegeben) vom Typ "Leerzeichen" enthält. Der Parkplatz kann verfolgen, wie viele Plätze durch Aufrufe von Funktionen belegt werden, die Räume füllen und leeren. Der Platz kann einen Aufzählungstyp enthalten, der angibt, um welche Art von Platz es sich handelt. Space hat auch eine Methode genommen (). Suchen Sie für den Parkservice einfach den ersten offenen Platz und stellen Sie das Auto dort ab. Sie benötigen auch ein Autoobjekt, um es in den Raum zu stellen, das hält, ob es sich um ein behindertes, kompaktes oder normales Fahrzeug handelt.
quelle