C+程序设计课件第8章.ppt

上传人:san****019 文档编号:19954971 上传时间:2021-01-18 格式:PPT 页数:82 大小:390.55KB
收藏 版权申诉 举报 下载
C+程序设计课件第8章.ppt_第1页
第1页 / 共82页
C+程序设计课件第8章.ppt_第2页
第2页 / 共82页
C+程序设计课件第8章.ppt_第3页
第3页 / 共82页
资源描述:

《C+程序设计课件第8章.ppt》由会员分享,可在线阅读,更多相关《C+程序设计课件第8章.ppt(82页珍藏版)》请在装配图网上搜索。

1、2021/1/18 1 本章学习重点掌握内容: 面向对象的分析 面向对象的设计与实现 第 8章面向对象程序设计方法与实例 2021/1/18 2 第 8章面向对象程序设计方法与实例 8.1 面向对象方法学概述 8.2 面向对象的模型 8.3 面向对象程序设计过程 8.4 电梯模拟系统 2021/1/18 3 8.1 面向对象方法学概述 面向对象 (Object-Oriented,缩写为 OO)方法学的 出发点和基本原则 , 是尽可能模拟人类习惯的思维方 式 , 使开发软件的方法与过程尽可能接近人类认识世 界解决问题的方法与过程 , 也就是使描述问题的问题 空间 (也称为问题域 )与实现解法的解

2、空间 (也称为求解 域 )在结构上尽可能一致 。 面向对象方法是一种新的思维方法 , 它不是把程序 看作是工作在数据上的一系列过程或函数的集合 , 而 是把程序看作是相互协作而又彼此独立的对象的集合 。 每个对象就像一个微型程序 , 有自己的数据 、 操作 、 功能和目的 。 2021/1/18 4 8.1 面向对象方法学概述 面向对象 (Object-Oriented,缩写为 OO)方法学 的出发点和基本原则,是尽可能模拟人类习惯的思维 方式,使开发软件的方法与过程尽可能接近人类认识 世界解决问题的方法与过程,也就是使描述问题的问 题空间 (也称为问题域 )与实现解法的解空间 (也称为求 解

3、域 )在结构上尽可能一致。 面向对象方法是一种新的思维方法,它不是把程 序看作是工作在数据上的一系列过程或函数的集合, 而是把程序看作是相互协作而又彼此独立的对象的集 合。每个对象就像一个微型程序,有自己的数据、操 作、功能和目的。 2021/1/18 5 8.1 面向对象方法学概述 面向对象方法在概念和表示方法上的一致性,保证了 软件工程各项开发活动之间的平滑(“无缝”)过渡。面 向对象开发过程的核心是面向对象分析( OOA)和面向对 象设计( OOD)两个阶段,但二者的界限比较模糊。 OOA通过分析用例,提取用户的需求,从而建立问题 域逻辑模型的过程; OOD是建立面向对象的求解域模型的

4、过程。从 OOA到 OOD实际是一个多次反复、逐步迭代模 型的过程。 面向对象( OO)是认识事物的一种方法,是一种以 对象为中心的思维方式。这里先介绍它的几个主要概念: 对象、类、封装、继承、消息、结构与关联、多态性。 2021/1/18 6 1、对象 世界上所有的事物都可以称为对象。对象可以是有 形的如:一台电视机等。也可以是无形的如:帐户、一 项记录等。对象具有静态特征和动态特征。 对象是封装了数据结构及可以施加在这些数据结构 上的操作的封装体,这个封装体有可以唯一地标识它的 名字,而且向外界提供一组服务 (即公有的操作 )。 属性和操作是对象的两大要素。属性是对象静态特 征的描述,操作

5、是对象动态特征的描述。对象名也称为 对象标识。如电视的属性有:品牌、尺寸、重量等。操 作有:收视、选台、音量调节等。 8.1.1 对象和类 2021/1/18 7 2、类 类是对象的蓝图。根据抽象的原则对客观对象进行归 纳和划分,把具有相同特征的对象归为一个类。它是一个 抽象的概念。 类是对象模版,用于创建具有相同属性和相同操作 (服务)的对象。它包括属性和方法(注:类的服务、行 为和操作只是叫法上的区别)。 3、封装 封装是指按照信息隐藏的原则,把对象的属性和操作 结合在一起,构成一个独立的封装体。封装性也就是信息 隐藏,通过封装把对象的实现细节对外界隐藏起来了 。 8.1.1 对象和类 2

