应用实例_电梯调度模拟器

上传人:油*** 文档编号:156445375 上传时间:2022-09-26 格式:DOCX 页数:19 大小:335.39KB
收藏 版权申诉 举报 下载
应用实例_电梯调度模拟器_第1页
第1页 / 共19页
应用实例_电梯调度模拟器_第2页
第2页 / 共19页
应用实例_电梯调度模拟器_第3页
第3页 / 共19页
资源描述:

《应用实例_电梯调度模拟器》由会员分享,可在线阅读,更多相关《应用实例_电梯调度模拟器(19页珍藏版)》请在装配图网上搜索。

1、UML程序设计实例电梯调度模拟器一本章通过电梯调度模拟器的例子详细介绍了如何利用UML进行一个实际系统的开发。这个系统的实现过程,遵循Ratio nal统一软件开发过程,最后用Vc+编码实现。问题描述在开发任何一个系统之前,开发人员对所要开发的系统的初步理解首先是从用户的问题描述开始的。问题描述的内容包括系统的基本功能需求,用户对系统的性能,外观等特性的要求。这种描述根据开发项目的规模不同,呈现不同的形式。对于大的项目,问题描述可能 是长达几页(几十页)的需求规格说明;对于小的项目,可能只是口头上的几句陈述。通过 问题描述,开发人员对要开发的系统产生一个大概的印象。此实例的问题描述如下:有一座

2、8层楼房,每层提供一组按钮(“上”或“下”),用于请求电梯的到达;每部电 梯内部提供一个控制面板,提供用户对目标楼层的选择,并显示电梯当前所处楼层、 运行方向。两部电梯由一个调度器统一调度。如果没有请求,并超过一定时限,电梯回到一楼。希 望开发人员能实现一个电梯调度模拟器来模拟如上所述的一切,对电梯的调度准则没有做特别要求。此外,用户还可能会对系统的性能,外观等特性提出要求,这些都需要在开发过程中加以考虑。需求分析拟订侯选需求在系统开发启动之前,首先要对项目做一些可行性分析。在Rati onal统一软件开发过程中,称这个阶段为初始阶段。在初始阶段主要是跟各方进行交流,广泛收集信息,听取客户和专

3、家的建议。 并对这些信息和建议进行记录,整理得到一个后选需求列表。后选需求列表中应包括如下各项1. 名称2. 简要说明3. 状态(建议的、批准的、并入的或证实的)4. 实现成本估算(人小时,人月)5. 优先级(关键的、重要的或辅助的 )6. 实现风险的级别(关键的、重要的或一般的)表1后选需求列表名称说明状态成本估算优先级风险级别模拟控制器界面用户通过此界面控制电梯的模 拟运行证实的重要的请求电梯到达通过外部控制面板证实的重要的选择目标楼层通过内部控制面板证实的重要的显示电梯所处楼层界面证实的一般的显示电梯运行方向界面证实的一般的合理的调度算法对电梯进行调度证实的关键的这时对系统所要实现的功能

4、在整体上有了一个大致的了解。然后明确哪一部分功能是系统中应该实现的,哪一部分功能是由其它外部系统实现的。即确定出系统的功能范围,并粗略估计一下项目的花费和可能得到的收益。这个阶段最重要的是弄清楚启动这个项目是不是有意义,有价值。初始阶段根据项目的大小,表现为不同的形式。 对于小的项目,可能只需要与相关人员进行一些交流和讨论。而对于大的项目可能要花费几个月的时间进行可行性分析。经过分析,作出启动项目的决定之后,就进入开发过程的细化阶段。理解系统上下文建立领域模型如果对要实现系统所要解决的问题领域没有一个清楚的了解,就不可能开发出一个满足用户需求的软件。因此,进行系统建模时,应首先建立领域模型,描

