it-swarm.com.de

Modellierung eines Aufzugs mit objektorientierter Analyse und Konstruktion

Es gibt eine Reihe von Fragen, die in Interviews und Kursen häufig verwendet werden, wenn es um objektorientiertes Entwerfen und Analysieren geht. Dies ist einer von ihnen; Leider hat mein OOP Professor am College nie wirklich eine Antwort darauf gegeben, und deshalb habe ich mich gefragt.

Das Problem ist wie folgt: Entwerfen Sie einen grundlegenden Satz von Objekten/Methoden, die zum Simulieren einer Aufzugsbank verwendet werden sollen. Was sind die Objekte und ihre Attribute/Methoden?

Nehmen wir aus Gründen der Argumentation an, dass unser Gebäude zwanzig Stockwerke hat; Die untere Etage ist die Lobby, und die zweite Etage ist mit dem Parkhaus verbunden (daher betreten/verlassen Personen das Gebäude entweder in der unteren Etage oder in der zweiten Etage). Es gibt eine Aufzugsbank, die alle Stockwerke bedient. Es gibt drei Aufzugsschächte in der Aufzugsbank und einen Aufzug pro Schacht.

Was wäre der richtige Weg, dies in einem objektorientierten Modell zu modellieren?

133
Keith B

Zuerst gibt es eine Aufzugsklasse. Es hat eine Richtung (hoch, runter, stehen, warten), eine aktuelle Etage und eine Liste von Etagenanforderungen, die in der Richtung sortiert sind. Es erhält eine Anfrage von diesem Aufzug.

Dann gibt es eine Bank. Es enthält die Aufzüge und empfängt die Anfragen von den Etagen. Diese sind für alle aktiven Aufzüge geplant (nicht in Wartung).

Die Planung sieht wie folgt aus:

  • falls verfügbar, wählen Sie einen stehenden Aufzug für diese Etage.
  • wählen Sie einen Aufzug, der in diese Etage fährt.
  • wählen Sie einen stehenden Aufzug in einer anderen Etage.
  • wählen Sie ansonsten den Aufzug mit der niedrigsten Last.

Jeder Aufzug hat eine Reihe von Zuständen.

  • Wartung: Der Aufzug reagiert nicht auf externe Signale (nur auf eigene Signale).
  • Stehen: Der Aufzug ist auf einer Etage befestigt. Wenn ein Anruf eingeht. Und der Aufzug ist auf dieser Etage, die Türen öffnen sich. Wenn es sich auf einer anderen Etage befindet, bewegt es sich in diese Richtung.
  • Aufwärts: Der Aufzug fährt aufwärts. Jedes Mal, wenn es eine Etage erreicht, prüft es, ob es anhalten muss. Wenn ja, stoppt es und öffnet die Türen. Es wartet eine gewisse Zeit und schließt die Tür (es sei denn, es bewegt sich etwas durch sie). Dann entfernt es das Stockwerk aus der Anforderungsliste und prüft, ob eine weitere Anforderung vorliegt. Wenn dies der Fall ist, fährt der Aufzug wieder an Stand stehen.
  • Runter: wie oben, aber in umgekehrter Richtung.

Es gibt zusätzliche Signale:

  • alarm. Der Aufzug hält an. Und wenn es sich auf einer Etage befindet, öffnen sich die Türen, die Anforderungsliste wird gelöscht, die Anforderungen werden zurück zur Bank verschoben.
  • tür öffen. Öffnet die Türen, wenn sich ein Aufzug auf einer Etage befindet und nicht bewegt.
  • tür schließt. Schloß die Tür, wenn sie offen sind.

BEARBEITEN: Einige Aufzüge starten nicht unten/first_floor esp. im Falle von Wolkenkratzern.

min_floor & max_floor sind zwei zusätzliche Attribute für Elevator.

162
Toon Krijthe

Donald Knuths The Art of Computer Programming Vol.1 demonstriert den Aufzug und die Datenstrukturen. Knuth präsentiert eine sehr gründliche Diskussion und Programm.

Knuth (1997) "Information Structures", Die Kunst der Computerprogrammierung Bd. 1 S. 302-308

18
vine'th

Ich habe viele Varianten dieses Problems gesehen. Einer der Hauptunterschiede (der die Schwierigkeit bestimmt) besteht darin, ob es einen zentralisierten Versuch gibt, ein "intelligentes und effizientes System" mit Lastausgleich zu schaffen (z. B. morgens mehr ungenutzte Aufzüge in die Lobby zu schicken). In diesem Fall wird das Design ein ganzes Subsystem mit wirklich unterhaltsamem Design enthalten.

