Моделирование лифта с использованием объектно-ориентированного анализа и проектирования [закрыто]



Существует ряд вопросов, которые, как представляется, широко используются в интервью и классах, когда речь заходит об объектно-ориентированном проектировании и анализе. Это один из них; к сожалению, мой профессор ООП в колледже никогда не давал ответа на него, и поэтому мне было интересно.



проблема заключается в следующем: разработать базовый набор объектов/методов, которые будут использоваться для моделирования лифта банка. Каковы объекты и их атрибуты/методы?



ради спора, предположим, что наше здание имеет двадцать этажей; нижний этаж-вестибюль, а второй этаж соединяется с гаражом (поэтому люди будут входить/выходить из здания либо на нижнем этаже, либо на втором этаже). Есть один лифт банк, который обслуживает все этажи; есть три шахты лифта в банке лифта, и один лифт на шахту.



каков был бы правильный способ моделирования этого в объектно-ориентированной модели?

598   7  

7 ответов:

во-первых есть лифт класс. Он имеет направление (вверх, вниз, стенд, обслуживание), текущий этаж и список запросов пола, отсортированных по направлению. Он получает запрос от этого лифта.

тогда есть банк. Он содержит лифты и получает запросы от этажей. Они запланированы ко всем активным лифтам (не в обслуживании).

планирование будет выглядеть так:

  • если выбрать стоящий лифт для этого этаж.
  • еще подобрать лифт на этот этаж.
  • еще выберите стоящий лифт на другом этаже.
  • еще выберите лифт с самой низкой нагрузкой.

каждый лифт имеет набор состояний.

  • техническое обслуживание: лифт не реагирует на внешние сигналы (только на свои собственные сигналы).
  • стенд: лифт закреплен на полу. Если он получает вызов. И лифт находится на том этаже, двери открыть. Если он находится на другом этаже, он движется в этом направлении.
  • вверх: лифт движется вверх. Каждый раз, когда он достигает пола, он проверяет, нужно ли ему остановиться. Если это так, то он останавливается и открывает двери. Он ждет определенное количество времени и закрывает дверь (если что-то движется через них. Затем он удаляет пол из списка запросов и проверяет, есть ли другой запрос. Если лифт начнет двигаться снова. Если нет, то он входит в государственный стенд.
  • вниз: как вверх, но в обратное направление.

есть дополнительные сигналы:

  • сигнал тревоги. Лифт останавливается. И если он находится на этаже, двери открываются, список запросов очищается, запросы перемещаются обратно в банк.
  • открыть дверь. Открывает двери, если лифт находится на этаже и не движется.
  • дверь закрывается. Закройте дверь, если они открыты.

изменить: Некоторые лифты не начинаются снизу / first_floor esp. в случае небоскребы.

min_floor & max_floor-это два дополнительных атрибута для лифта.

Дональд Кнут Искусство программирования том.1 имеет демонстрацию лифта и данных-структур. Кнут представляет очень тщательную дискуссию и программу.

Knuth (1997)" Информационные Структуры",Искусство программирования Vol. 1 стр. 302-308

Я видел много вариантов этой проблемы. Одно из основных различий (которое определяет сложность) заключается в том, есть ли какая-то централизованная попытка иметь "умную и эффективную систему", которая будет иметь балансировку нагрузки (например, отправлять больше простаивающих лифтов в лобби утром). Если это так, то дизайн будет включать в себя целую подсистему с действительно забавным дизайном.

полный дизайн, очевидно, слишком много, чтобы присутствующие здесь и есть много altenatives. Широты тоже нет четкий. В интервью они попытаются выяснить, как вы думаете. Тем не менее, это некоторые из вещей, которые вам понадобятся:

  1. представление центрального контроллера (при условии, что он есть).

  2. представлений лифтов

  3. представления интерфейсных блоков лифта (они могут отличаться от лифта к лифту). Очевидно также кнопки вызова на каждом этаже и т. д.

  4. представления стрелок или индикаторов на каждом этаже (почти "вид" модели лифта).

  5. представление человека и груза (может быть важно для факторинга максимальных нагрузок)

  6. представительства здания (в некоторых случаях, как определенные этажи могут быть заблокированы в разы и т. д.)

посмотреть:

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

ссылке

вещь должна быть рассмотрена в то время как проектирование система лифта,

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

каждое нажатие кнопки приводит к запросу лифта, который должен быть подан. Каждый из этих запросов отслеживается в глобальном месте

количество лифтов в здании будет определяться пользователем. Здание будет содержать фиксированное количество этажей. Количество пассажиров, которые могут поместиться в лифте, будет фиксированным. Пассажиры будут подсчитаны, как они покидают лифт на их этаже назначения. Пол назначения будет определен с использованием "случайного" интервала Пуассона. Когда все пассажиры в лифте достигнут своих этажей назначения, лифт вернется в вестибюль, чтобы забрать больше пассажиров

главное, чтобы беспокоиться о том, как бы вы уведомить лифт, что он должен двигаться вверх или вниз. а также если у вас будет централизованный класс для управления этим поведением и как вы можете распределить этот элемент управления.

кажется, что это может быть очень просто или очень сложно. Если мы не берем параллелизм или время для лифта, чтобы добраться до одного места, то кажется, что это будет просто, так как нам просто нужно проверить состояние лифта, например, он движется вверх или вниз, или стоя на месте. Но если мы делаем лифт реализовать Runnable, и постоянно проверять и синхронизировать очередь (linkedList). Класс контроллера назначит, на какой этаж идти в очереди. Когда очередь пуста, метод run () будет ждать (queue.подождите ()), когда этаж назначен этому лифту, он вызовет очередь.сообщить (), чтобы разбудить метод run (), и метод run() будет вызывать goToFloor(очереди.поп.))( Это сделает проблему слишком сложной. Я пытался написать это на бумаге, но не думаю, что это завод. Похоже, что нам действительно не нужно учитывать проблему параллелизма или синхронизации, но нам нужно как-то использовать очередь для распределения элемента управления.

какие будут предложения?

Comments

    Ничего не найдено.