5、述问题领域中的基本概 念。建立领域模型时,先不要考虑软件是怎样实现的,而只关心如何将用户和领域专家头脑中与业务过程相关的概念组织起来,并将业务过程描绘出来。所以在电梯调度模拟器这个实例中,暂不考虑用户界面,而首先考虑把电梯的运做过程描述清楚。用户界面的加入推迟到分析阶段的后期进行。首先从问题描述和所了解的领域知识中抽取出可能与解决问题有关的重要概念(领域对象)。本例中通过分析问题描述提取出了这样一些名词(概念)。同时,为了便于理解,各名词的修饰语也被一同标注出来。1. 楼房2. (两部)电梯3. (每层)一组按钮(“上”或“下”)4. (电梯内部)控制面板5. 用户6. 调度器接下来,再抽取问

6、题描述中重要动词短语,它们可能会成为某个类的属性或方法。1. 请求电梯的到达;2. 提供用户对目标楼层的选择;3. 显示电梯当前所处楼层、运行方向通过对这些概念做进一步分析,不难发现 2.电梯、3.按钮(“上”或“下”)、4.控 制面板、5.用户、9.调度器等这些概念在电梯运做过程中都担当一定的职责,可以把它们抽象为系统中的一个类。“请求电梯的到达”可以作为外部控制面板的职责; “提供用 户对目标楼层的选择” 作为内部控制面板的职责;“显示电梯当前所处楼层、 运行方向” 作为电梯的职责。此外,还有1.楼房,它在电梯运做过程中不与任何其它对象交互,也不承担任何职责,也不能成为任何其它对象的属性或

7、方法,则把它删除。根据以上分析,初步地找出了系统中的一些类实体,再根据用户或领域专家对电梯运做过程的描述, 以及开发者本人对问题的理解,建立起这些对象之间的关联关系。此夕卜,根据问题描述中限定这些概念的量词(例如:8层、两部、一个等),还可以进一步描述它们之间的多重性关系。然后,为每个类分配职责,并添加一些必要的注释信息。这样就建立起了这个系统的原始领域模型,如图1所示。肆圉描谜诂鸚2爐笔%之何的矣系Dcnain ObjectDispatcherOuterControLPanel 的Q妙根据楼房的层 数而定+Jispatcht)Elevat根据搂房中实际电LI、ObjectUserOut&rC

