当前位置: 首页 > 文档资料 > C++大学教程 >

2.22 有关对象的思考:确定问题中的对象

优质
小牛编辑
119浏览
2023-12-01

本节和“有关对象的思考”的下几节将介绍建立电梯模拟程序时的有趣问题和实际遇到的挑战。

第1章到第5章要完成面向对象设计(OOD)的各个步骤。从第6章开始,我们要用C++面向对象编程(OOP)技术实现电梯模拟程序。目前这些应用比较复杂,但不必在意,这章只考虑这个问题的一小部分。

问题

公司要建立一幢两层的办公大楼并装上“最新”的电梯。公司要求开发一个面向对象的软件模拟程序,模拟电梯的操作,确定这个电梯能否满足需要。

这个电梯只限乘载一人,为了省电,只在需要时才使用,电梯每天在一楼关门等待。

模拟程序包括一个时钟,每天从时间。开始,每秒滴答一次。模拟程序的调度器组件随机设置每一层第一个人到来的时间(第3章将介绍如何随机调度)。当时钟的时间等于第一个人到来的时间时,模拟程序对指定层生成一个新到的人并将人放在这一层。然后这个人按下该层的按钮,请求电梯开门。这个人的目的地楼层不能与他上电梯时所在的那层相同。

如果第1个人到达第1层,则他可以在按下按钮和等待电梯开门之后立即进入电梯。如果第1个人在第2层,则电梯要升到第2层去接这个人。电梯从1层移到另一层需要5秒钟。

电梯到达一层时.打开该层的电梯门上面的灯,并在电梯内发出钟声。该层的按钮和电梯中表示该层的按钮复位,电梯门打开,乘客(如果有人要乘电梯到该层)走出电梯.另一乘客(如果该层有人等待)进入电梯并按下目的地楼层的按钮,电梯门关上。如果电梯要开始移动,则要确定移动的方向(对只有两层的电梯,判断很简单)并移到下一层。为了简单起见,假设电梯到达一层时发生所有事件,而且直到电梯门关上所花的时间为0。电梯总是知道在哪层和要到哪层。

任伺时间每层最多只能有一个人等待,如果新到的人(不在电梯中的人)要到达一层时该层已被占用,则一秒后才能安排新的到达者。假设每隔5到20秒人们随机到达每层,第3章将介绍如何用随机数产生器模拟到达每层的概率。

我们的目标是实现一个能够工作的软件模拟程序,并根据这些要求运行。该程序应模拟几分钟的电梯操作,确定电梯能否满足这座办公大楼的交通需求。

电梯实验室任务1

在这些电梯实验室任务中,要进行面向对象设计的各个步骤。第一步要确定问题中的对象,最终要正式描述这些对象并在C++中实现。在这个电梯实验室任务中应该:

1,确定这个电梯模拟问题中的对象。这个问题指定了许多对象模拟电梯以及与各个人、楼层、按钮等等之间的交互。找到问题中的名词(noun),这些名词通常就是实现电梯模拟问题中的对象。
2.对每个找到的对象,用一段话描述关于该对象的所有事实。

说明

1.这是个很好的小组练习,最好几个人一起讨论,小组成员之间可以互相提示,检讨和完善各人的设计和实现方法。
2.小组应与班级中的其他小组一起竞赛,开发出最佳设计和实现方法。
3.下一章介绍如何实现随机性,介绍随机数产生器。随机数产生器可以帮助读者模拟扔钱币和投骰子等,还可以模拟随机到达的乘电梯者。
4.我们做出了许多简化的假设,读者可以提供其他细节。
5.由于现实世界是面向对象的,因此完全可以在正式学习面向对象之前考虑这个项目。
6.不要怕设计不完美。系统设计不是完善和完整的过程,因此只要尽力而为即可。

问题

1.如何确定电梯能否处理所需的交通量?
2.为什么实现三层(或更高)的楼层时更加复杂?
3.又稍后会介绍.建立一个电梯对象之后很容易建立更多的电梯对象。如果有多个电梯,每个电梯在每一层载客和下客时,都会遇到什么问题,
4.为了简单起见,我们指定电梯和每层的容量为一个乘客。如果增加这个容量,会遇到什么问题?