Modelowanie windy z wykorzystaniem analizy i projektowania obiektowego [zamknięty]

Istnieje zestaw pytań, które wydają się być powszechnie używane w wywiadach i klasach, jeśli chodzi o projektowanie i analizę obiektową. To jest jeden z nich; niestety, mój profesor OOP w college ' u nigdy nie dał odpowiedzi na to, i tak się zastanawiałem.

Problem jest następujący: Zaprojektuj podstawowy zestaw obiektów / metod do symulacji banku windy. Czym są obiekty i ich atrybuty/metody?

Dla dobra argumentacji, Załóżmy że nasz budynek ma dwadzieścia pięter; dolne piętro to hol, a drugie piętro łączy się z garażem (dlatego ludzie będą wchodzić/wychodzić z budynku na parterze lub na drugim piętrze). Istnieje jeden bank windy, który obsługuje wszystkie piętra; istnieją trzy szyby windy w banku windy i jedna winda na szyb.

Jaki byłby właściwy sposób modelowania tego w modelu obiektowym?

Author: Saurav Sahu, 2009-01-29

7 answers

Najpierw jest klasa windy. Ma kierunek (góra, dół, stand, konserwacja), aktualną podłogę i listę żądań piętra posortowanych w kierunku. Otrzymuje prośbę z tej windy.

Potem jest bank. Zawiera windy i odbiera wnioski z pięter. Są one zaplanowane do wszystkich aktywnych Wind (Nie w konserwacji).

Harmonogram będzie wyglądał następująco:

  • jeśli jest dostępny, wybierz stojącą windę na to piętro.
  • else wybierz windę jadącą na to piętro.
  • Wybierz windę stojącą na drugim piętrze.
  • Wybierz windę z NAJNIŻSZYM obciążeniem.

Każda Winda ma zestaw Stanów.

    [[7]}Konserwacja: Winda nie reaguje na sygnały zewnętrzne (tylko na sygnały własne).
  • Stojak: winda jest zamocowana na podłodze. Jeśli otrzyma połączenie. Winda jest na tym piętrze, drzwi się otwierają. Jeśli jest na innym piętrze, porusza się w tym kierunek.
  • [[7]}w górę: Winda porusza się w górę. Za każdym razem, gdy dociera do podłogi, sprawdza, czy musi się zatrzymać. Jeśli tak, to zatrzymuje się i otwiera drzwi. Czeka przez pewien czas i zamyka drzwi (chyba, że coś przez nie przechodzi. Następnie usuwa podłogę z listy żądań i sprawdza, czy istnieje inne żądanie. Jeśli tak, Winda zaczyna się poruszać ponownie. Jeśli nie wejdzie do stanowego stand.
  • dół: jak w górę, ale w odwrotnym kierunku.

Istnieją dodatkowe sygnały:

    Alarm. Winda zatrzymuje się. A jeśli jest na podłodze, drzwi się otwierają, lista żądań jest wyczyszczona, żądania są przenoszone z powrotem do banku. Drzwi otwarte. Otwiera drzwi, jeśli Winda znajduje się na podłodze i nie porusza się. Drzwi się zamykają. Zamknąć drzwi, jeśli są otwarte.

Edytuj: Niektóre windy nie zaczynają się na dole / first_floor esp. w przypadku wieżowców.

Min_floor & max_floor to dwa dodatkowe atrybuty windy.

 148
Author: Toon Krijthe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-19 18:16:08

Donald Knuth ' s The Art of Computer Programming Vol.1 ma demonstrację windy i struktur danych. Knuth przedstawia bardzo szczegółową dyskusję i program.

[[0]} Knuth (1997) "struktury informacyjne", Sztuka programowania komputerowego [4]} Vol. 1 PP. 302-308
 17
Author: vine'th,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-01 08:18:55

Widziałem wiele wariantów tego problemu. Jedną z głównych różnic (która określa trudność) jest to, czy istnieje jakaś scentralizowana próba posiadania "inteligentnego i wydajnego systemu", który miałby równoważenie obciążenia(np. Jeśli tak jest, projekt będzie zawierał cały podsystem z naprawdę zabawnym projektem.

Pełny projekt to oczywiście zbyt wiele do zaprezentowania tutaj i jest wiele altenatyw. Szerokość również nie jest jasna. W Wywiad, spróbują dowiedzieć się, jak myślisz. Jednak są to niektóre z rzeczy, których potrzebujesz:

  1. Reprezentacja centralnego kontrolera (zakładając, że taki jest).

  2. Reprezentacje Wind

  3. Reprezentacje jednostek interfejsu windy (mogą one różnić się od winda do windy). Oczywiście również przyciski wywołania na każdym piętrze itp.

  4. Reprezentacje strzałek lub wskaźników na każdym piętro (prawie "widok" modelu windy).

  5. Reprezentacja człowieka i ładunku (może być ważna dla uwzględnienia maksymalnych obciążeń)

  6. Reprezentacja budynku (w niektórych przypadkach, ponieważ niektóre piętra mogą być czasami zablokowane, itp.)

 17
Author: Uri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-13 00:32:05

Zobacz:

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

Link

 7
Author: Arun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-05 17:04:15
 4
Author: some_other_guy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-17 10:30:08

Rzecz należy wziąć pod uwagę podczas projektowania Systemu Wind,

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

Każde naciśnięcie przycisku powoduje żądanie windy, które musi zostać obsłużone. Każde z tych żądań jest śledzone w miejscu globalnym

Liczba wind w budynku zostanie określona przez użytkownika. Budynek będzie zawierał stałą liczbę pięter. Liczba pasażerów, które mogą zmieścić się w windzie zostanie ustalona. Pasażerowie będą liczeni, gdy opuszczą windę na swoim miejsce przeznaczenia. Poziom docelowy zostanie określony za pomocą "Losowego" interwału Poissona. Kiedy wszyscy pasażerowie w windzie osiągną swoje docelowe piętra, Winda powróci do holu, aby odebrać więcej pasażerów

 2
Author: user2603625,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-21 06:30:22

Najważniejsze, o co się martwić, to jak powiadomić windę, że musi poruszać się w górę lub w dół. a także, jeśli masz zamiar mieć scentralizowaną klasę do kontrolowania tego zachowania i jak możesz rozpowszechniać kontrolę.

Wydaje się, że może to być bardzo proste lub bardzo skomplikowane. Jeśli nie bierzemy czasu na dotarcie windy do jednego miejsca, to wydaje się, że będzie to proste, ponieważ wystarczy sprawdzić Stany windy, np. czy porusza się ona w górę, czy w dół, czy stojąc w miejscu. Ale jeśli sprawimy, że implementacja windy będzie działać, i stale sprawdzamy i synchronizujemy kolejkę (linkedList). Klasa kontrolera przypisze, które piętro ma znaleźć się w kolejce. Gdy kolejka jest pusta, metoda run () będzie czekać (queue.wait ()), gdy piętro jest przypisane do tej windy, wywoła kolejkę.notify (), aby obudzić metodę run (), a run () wywoła goToFloor (queue.pop()). To sprawi, że problem będzie zbyt skomplikowany. Próbowałem napisać to na papierze, ale nie myśl o tym. działa. Wygląda na to, że tak naprawdę nie musimy brać pod uwagę współbieżności czy problemów z czasem, ale musimy jakoś użyć kolejki do dystrybucji kontrolki.

Jakaś sugestia?

 2
Author: user3216886,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-11 18:13:08