Ein vollständiges Design ist offensichtlich zu viel, um es hier zu präsentieren, und es gibt viele Alternativen. Die Breite ist auch nicht klar. In einem Interview versuchen sie herauszufinden, wie Sie denken würden. Dies sind jedoch einige der Dinge, die Sie benötigen würden:

  1. Darstellung der zentralen Steuerung (sofern vorhanden).

  2. Darstellungen von Aufzügen

  3. Darstellungen der Schnittstelleneinheiten des Aufzugs (diese können von Aufzug zu Aufzug unterschiedlich sein). Natürlich auch Ruftasten auf jeder Etage usw.

  4. Darstellungen der Pfeile oder Indikatoren auf jeder Etage (fast eine "Ansicht" des Aufzugsmodells).

  5. Darstellung eines Menschen und einer Ladung (kann wichtig sein, um maximale Belastungen zu berücksichtigen)

  6. Repräsentation des Gebäudes (in einigen Fällen, da bestimmte Stockwerke zeitweise gesperrt sein können, etc.)

17
Uri

Sehen:

Lu Luo, A UML Documentation for a Elevator System
Distributed Embedded Systems, Fall 2000
Ph.D. Project Report
Carneghie Mellon University

Link

7
Arun
4
some_other_guy

Hauptsache, Sie müssen sich Sorgen machen, wie Sie den Aufzug darüber informieren, dass er sich nach oben oder unten bewegen muss. und auch, wenn Sie eine zentralisierte Klasse haben, um dieses Verhalten zu steuern, und wie Sie das Steuerelement verteilen könnten.

Es scheint, als ob es sehr einfach oder sehr kompliziert sein kann. Wenn wir nicht die Nebenläufigkeit oder die Zeit nehmen, die ein Aufzug benötigt, um an einen Ort zu gelangen, scheint dies einfach zu sein, da wir nur den Zustand des Aufzugs überprüfen müssen, etwa ob er sich nach oben oder unten bewegt oder stillsteht. Aber wenn wir Elevator Runnable implementieren lassen und ständig eine Warteschlange überprüfen und synchronisieren (linkedList). Eine Controller-Klasse weist zu, welche Etage in die Warteschlange eingereiht werden soll. Wenn die Warteschlange leer ist, wartet die run () -Methode (queue.wait ()). Wenn diesem Aufzug eine Etage zugewiesen ist, ruft sie queue.notify () auf, um die run () -Methode aufzuwecken, und run ( ) ruft die Methode goToFloor (queue.pop ()) auf. Dies wird das Problem zu kompliziert machen. Ich habe versucht, es auf Papier zu schreiben, glaube aber nicht, dass es funktioniert. Es scheint, als müssten wir das Problem der Nebenläufigkeit oder des Timings hier nicht wirklich berücksichtigen, aber wir müssen irgendwie eine Warteschlange verwenden, um das Steuerelement zu verteilen.

Irgendein Vorschlag?

2
user3216886

Was zu beachten ist, während Entwerfen das Aufzugssystem,

Elevator
Floor/Location Identifier
Number of steps
Rotation speed
Daterange
InstallationDate
MaintainenceDate
Department Identifier
AllowedWeight
Detail / Description
Poison Ratio (Statistics)
Start
Stop
SetDirection
SetRotationSpeed
EmergencyStop = Stop + Alert
EmergencyAccidentSenser Handler

Jeder Knopfdruck führt zu einer Aufzugsanfrage, die bedient werden muss. Jede dieser Anforderungen wird an einem globalen Ort verfolgt

Die Anzahl der Aufzüge im Gebäude wird vom Benutzer festgelegt. Das Gebäude wird eine feste Anzahl von Etagen enthalten. Die Anzahl der Passagiere, die in den Aufzug passen, wird festgelegt. Die Passagiere werden gezählt, wenn sie den Aufzug in der Zieletage verlassen. Die Zieletage wird anhand eines "zufälligen" Poisson-Intervalls bestimmt. Wenn alle Fahrgäste im Aufzug ihre Zieletagen erreicht haben, kehrt der Aufzug in die Lobby zurück, um weitere Fahrgäste abzuholen

2
user2603625