当涉及到面向对象的设计和分析时,有一组问题似乎在面试和课堂上很常见。这是其中之一;不幸的是,我在大学的 OOP 教授从未真正给出过答案,所以我一直在想。
问题如下:设计一组基本对象/方法用于模拟电梯组。对象及其属性/方法是什么?
为了便于讨论,我们假设我们的大楼有二十层;底层为大堂,二层与停车场相连(因此,人们进出建筑要么在底层,要么在二层)。一部电梯可服务所有楼层;电梯组内共有三个电梯井,每个井道一部电梯。
在面向对象模型中对此进行建模的正确方法是什么?
首先是电梯课程。它有一个方向(向上、向下、站立、维护)、当前楼层以及按该方向排序的楼层请求列表。它接收来自该电梯的请求。
然后有一家银行。它包含电梯并接收来自楼层的请求。这些被安排到所有活动的电梯(不在维护中)。
日程安排将是这样的:
- 如果可用,请为该楼层选择一部站立式电梯。
- 否则选择一部移动到该楼层的电梯。
- 否则选择另一层楼的站立式电梯。
- 否则选择负载最低的电梯。
每个电梯都有一组状态。
- 维护:电梯不对外部信号做出反应(仅对自身信号做出反应)。
- 站立式:电梯固定在楼层上。如果它接到电话。电梯就在那个楼层,门开着。如果它在另一层,它就会朝那个方向移动。
- 上行:电梯向上移动。每次到达楼层时,它都会检查是否需要停止。如果是这样,它就会停下来并打开门。它等待一定的时间并关上门(除非有人正在通过它们)。然后它从请求列表中删除该楼层并检查是否有另一个请求。如果有,电梯再次开始移动。如果没有,它进入国家立场。
- 向下:与向上相同,但方向相反。
还有其他信号:
- 警报。电梯停了。如果是在一个楼层,门会打开,请求列表会被清除,请求会移回银行。
- 门打开了。如果电梯位于楼层且未移动,则打开门。
- 门关闭。如果门开着,就把门关上。
编辑:
有些电梯不是从底层/一楼开始,尤其是。如果是摩天大楼。
min_floor 和 max_floor 是电梯的两个附加属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)