6、021/1/18 8 外部对象不能直接操作对象的属性,只能使用对象提 供的接口。具有封装性的条件如下 : 有一个清晰的边界。所有私有数据和实现操作的代 码都被封装在这个边界内,从外面看不见更不能直接 有确定的接口 (即协议 )。接口就是对象之间通信的 桥梁,只能通过向对象发送消息来使用它。 受保护的内部实现。实现对象功能的细节 (私有数据 和私有方法 )不能在定义该对象的类的范围外进行访 问。 8.1.1 对象和类 2021/1/18 9 4、 继承 继承使得一个类可以继承另一个类的属性和方法。 这样通过抽象出共同的属性和方法组建新的类,便于 代码的重用。如图 8.1的继承关系。 Button

7、 -pressed : bool +pressButton() :void 8.1.1 对象和类 elevatorButton -elevatorRef : Elevator +pressButton() :void floorButton -floorNumber : int +pressButton() :void 图 8.1 继承中的父子类 2021/1/18 10 子类电梯按钮和楼层按钮继承了父类 Button的全部属性 和服务,同时又具有自身新的属性和服务。 一般和特殊是相对而言的,在哺乳动物和狗及猫之间, 哺乳动物是一般类(称为基类、超类或父类),狗和猫是 特殊类(也称子类);在狗

8、和黑狗之间狗是一般类,黑狗 是特殊类。 5、消息 向某个对象发出的服务请求称作消息。对象提供的服 务规定的消息格式称作消息协议。 消息包括:被请求的对象标识、被请求的服务标识、 输入信息和应答信息。如:向电梯按钮类发送请求按下电 梯按钮的消息 elvatorButton.pressButton()。 8.1.1 对象和类 2021/1/18 11 8.1.1 对象和类 6、结构与关联 一个系统一般由很多对象组成,对象之间并不是 互相孤立的,而是存在着各种各样的关系。包括:部 分 /整体、一般 /特殊、实例连接、消息连接。 ( 1)部分 /整体 对象之间存在的部分与整体的结构关系。如电梯 按钮是

9、电梯类的一个组成部分,电梯由电梯按钮、门、 楼层、响铃等组成。如图 8.2的组合关系。 2021/1/18 12 8.1.1 对象和类 Elevator -door : Door +processPossibleArrival(): void elevatorButton -elevatorRef : Elevator +pressButton() :void Door - open : bool +closeDoor() :void 图 8.2 组合关系 2021/1/18 13 8.1.1 对象和类 组合和聚合。组合关系中部分和整体的关系很紧密。聚 合关系中则比较松散,一个部分对象可以属于

10、几个整体对象。 ( 2)一般 /特殊 对象之间的结构关系,很多时候也称作泛化和特化关系。 ( 3)实例连接 对象之间的实例连接称作链接,对象类之间的实例连接 称作关联。 ( 4)消息连接 消息连接表现了这样一种联系:一个对象发送消息请求 另一个对象的服务,接收消息的对象响应消息,执行相应的 服务。 2021/1/18 14 7、多态性 所谓多态性是指不同对象接收相同的消息时产生不 同的行为。这里的消息主要是对类中成员函数的调用, 而不同的行为就是指类成员函数的不同实现。即在类等 级的不同层次中可以共享 (公用 )一个行为 (方法 )的名字, 然而不同层次中的每个类却各自按自己的需要来实现这 个

11、行为。当对象接收到发送给它的消息时,根据该对象 所属于的类动态选用在该类中定义的实现算法。如图 8.1中,当向按钮对象发送消息 pressButton()时 ,不 同按钮对象如电梯内部按钮和楼层按钮会自动判断自己 的所属类并执行相应的服务。 8.1.1 对象和类 2021/1/18 15 面向对象的模型,分别从三个不同侧面描述了所 要开发的系统。对象模型定义了 “ 做什么 ” 的实体, 功能模型指明了系统应该 “ 做什么 ” ,动态模型明确 规定在何种状态下,接受什么事件的触发而 “ 做什 么 ” 。 一个典型的软件系统组合了上述三方面内容:它 使用数据结构 (对象模型 ),执行操作 (动态模

12、型 ),并 且完成属性值的变化 (功能模型 )。 8.2 面向对象的模型 2021/1/18 16 1. 对象模型是一个类(属性和方法)、对象(类的 实例)、类或对象之间关系的定义集。 对象模型表示静态的、结构化系统的 “ 数据 ” 性质, 为建立动态模型和功能模型提供了实质性的框架。 对象模型把面向对象的概念与常用的信息建模概念 结合起来,增强了模型的可理解性和表达能力。 对象模型还表示了类 /对象之间的结构关系。类 /对 象之间的关系一般可概括为关联、归纳(继承)、组 合(或聚集)三类。 8.2 面向对象的模型 2021/1/18 17 8.2 面向对象的模型 2. 动态模型表示瞬间的、行