8、outrolPane1+PassUserChoise * Donain Object Elsvai cr+ShowCurrentSt at us ()1一个Elector拥有一Iiuxq xCont rolF aiw 11VPouLam Object InnerComtrolPsnal+PassU5erCbioi(?fe.-.图1电梯运行系统领域模型建立业务模型至此,通过领域模型描述了问题领域中存在的重要概念,并从静态视角描述了它们之间的关系。考察系统的动态行为是正确理解一个系统运做情况的关键。所以还需要刻画出系统的动态特性。这一点通过建立系统的业务模型来实现。在这个实例中,主要通过活动图和交

9、互图来描述电梯使用的内部运做过程。根据对问题的理解,建立下面的活动图来描述乘客使用电梯过程中发生的各个活动。了茎略度省是作的受结在运有,响W了, 画主B训哄,运捞是的,梯昙程见标影的为洁道 刻的中的所程梯电甫度说电都辻梟不会程,简厦 图程其器二辻电,动调就忘,度而渍不辽此的调 动过!度。度在中活黙也一前训R即也1ST 活务程询fi迴为程有度,何之个疋,业口挣略O 该业涼了过略因#所调果任动一这的出对解保省程电梯回到一楼B*_讷电梯就在该楼层 /-电梯不在该楼层外部请求】麟灌醴臬黯向目融层电梯运作之活动图建立下面的顺序图描述电梯运作系统中各对为了进一步描述领域对象之间的交互关系,象间的信息传递。

10、图3电梯运作之顺序图建立词汇表在建立领域模型和业务模型的同时,收集问题领域中的一些重要概念,建立起一个可供用户,项目经理、系统分析员、开发人员、测试人员和其他相关人员共同使用的词汇表。这 样各种人员就可以使用共同的术语来进行讨论和交流,不仅为系统的实现带来很多便利,还可以防止因误解而使开发的系统偏离用户的真正需求。提取用例建立用例模型对系统运作过程有了一定了解之后,下一步开始考虑系统的功能。通过分析业务模型找出执行者并提取用例,建立用例模型来描述系统应实现的功能。首先,通过分析业务模型找出系统的潜在用户,即执行者。在本实例中只有一类执行者电梯乘客。然后,通过跟踪执行者与系统的交互行为,找出用例

11、。在本实例中,用户与 系统有两次交互,一次是按上 /下按钮,请求电梯到达,另一次是进入电梯后,通过内部控 制面板选择目标楼层。进一步分析,会发现用户与电梯的这两次交互都需要对电梯进行调度。 因此提取出公共用例“调度电梯” 。用例图如图4。此用例图是只考虑了电梯加运作过程,没有考虑模拟券中 蟲曲康髓解严命湄沅栓卄图4用例图简单描述用例提取出用例以后,应对每一个用例做一个简单描述。以表明它的功能和大致的执行流程。这个描述,在 Uml_Designer中,可以通过添加注释体来实现,也可以写入用例的规格说明 中。例如,对调度电梯这个用例所做的简单描述:调度电梯过程:有两个触发条件:? 用户有请求(包括

12、请求电梯到达和选择目标楼层);? 某个时钟信号到达第一种情况:1. 获取用户请求;2. 获取电梯的当前状态;3. 调度器调度,调度结果通知电梯;4. 电梯运动。第二种情况:1. 分析时钟信号;2. 获取电梯当前状态;3. 调度器调度,调度结果通知电梯;4. 电梯执行调度结果。确定用例优先级别对于大的系统,会找到好多用例。但这些用例对所开发的系统来说,并不同等重要。所 以确定用例的优先级别是很必要的,对于高优先级的用例,首先对它进行分析,设计,甚至 实现;而对于低优先级的用例可以留到后面迭带过程中再予以考虑。那些优先级别较高的用例就刻画出了系统的体系结构。本实例由于规模较小, 所以没有实施这一过

13、程。 但这一过程在系统实现过程中,是有着重要意义的。细化用例在这一阶段,用例分析员应与用户密切合作,商讨完成。首先描述用例执行过程的基本路径,然后再描述发生异常时可能会出现的分支路径。对有的用例来说,文本描述就足够了。但对于对象间交互比较复杂的用例,借助顺序图、合作图和活动图来描述,则更能说明问题,更易于交流。当然,若能采用图文并貌的方法, 则更好不过了。下面的活动图描述了调度电梯用例的一种场景。谚活动團对调度电稱州例进行了描述 弓處调度电梯时间的越发条件包括, 1用户有请求请求电梯到达或选择目标搂层)2某伞监控时钟11号到达 谍图只刻画了第一种惰况或* 心 _、取得用户请求)厂一取得电梯当繭

14、状态执行调度算法fj-r1通扛电梯运动图5调度电梯之活动图设计用例界面现在对业务执行过程有了清楚的认识, 下一步加入系统界面。首先分析用例在与用户进 行交互时,需要用户提供什么信息,系统应向用户返回什么信息。设计的界面应能帮助用户 和系统完成这种交互。 加入系统界面后,作为电梯模拟器系统, 它的用例才被完整的进行了 考虑。在电梯运行模拟过程中, 需要用户输入电梯到达请求和对目标楼层的选择,系统要向用户显示电梯运行的模拟情况,比如电梯的当前状态信息等。所以界面中应能提供控件来显示这些行为和状态。在用例模型中增加一个新的用例:系统界面,执行者相应改为模拟器用户。结构化用例模型结构化用例模型是指通过

