oop - 使用面向对象的分析和设计对电梯进行建模

标签 oop design-patterns language-agnostic

在面向对象的设计和分析方面,有一组问题似乎在面试和类里面很常见。这是其中之一;不幸的是,我在大学的 OOP 教授从未真正给出过答案,所以我一直在想。

问题如下:设计一组基本对象/方法用于模拟电梯组。对象及其属性/方法是什么?

为了便于讨论,我们假设我们的大楼有二十层;底层为大堂,二层与 parking 场相连(因此,人们进出建筑要么在底层,要么在二层)。有一部电梯组服务所有楼层;电梯组共有3个电梯井道,每个井道一部电梯。

在面向对象模型中对此进行建模的正确方法是什么?

最佳答案

首先有一个电梯类(class)。它有一个方向(向上、向下、站立、维护)、当前楼层以及按该方向排序的楼层请求列表。它接收来自该电梯的请求。

然后是一家银行。它包含电梯并接收来自楼层的请求。这些被安排到所有事件的电梯(不在维护中)。

日程安排如下:

  • 如果可用,请为该楼层选择一台站立式电梯。
  • 否则选择一部电梯前往该楼层。
  • 否则选择其他楼层的站立式电梯。
  • 否则选择负载最低的电梯。

每个电梯都有一组状态。

  • 维护:电梯不会对外部信号使用react(仅对自身信号使用react)。
  • 站立:电梯固定在楼层上。如果它接到电话。电梯就在那个楼层,门开着。如果它在另一层,它就会朝那个方向移动。
  • 向上:电梯向上移动。每次到达楼层时,它都会检查是否需要停止。如果是这样,它就会停下来并打开门。它等待一定时间并关上门(除非有人正在通过它们)。然后它从请求列表中删除该楼层并检查是否有另一个请求。如果有,电梯再次开始移动。如果没有,它进入国家立场。
  • 向下:与向上类似,但方向相反。

还有其他信号:

  • 警报。电梯停了。如果是在一个楼层,门会打开,请求列表会被清除,请求会移回银行。
  • 门开着。如果电梯位于楼层且未移动,则打开门。
  • 门关上了。如果门开着,就把门关上。

编辑: 有些电梯不是从底层/一楼开始,尤其是。如果是摩天大楼。

min_floor 和 max_floor 是电梯的两个附加属性。

关于oop - 使用面向对象的分析和设计对电梯进行建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/493276/

相关文章:

c++ - 如何在另一边创建重载 +

php - 我应该为游戏使用多个类吗?

sql - 社交网站的 ORM 有意义吗?

algorithm - 在二叉树中找到两个最远的元素

oop - 如何建模进行计算并存储它们的类?

c++ - 对象在返回之前被销毁

c# - 管理对象状态/设置的模式?

c++ - 在 C++ 中,如何有效地在两个类之间共享数据?

操作大型数据类的多个 "worker classes"的 C++ 模式

language-agnostic - 当提到 'Number Crunching' 时, 'intensive' 有多密集?