13、为化的系统 “ 控制 ” 性质, 它规定了对象模型中对象状态的合法变化序列。 对象有自己的生命周期,它由多个阶段组成,每个特 定阶段都有规范该对象行为的一组运行规则。 对象的状态是对象属性的一种抽象,事件是某个特定 时刻发生的一个系统行为是引起对象状态转换的控制 信息。对象对事件的响应,取决于当时的状态,响应 包括改变自己的状态,或者是形成一个新的触发行为 (事件)。 动态模型描绘对象的状态,触发状态转换的事件,以 及对象行为(对事件的响应),即基于事件共享而互 相关联的一组状态集合构成了系统的动态模型。 2021/1/18 18 3. 功能模型指明了系统应该 “ 做什么 ” ,直接地反映 了

14、用户对目标系统的需求。面向对象的功能模型由一 组用例组成,用例模型描述的是外部执行者 (Actor)所 理解的系统功能。 用例模型描述了待开发系统的功能需求 用例模型将系统看作黑盒,从外部执行者的角度来理 解系统 用例模型驱动了需求分析之后各阶段的开发工作,不 仅在开发过程中保证了系统所有功能的实现,而且被 用于验证和检测所开发的系统,从而影响到开发工作 的各个阶段和 UML 的各个模型。 在 UML中,一个用例模型由若干个用例图描述,用例图 主要元素是用例和执行者。 8.2 面向对象的模型 2021/1/18 19 传统程序设计方法的主要思想是自顶向下逐步分解。 整个系统由分层的子程序集合构

15、成。这要求程序设计师必 须对系统的调用关系非常清楚,这对于开发大型系统来讲 是是非困难的,而且构建的系统稳定性较差,任何上层子 程序的修改都会引整个系统的改变。 而面向对象得程序设计方法提供一种崭新的系统设计 方案,就是将系统看成一系列相关联的对象的集合,而对 象之间是通过消息传递的方法相互作用来完成任务,每个 对象用自己的方法管理数据。 本节就介绍这种软件开发的方法,它将软件开发过程 分为 3个阶段:面向对象的分析、面向对象的设计、面向对 象的实现。不同阶段则使用不同的模型来描述。 8.3 面向对象程序设计过程 2021/1/18 20 8.3.1 面向对象的分析 面向对象分析的任务是确定

16、系统能够做什么?谁来使 用这个系统?同时建立用例模型,并定义系统中的问题领 域类,主要由系统用户和开发人员合作完成。 1需求分析 分析的第一步是定义用例,以描述所开发系统的外部 功能需求。用例模型的主要构件是用例、角色和系统边界。 用例用于描述系统所有功能需求,系统边界用于界定系统 功能的范围,而角色用于描述与系统功能有关的外部实体, 它可以是用户,也可以是外部系统。 2021/1/18 21 使用面向对象程序设计方法时,在本阶段不需要严 格的系统规格说明书,可以使用图表(如用例图)来描 述系统的功能,除了用用例图描述系统需求外,还可以 用文字 (或活动图 )对每个用例进行需求说明,更具体地

17、描述该用例与角色的交互。例如电梯模拟系统的用例图 如下: 8.3.1 面向对象的分析 2021/1/18 22 8.3.1 面向对象的分析 乘 客 处理电梯呼叫 标示移动方向 处理楼层呼叫 标示电梯位置 电梯模拟系统 移动停止电梯 开关门 触发紧急处理器 图 8.3 电梯模拟系统用例图 2021/1/18 23 2特定领域类分析 分析阶段的另一项工作是特定领域分析,以列 出系统中的特定领域类。我们可以通过阅读规格说 明、用例以及寻找系统处理的 概念 来进行特定领 域分析,也可以通过用户和领域专家的讨论,以识 别出要处理的所有关键类及它们的相互关系。这里 的特定领域是指具体的商业领域,而不是整个

18、系统 领域。 在本实例中,可以确定电梯模拟系统中特定领 域类为电梯、调度、门、按钮、楼层等,并使用类 图来描述系统领域类及其关系。 8.3.1 面向对象的分析 2021/1/18 24 需要强调的是,这一阶段对特定领域类的描述具 有一定的素描性质,也就是说特定领域类的操作和属 性不一定与最终实现时的定义一致。因为此时还没有 涉及到系统功能的具体实现,不可能准确、完整地定 义它们。有一些操作需要在设计阶段细化时才能确定。 此外,为了描述问题领域中类的动态行为,可以 使用 UML中的任何一种动态图 (如顺序图、活动图、协 作图、状态图 )。本阶段的各动态图都具有素描性质, 主要是为了协助对领域类及