15、进一步分析,提取那些公用的模块和那些可选的分支模块,使它们单独各自成为一个用例。然后,标出用例间的使用和扩展关系。用例图调整后如下图。分析在需求分析阶段所做的各项工作,都是面向问题领域的。 是为了充分的理解所要解决的问题空间,以及与各方进行交流和讨论。采用的术语也都是客户容易理解的。进入分析阶段之后,所做的工作开始转向面向实现领域,主要是为了帮助开发者更深入的理解系统的实现。所采用的术语也逐渐转向面向便于程序代码的实现。在分析阶段,所建立的模型仍然是概念层次上的。虽然是深入系统内部进行分析,但分析阶段并不考虑系统最终实现时的一些特性,比如:实现语言、操作平台,可用构件,用户 界面技术、数据库技

16、术等等。这些是设计和实现阶段所要解决的问题。识别分析类通过分析用例图和用例描述,找出分析类。这些分析类在用例的实现过程中,承担一种或几种职责。它们相互合作共同实现用例描述的功能。这些分析类有一部分可以从问题域中的相关实体直接对应得到,而其它大多数则需要通过分析抽象得到。分析类一般可以分为三种:边界类、实体类和控制类。边界类用于系统与角色之间的交互,系统通过边界类向执行者请求信息,返回和显示信息(如用户界面)。在此实例中,可以抽象出一个Systeml nteface 类,作为用户与系统交互的界面。通过这个界面,用户可以初始化模拟器、启动模拟和终止模拟器运行。此外,通 过此界面用户还可以实现与内部

17、控制面板和外部控制面板的交互。实体类用于为系统长期存在的信息建模。通常情况下,实体类可由问题域中的实体直接对应得到。此实例中如电梯,内、外部控制面板。并控制实现流程的一类对象。它控制类是在一个用例实现过程中协调其它对象的交互,们在用例的实现过程中,承担了管理和控制的职责。本例中,Dispatcher担当了这样一个角色。此外,为了防止 Dispatcher负担过大,引入一个 CentralManager类来负责 Dispather 与其它对象的交互, 比如信息的获取,调度命令的下达等; 而Dispather则专门负责电梯调 度算法的实现。分析类如图7所示。邇过对各用例进行分析 捕象出分析类.車的