19、其相互关系的分析,为下 一阶段的具体设计打下基础。 8.3.1 面向对象的分析 2021/1/18 25 设计阶段的任务是对分析模型进行扩展并将模型进 一步细化,并考虑技术细节和限制条件。设计的目的是 指定一个可行的解决方案,以便能很容易地转变成为编 程代码。设计可以分成两个阶段: 体系结构设计阶段 ( ArchitectureDesign)。这是 一个从较高层次的进行的设计,用来定义包(子系统), 描述包之间的依赖性及通信机制。很自然,目的是要设 计一个清晰简单的体系结构,有很少的依赖性,而且尽 可能避免双向依赖。 详细设计阶段 ( Detailed Design)。在此阶段, 所有的类都详

20、尽地进行描述,给编写代码的程序员一个 清晰的规范说明。 UML中的动态模型用来说明类的对象 如何在特定的情况下做出相应的表现。 8.3.2 面向对象的设计 2021/1/18 26 8.3.2 面向对象的设计 1 体系 结构设计 类图中包括有助于用户从技术逻辑中分离出应用 逻辑 (领域类 ),从而减少它们之间的依赖性。这就是 软件结构设计强调的模块间的高聚合、低偶合的原则。 在商业 MIS中,存在以下包 (或子系统 ): 用户接口包 :用户接口类允许用户访问系统数据 和加入新数据。在商业对象中,用户接口包跟商业对 象包合作,调用商业对象的操作,实施数据的检索和 插入。 2021/1/18 27

21、 8.3.2 面向对象的设计 商业对象包 : 该包包括域类,这些域类(如 elevatorButton,Floor, Light等)来自于分析模型。 设计阶段完整地定义了这些类的操作,并增加了一些其 他细节来支持持续存储。在设计阶段,详细设计这些类, 以完整定义他们的操作,支持对数据库的存取。所以, 所有商业对象类必须继承数据库包中的类。 数据库包 :它向商业对象包中的类提供服务,以 便他们能够持续地存储。在当前版本中,持久对象类将 把它的子类的对象存储到文件系统的文件中。 通用包 :该包含了一些服务,用来被系统中其他 包调用。 2021/1/18 28 8.3.2 面向对象的设计 2详细设计

22、 详细设计的目的是通过创建新的类图、状态图和动态 图,描述新类,并扩展和细化分析阶段 “ 素描 ” 的商业对 象类。不过在详细设计阶段,它们是从技术层次上对系统 进行更详尽的描述。如分析阶段的用例描述用来验证它们 是否在设计阶段都得到处理,而顺序图用来展示系统中每 个用例在技术上如何实现,等等。 在设计阶段,也可细化分析阶段的状态图,更详细的 显示状态的变换细节。使用状态图可以揭示单个对象在整 个系统中的变化细节,对了解和实现关键类有较大的帮助。 此外,还可以使用其他图在实现层上从不同侧面对分 析阶段建立的模型进行细化。 2021/1/18 29 8.3.3 面向对象的实现 面向对象的实现可分

23、为两个阶段:一是对类进行编 程的过程。可以选择某种面向对象对象编程语言 (如 c+ 或 Java)作为实现系统的软件环境;二是测试和配置,完 成系统编码后,需要对系统进行测试。 1.编码 本阶段完成系统框架进行编码。选择合适的语言实 现设计阶段完成的总体框架的搭建和具体算法的描述。 在实现阶段中,可以选取下列图的说明来辅助编程 : 2021/1/18 30 类的规格说明 :每个类的规格说明详细显示了必要的属 性和操作。 类图 :显示类的静态结构和类之间的关系。 状态图 :显示类的对象可能的状态、所需处理的转移以 及触发这些转移的操作。 包含某个类的对象的动态图 (顺序图、协作图、活动 图 ):

24、显示该类的某个方法的实现或别的对象是如何使 用该类的对象的。 用例图和规格说明 :显示系统需求和结果。 8.3.3 面向对象的实现 2021/1/18 31 编码期间也可能会发现设计模型的缺陷。这时需要 开发者修改设计模型。修改设计模型时一定要保持设计 模型与编码的一致性,以便将来易于维护。 2测试和配置 完成系统编码后,需要对系统进行测试,它通常包括 : 单元测试、集成测试、系统测试和验收测试。在单元测 试中使用类图和类的规格说明,对单独的类或一组类进 行测试;在集成测试中,使用组件图和协作图,对各组 件的合作情况进行测试;在系统测试中,使用用例图, 以检验所开发的系统是否满足例图所描述的需

25、求。 8.3.3 面向对象的实现 2021/1/18 32 8.4.1 需求陈述 电梯模拟系统的设计与 “ 真实 ” 的系统相比省去很 多技术的细节。我们的电梯系统有所有电梯都有的基本 功能,如上升和下降,开门和关门,以及能承载乘客。 电梯假设在一栋大楼的第一层到第 N层运行,第一层是大 厅。电梯里有每一层对应的按钮,除了第一层和第 N层外, 每个楼层都有两个按钮,乘客可以呼叫上楼和下楼。顶 楼只有一个下行按钮,第一层的大厅只有一个上行按钮。 当电梯停在某一层时,电梯开门,电梯的指示灯表明当 前电梯运行的方向,这样乘客知道当前电梯运行的方向。 电梯在两个楼层间快速移动时,电梯的门是紧闭的,而

26、且电梯能提前减速到达目的地。为保证电梯系统的安全, 在任何不安全的因素下,紧急制动就会促发,电梯被强 制停止。 8.4 电梯模拟系统 2021/1/18 33 电梯到达一个楼层时,它会重置电梯按钮,并响铃 (继承到电梯内部)进入电梯,然后电梯向楼层发布已 经到达的信号。作为响应,楼层会重置楼层按钮,并显 示电梯已经到达指定楼层。然后,电梯门开,注意楼层 上对应的门随电梯门一起自动打开。随后,电梯内的乘 客离开电梯,正在等待电梯的人进入电梯。 一个人进入电梯内后,按下电梯按钮,电梯内的指 示灯会亮。另外,等电梯到达另一楼层,并重置电梯按 钮后,灯就熄灭。接着,电梯向指定楼层移动,电梯到 达指定楼

27、层后,如果没有人进入电梯,而且楼层上的楼 层按钮没有被按下的话,就等待电梯门关闭,直到楼层 按钮被按下。 8.4.1 需求陈述 2021/1/18 34 8.4.2.1用例图 电梯系统的用例图如图 8.4所示,主要包括用例、角 色和关系。 8.4.2 电梯模拟系统的分析 乘 客 处理电梯呼叫 标示移动方向 处理楼层呼叫 标示电梯位置 电梯模拟系统 移动停止电梯 开关门 触发紧急处理器 图 8.4 电梯系统用例图 2021/1/18 35 其中的小人代表参与系统的外来实体,在这就是电 梯系统的唯一角色 -乘客,它需要系统为他提供相 应的服务,乘客通过观察电梯移动的方向和电梯位置 指示器决定是否进

28、 /出电梯,因此他参与系统的四个用 例,处理电梯呼叫、处理楼层呼叫、标示电梯位置和 标志移动方向。以下是该用例图的简单功能描述。 8.4.2 电梯模拟系统的分析 2021/1/18 36 处理电梯呼叫:这个用例包括几个场景。这些场景有乘 客的呼叫电梯、电梯按钮的亮灭、电梯控制器处理电梯 呼叫,处理按钮信息更新等等。 处理楼层呼叫:和处理电梯呼叫类似,这个用例包括乘 客选择楼层、楼层按钮的亮灭和电梯控制器处理楼层呼 叫,处理按钮信息更新等等。 移动停止电梯:这是一台电梯的主要功能,详细的动作 包括驱动速度的改变,停止的判定,电梯的运动方向驱 动。 标识电梯移动方向:电梯应该有这种机制,即让乘客知

29、 道电梯目前的运动方向,决定是否进电梯 。 8.4.2 电梯模拟系统的分析 2021/1/18 37 标识电梯位置:类似电梯移动方向,电梯应该让乘客 知道他 /她的目的层是否到达,决定是否离开电梯。 开关门:乘客进出电梯,电梯应该开关门。这个用例 应该包括当电梯正关闭时乘客想进入,乘客可以使电 梯门打开。 触发紧急制动器:电梯有安全机制确定一个不安全的 状态不是瞬时产生的。 系统框架(用例图中封闭的矩形)包含系统的用例, 而边界代表系统和外界实体交互的界面。 8.4.2 电梯模拟系统的分析 2021/1/18 38 每个用例代表系统对外提供的服务,或另一个子系统。 可用事件流对其中的用例进行详