18、描述了爭药中罰分祈真収及它们丫间的北聊齐系 圈中每 一行中的类M艮与它们有关联的类代表一T用例买现过程中要 涉及蚩的妇Anilyii e Clm Uiar用例:柔筑畀面图7分析类图接着,建立如下图所示的顺序图, 进一步描述这些类的实例间的交互协作关系和信息传 递。邛Tidli Oi?:iJC序的aVscrl-uUzerlJ.ue it (J.BliJknfitRi aue 3.1 Jalnj.jrL#jitrjlf aittlILMwrOhZrdtHDLh si 3Xch UDi ips cb. JSJirvInfn IP KslJcerTnrirFiluest J*m 曜 ILH 4rinr

19、.4.rF. g卓 st OlTifi.SE 亍 回用中尸一宙朮匚牛宵一r Li:lI1j alH uiLEcrtell serlrjitrt 0 y Mor J1Shnvlatci IJ图8电梯使用过程识别各个类的职责一个类可能在多个用例中担当(同种和不同种)角色:比如,Syteml nteface类参与了系统界面、请求电梯到达和选择目标楼层三个用例。一个类的职责是它在不同用例实现中所起作用的总和。在对类的职责进行描述时,可采用非正式的文字描述形式。以电梯为例来说明。例:类的职责电梯有下面一些职责:根据CentralManager的指示移动(包括向用户所在楼层移动和向目标楼层移动);获取用户

20、对目标楼层的选择,并报告给CentralManager ;通知Systemlnteface 进行必要的信息显示;识别出类的职责后,重新返回到“主类图”,给类增加相应的方法。例如,给电梯添加方法:Move(directi on );GetUserDestFloor();NotifyCM();NotifySI().这时类的方法只是对其职责的描述,与最终代码没有直接的对应关系,其返回类型、参数类型等不是考虑的重点,所以不必具体到实际实现语言中的某种类型。识别各个类的属性在识别类的属性时应遵循以下原则:属性名应用一个名词表示; 属性类型是概念领域的名称,不必具体到实际实现的语言中的某种类型; 同一个属

21、性不能由多个分析类共享,否则应把这个属性单独成类;如果某个分析类过于庞大和复杂,可以把它的某些属性分离出来,单独成类; 例:电梯的属性thel nn erCo ntrolPa nel;Curre ntFloor1.8;Curre ntStatusWaiti ng,ldle,Movi ngUp,Movi ngDow nCurre ntOrie ntatio nUp,Dow n;NextStopFloor1.8等。识别类之间的关联关系根据对问题的了解可知,楼房中有两部电梯,由同一个调度器统一调度。由此在CentralManager与Elevator之间建立一个关联,并标明多重性关系:1对2;每部电

22、梯有一个内部控制面板,在Elevator 和InnerControlPanel之间建立一个组成关联关系(由InnerControlPanel指向 Elevator ),多重性关系:1 对 1;此外,在 CentralManager 与OuterControlPanel之间建立1对8的关联关系;CentralManager 与Dispatcher 之间建立1对1的关联关系等等。分析结果见下图。IX用例:汞统界面Syst emlnt er face+EheiwlTLf* ()L1/ i-user Re qua a t Uz.,+GetUsarR#qu4sl.+StVrRqiuxt.Out arC

23、orntr olf1 :王c分祈阶段3本图描谨了系统中的分 祈类以廉它極间的关 联关系,图中毎一行中 的类以及与它们有矣联 的类代表一个用例实现 过程中耍渉及到的类-821ZLruterCon+ro IP嬲选提目标一-11 討rDEFlok iht+S* tlfstrE as til* .+GetDe3tFloor 0 i nt1THTii_iCviir entFlo or: int F-HwfgittDiyei., -m.iCvureittStit.,. fQpFl o,.(direction. HJtlUiarDtstFl o. i-Hoti fy5L 0 +Woti EyCH () tS

24、etCiurentFloo. 4XJtCiurrenrtF19 o. SelCiurreittDir e. etCurr efttB i, r e. .GetCurren.t-.1)1Dispatcherspat ch 0图9分析类图设计设计工作主要在细化阶段后期和构造阶段前期完成。设计时要充分考虑目标语言、操作系统、可重用构件、数据库技术以及用户界面技术等因素。设计阶段采用目标语言对类的属性、操作、参数类型等进行描述。并标明属性和操作的可见性类型的信息。类之间的各种关 联关系用类中的成员变量描述出来。例如,可用定义在类中的指针变量来描述类之间的关联和聚集关系。类中的方法在实现中有直接的对应代

25、码。体系结构设计系统的物理体系结构对系统软件体系结构有着重要的影响。因此,设计阶段的首要任务是识别出系统中的物理节点和它们的设置情况。包括:系统中包含哪些节点?它们之间如何连接,采用什么通信协议?对于此实例来说,所有可执行部件都在一个PC机上,因此,没有实施配置图。识别设计类首先,由分析类勾画出设计类的大致轮廓。比如对于边界类可以设计它为对话框、菜单或其它控件;对于实体类可以把它设计为某种数据库技术。处理控制类相对比较复杂,一般要考虑它的分布式问题,性能问题等。然后,识别出设计类的操作和属性。从相应分析类的职责中可以识别设计类的操作。有时,可能需要将分析类的一种职责分解为多个操作来实现。设计类

26、的操作用目标语言来描述。以电梯为例:Elevator需要向CentralManager汇报当前状态、运行方向、当前所处楼层等 信息。给电梯类增加 GetCurre ntStatus(), GetCurre ntDirectio n(), GetCurre ntFloor(), GetNextStopFloor() 等操作来完成这些功能此外,通过分析类的状态转变,也可以识别出类的操作。电梯状态图如图10。在第一层电梯狀态图上升状态向第一层下降等待状态上升(几层空闲状态下降狀态A下降(几层)超时】图10电梯状态图电梯有 Wait in g. Idle, Movi ngUp, Movi ngDow

27、n ,等状态,为电梯加入 In itialize 方法在模拟器运行之前对其状态进行初始化;加入Start(), Stop(), Beg in Wait(), En dWait(),Begi nldle(),E ndldle()等方法来实现电梯状态的转换。对于设计类属性的识别,一般从相应分析类属性可以直接对应得到设计类的属性。电梯类的操作和属性如图11。Elevator-m_i 匚 urTem S t at.- -ui iNext StopFlo -HietCuirrentFloo. +5etCurrentFloo,- Cur rent Dire- +Set Cur rent Dire,-. -

28、Hjet Cur rent Start,- -Sei Cur rent Start +Hove(dDirect io.-. +Initiali2;eC) -KjetUserDestFlcip. -S-tai-t C +3 top () +BeginWait () +EndWait ()+EndIdleO图11电梯的操作和属性根据类似的方法,可以逐个识别出其它几个类的操作和属性信息。其中,对于SystemI nteface,考虑目标语言 Vc+中,很方便用对话框来实现这样一个界面。可以定义一个扩展型来标识SystemInteface采用对话框实现。CDispatcher的Dispatch方法,过

29、程比较复杂,可以借助活动图来描述其执行流程。请电个个值 每各权*对计求梯厚则.* 內部谙求必须满 吊/邮囂衣由同向最 近的电梯满包 权值的计算;参见活动團:权值 的计靠更详金的週度址程;参见活动图:诃度 与设置触发条件:或关至0用户请求电梯到达 O用户选樺目标楼.层O棊个时肄信号到达电梯向自己的下一目标樸屋运动 萌定时限内有请求J1 指定时眼内无请求y由捆回劉一图12调度过程的执行流程图勰評句前弟的得- 極内曲请计算电梯逆向后. 方的内、夕卜部请 求权值排入电 梯的怨11琏袁后収的同请电 梯部入表 电外排謎 算的1值 计方值根13权值得计算过程髓直甫由梯祁是不可调度羅ki K 内梯_ 是晅 肋

30、置 值设层 权刖搂 丈,标 最技目 果请一 如部下现在处理的1定是外部谙求谛外部请求尚未满足录杈宿最大的电梯该外部请池已满足梯该电设该并层层搂楼足 请标满 该目已 置一求 设下请否则所有的请求都満足或弃有的电梯祁已调匱图14调度与设置详细流程用户界面设计在设计阶段需要进行的一项重要活动,就是对用户界面的设计。 此实例中,用户界面采用对话框,通过 VC+冲对话框编辑器设计得到。图15系统界面需要强调几点:类的操作和属性应遵循目标语言语法规则来描述,操作的参数的类型,属性的类型也都是目标语言中的类型。操作和属性的可见性类型也应该明确标出;如果多个分析类共享同一属性,则应把该属性提取出来单独定义成一

31、个类; 如果一个分析类由于具有复杂的属性而变得难于理解,则应把那些复杂的属性提取出来,单独为它们创建一种类型;实现实现工作主要是在构造阶段进行。实现阶段的主要任务是完成对类的操作的编码。并分配类到相应的构件,构件到相应的节点。然后,生成代码,对代码进行编译、连接,单元测 试,集成,系统测试等。可以借助建模工具的正向变换功能来生成代码框架,然后在此基础上,继续细化,逐步实现。Dispat ch.erSpecialDisp图16构件图总结本实例虽然很小,但足以反映利用 UML进行软件开发的基本过程。 应该说明的是,上面 介绍的仅是系统实现的一种解决方案,对一个系统来说,其实现方法会有多种。 但要真正找到一种好的解决方案,丰富的经验和知识是必不可少的。如何利用UML更好的进行软件开发, 还需要读者在实践中认真学习和体会。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!