30、细描述。如下对用例 “ 处理 电梯呼叫 “ :处理电梯呼叫用例基本流程。 (1) 乘客按下第 M层的下行按钮。 (2) M被插入到下行队列的合适位置。 (3) 如果 M被插到下行队列头。 如果电梯正处于下行状态。将 M发送给电梯作为目的地。 如果电梯处于停止状态。将 M发送给电梯作为目的地。 (4) 电梯到达此楼层。 (5) 电梯自动打开门。 (6) 乘客进入电梯。 (7) 超重响警铃。 8.4.2 电梯模拟系统的分析 2021/1/18 39 8.4.2.2类图 类图是面向对象系统中应用最多的图,它对系统进行 静态建模。静态图主要描述系统的功能需求 -系统给最终 用户提供的服务。 类图描述一

31、组类、接口和协作,及它们的关系。类图 包括整个系统的描述,如系统的结构和细节,还有类的属 性和操作等细节。 具体方法如下 : 8.4.2 电梯模拟系统的分析 2021/1/18 40 1. 找出问题陈述中所有的名词 表 8-1 问题陈述中的名词 大楼 乘客 载客量 电梯 楼层 电梯按钮 楼层按钮 电梯模拟程序 楼层电梯指示灯 人(电梯内的人,楼层等电梯的人) 时间 铃 电梯门 时钟问题陈述中的名词 8.4.2 电梯模拟系统的分析 2021/1/18 41 2. 选择在系统中担负主要职责的名词 ,而去掉下面的词 电梯模拟程序 载客量 时间 建筑物是与系统无关的事物,时间和载客量分别是时 钟和电梯

32、所具有的特性,而非独立的实体,电梯模拟程序 是以完整的程序,而不是一个具体的实体 8.4.2 电梯模拟系统的分析 2021/1/18 42 3.将剩下的名词划成不同的类,以确定真正的类 大楼 楼层 门 按钮(电梯和楼层按钮) 灯 时钟 调度 铃 乘客(包括电梯内的人,楼层等电梯的人 ) 它们都可能成为系统中所涉及的最终类。我们为楼层按 钮和电梯按钮创建一个类,按钮类,并拥有两个子类,分 别为楼层按钮和电梯按钮(他们分别在电梯系统中担负主 要职责,分别管理呼唤电梯和指挥电梯的移动)。 系统主要的类有: 大楼,楼层,门,按钮),灯,时钟,调度,铃,乘客。 8.4.2 电梯模拟系统的分析 2021/

33、1/18 43 8.4.2.3电梯系统类图 根据上面的分析得出系统的类图。如电梯类图、电梯按 钮和门类: 门: “ 电梯 ” 对象 -电梯控制器 -命令门打开和关闭,这 和用例中的描述相对应。 电梯:电梯在控制下上升和下降(用不同的速度),需 要时可以停下。 按钮:电梯控制器类也控制按钮类,按钮类生成两个子 类电梯按钮类和楼层按钮类)。控制对象和按钮对象通信, 得到按钮是否被按下,反过来控制按钮灯的发光。 8.4.2 电梯模拟系统的分析 2021/1/18 44 8.4.2 电梯模拟系统的分析 Elevator(电梯) - door : Door + processPossibleArriva

34、l(): void Button(按钮) - pressed : bool + pressButton() :void Door(门) - open : bool + closeDoor() :void elevatorButton(电梯按钮) -elevatorRef : Elevator +pressButton() :void floorButton(楼层按钮) -floorNumber : int +pressButton() :void 8.5 电梯类图 1 拥有 1 拥有 * 1 2021/1/18 45 8.4.2 电梯模拟系统的分析 系统由不同的类组成,类间的关系称为类的关联,

35、 通过类之间的消息传递才构成纷繁复杂的软件系统。 Uml通过类图描述类之间的关联 ,如图中继承关联 (楼 层按钮合电梯按钮的关系 ),组合关联 (电梯和门以及 电梯按钮的关系 ),一般关联 (电梯和门的关系等 )。 关联可表示为关联对象的个数和关联名 ,如电梯和电 梯按钮的关联表示。系统类图如下: 2021/1/18 46 8.4.2 电梯模拟系统的分析 调度 (Scheduler) 时钟 ( Clock) 乘客 ( Person) 楼层 ( Floor) 电梯 ( Elevator) 楼层按钮 ( floorButton) 灯 ( Light ) 楼层按钮 ( floorButton) 铃

36、( Bell) 门 ( Door) 图 8.6 电梯模拟系统的类图 1 调 度 0.1 0.1 等待 乘 1 坐 1 拥有 1 1 1.2 1.2 1.* 1 2021/1/18 47 8.4.2.4类的属性 确定类的结构以后,需要表述类本身具有的特性, 也就是类的属性。通过对用例图中每个用例的详细表 述中查询每个类对象拥有的属性,并用合适的名词描 述属性。可用一张表格描述在需求中每个类相关的描 述。如下表 8-2: 8.4.2 电梯模拟系统的分析 2021/1/18 48 8.4.2 电梯模拟系统的分析 表 8-2 电梯模拟系统中类的相关描述 类 与类相关的描述词(名词或名词短语) 电 梯

37、电梯运行的时间 电梯的状态 电梯运行的方向 电梯目前处于的位置 电梯到达楼层的时间 门 门的状态(开和关) 时 钟 时钟的时间 楼 层 按 钮 按钮的状态(按下核释放) 电 梯 按 钮 按钮的状态(按下核释放) 灯 灯的状态(开和关) 铃 没有 调 度 到达指定楼层的时间,人到达时间 楼 层 灯,按钮, 2021/1/18 49 8.4.2 电梯模拟系统的分析 电梯按钮 电梯状态:布尔 = 假 楼层按钮 电梯状态:布尔 = 假 电 梯 目前的位置:整形 = 1 电梯的方向:枚举 = UP 电梯到达的时间:整形 电梯移动:布尔 = 假 命名类的属性: 包括属性的名字、类型、初始值,如图 8.7表

38、示: 灯 开关状态 : 布尔 = 假 图 8-7 具有属性的类图 2021/1/18 50 8.4.2.5 类的行为 行为是指为了完成某一任务,一个对象提供的、并体 现其责任的操作。同类对象之间和不同的对象之间通过相 互通信来完成复杂的系统状态的控制。 行为的获取类的方法仍旧从用例图中的每个用例入手, 通过对用例中每个场景的详细分析区或去每个对象所拥有 的职责,具体从三个方面完成类的行为的获取。 ( 1)提取对象外部行为的大致功能和名称,同时进行 适当的精化; ( 2)标识对象之间的消息传递; ( 3)使用模板描述对象的外部服务和对象间的消息传 递。所谓模板是软件组织制定的用于描述对象行为的标

39、准 格式。 8.4.2 电梯模拟系统的分析 2021/1/18 51 8.4.2 电梯模拟系统的分析 表 8-3 电梯模拟系统中类的行为描述 类 动作行为的描述 电 梯 类 移动,到达指定楼层,按下电梯按钮,释放电梯按钮,人进 入电梯,人离开电梯,开关门,响铃等 时 钟 类 每秒计时 调 度 类 创建一个乘客,时间安排,处理楼层等待的人,延迟时间 电 梯 按 钮 类 标识电梯的移动 楼 层 按 钮 类 按钮按下和释放 门 类 开门,关门,表示人已经乘坐电梯 楼 层 类 通知电梯的到来,标识电梯离开等 铃 类 创建自身,响铃 灯 类 创建自身,开关灯 总控类 运行电梯系统,获取时钟,发送时间给计

40、划表和电梯类 2021/1/18 52 8.4.2 电梯模拟系统的分析 根据以上描述命名类的行为 , 包括行为的名字 , 返回 类型和参数 。 如图 8.8表示 : 电梯按钮 电梯状态:布尔 = 假 按下按钮() 释放按钮() 楼层按钮 电梯状态:布尔 = 假 按下按钮() 释放按钮() 电 梯 目前的位置:整形 = 1电梯的方向:枚举 = UP 电梯到达的时间:整 形电梯移动:布尔 = 假 电梯运行的时间() 人进入电梯() 人离开电梯() 灯 开关状态 : 布尔 = 假 开灯() 关灯() 图 8.8 具有属性和行为的类图 2021/1/18 53 设计阶段的主要任务是定义包 (子系统 )

41、,包括包间 的依赖性和主要通信机制,以及细化包的内容,使编程 人员得到所有类的一个足够清晰的描述。同时使用 UML中 的动态模型,描述特定情况下这些类的实例之间的行为。 1结构设计 本系统较为简单 ,仅给 出类间的包含关系和系统结构 图。根据系统需要,添加控制类 Building类,完成对电 梯的总控,各类的关系如图 8.9: 8.4.3 电梯模拟系统的设计与实现 2021/1/18 54 8.4.3 电梯模拟系统的设计与实现 Person - ID : int +stepOntoFloor(Floor exitElevator(const Floor ( 8) FloorButton(楼层按

42、钮)类: 召唤电梯,标示电梯的移动方向。 方法: pressButton(),按下楼层按钮。 resetButton(),复原楼层按钮。 8.4.3 电梯模拟系统的设计与实现 2021/1/18 59 ( 9) ElevatorButton(电梯按钮)类: 提供电梯移动的服务。 方法: pressButton(),按下电梯内按钮。 resetButton(),松开按钮电梯内按钮。 ( 10) Elevator(电梯)类: 电梯模拟系统的主要类,由 Floor类、 Person类、 Door类和 Bel类组成。实现电梯的移动和电梯到达指定 位置后和其他类的交互,并响铃。 方法: summonEl

43、evator(int floor),呼唤电梯完成 一特殊楼层的服务。 prepareToLeave(bool),电梯准备离开。 processTime(int),电梯运行时间。 passengerEnters(Person * const),乘客进入电梯。 8.4.3 电梯模拟系统的设计与实现 2021/1/18 60 passengerExits(),乘客离开电梯。 processPossibleArrival(), 可能到达的电梯。 processPossibleDeparture(),电梯可能离开。 arriveAtFloor(Floor 8.4.3 电梯模拟系统的设计与实现 2021/

44、1/18 75 ( 4) prepareToLeave(bool leaving) / 电梯准备离开 算法描述: / 获取当前呼叫电梯的楼层 Floor / 通知控制器这部电梯正要离开 thisFloor.elevatorLeaving(); / 电梯发送消息给门,请求关门 door.closeDoor(thisFloor); / 电梯朝向指定电梯按钮的指示方向移动 if(leaving) move(); 8.4.3 电梯模拟系统的设计与实现 2021/1/18 76 ( 5) processTime(int time) / 通过检测电梯到达目的楼下或准备离开某楼层时,更 新电梯时间 算法描述

45、: / 首先获取当前时钟的时间 currentBuildingClockTime = time; / 电梯按预先设定的楼层移动,则调用方法 processPossibleArrival()计算到达目的楼层的 时间,否则调用 processPossibleDeparture()获取电 梯离开的时间 if( moving) processPossibleArrival(); else processPossibleDeparture(); 8.4.3 电梯模拟系统的设计与实现 2021/1/18 77 ( 6) passengerEnters(Person * const personPtr) /

46、 乘客进入电梯 / 获取当前进入电梯的乘客 passengerPtr = personPtr; cout工号为 getID()进入 电梯 . currentFloorendl; ( 7) passengerExits() / 乘客离开电梯 / 当前乘客置空 passengerPtr = 0; 8.4.3 电梯模拟系统的设计与实现 2021/1/18 78 ( 8) processPossibleArrival() / 电梯可能到达的楼层 算法描述: /如果时钟获取时间恰好是电梯到达楼层时间,则更新电梯,输出 当前楼层 if( currentBuildingClockTime = arrival

47、Time) currentFloor = (currentFloor =Floor:FLOOR1 ? Floor:FLOOR2 : Floor:FLOOR1); direction = (currentFloor = Floor:FLOOR1 ? UP : DOWN); cout电梯到达第 currentFloor层 endl; arriveAtFloor(currentFloor = Floor:FLOOR1) ? floor1Ref : floor2Ref); return; cout 电梯移动 (direction =UP ? UP : DOWN)endl; 8.4.3 电梯模拟系统的设

48、计与实现 2021/1/18 79 ( 9) processPossibleDeparture() / 电梯准备离开楼层 算法描述: /本楼层需要电梯服务 bool currentFloorNeedsService = currentFloor =Floor:FLOOR1 ? floor1NeedsService : floor2NeedsService; /其他楼层需要服务 bool otherFloorNeedsService = currentFloor =Floor:FLOOR1 ? floor2NeedsService : floor1NeedsService; if (curren

49、tFloorNeedsService) arriveAtFloor(currentFloor = Floor:FLOOR1 ? floor1Ref :floor2Ref); return ; else prepareToLeave(otherFloorNeedsService); 8.4.3 电梯模拟系统的设计与实现 2021/1/18 80 ( 10) arriveAtFloor(Floor /reset status cout电梯按钮被释放 endl; elevatorButton.resetButton(); bell.ringBell(); /通知楼层电梯到 Person *floor

50、PersonPtr = arrivalFloor.elevatorArrived(); door.openDoor(passengerPtr,floorPersonPtr,arrivalFloor,* this); 8.4.3 电梯模拟系统的设计与实现 2021/1/18 81 /这层需要服务 bool currentFloorNeedsService = currentFloor = Floor:FLOOR1 ? floor1NeedsService : floor2NeedsService; bool otherFloorNeedsService = currentFloor = Floor:FLOOR1 ? floor2NeedsService : floor1NeedsService; if(!currentFloorNeedsService) prepareToLeave(otherFloorNeedsService); else currentFloor = Floor:FLOOR1 ? floor1NeedsService =false : floor2NeedsService = false; 8.4.3 电梯模拟系统的设计与实现 2021/1/18 82 其余各类中操作的详细可参阅程序源代码。 8.4.3 电梯模拟系统的设计与实现

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