【实用软件工程】面向对象设计_第1页
【实用软件工程】面向对象设计_第2页
【实用软件工程】面向对象设计_第3页
【实用软件工程】面向对象设计_第4页
【实用软件工程】面向对象设计_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八章 面向对象设计,面向对象设计概述 问题域子系统(PDC)的设计 人机交互子系统(HIC)的设计 任务管理子系统(DMC)的设计 数据管理子系统(DMC)的设计,面向对象设计(OOD)仍然需要进行总体设计和详细设计。在面向对象方法中,总体设计和详细设计也没有清晰的界限。本章主要介绍如何建立系统的基本框架。,总体设计将系统分成几个子系统,建立系统的基本框架,每个子系统使用与面向对象分析一致的表示方法建立模型,可以说,总体设计是逐渐扩充面向对象分析模型的过程;详细设计则针对每个子系统中的每个类的作用、类的内部构成(属性和服务)以及类之间关系进行清晰、具体的描述,使得在实现阶段程序员根据该描述能

2、很容易地转化成程序。,第一节 面向对象设计概述,一、面向对象设计系统的基本框架 面向对象分析集中于问题域、系统责任和需求,它是独立于编程语言的,面向对象设计集中于用可得到的技术实现上述需求,在很大程度上仍然独立于编程语言。面向对象设计是面向对象分析的扩充,主要是增加各种组成部分。具体地说,面向对象分析识别和定义类&对象,这些类&对象直接反映问题域和系统任务。而面向对象设计识别和定义其它附加类&对象,它们反映需求的一种实现。,面向对象设计的模型仍然由5层组成,但划分为四个组成部分:人机交互部分(HIC:Human Interface Component)、问题域(PDC:Problem Doma

3、in Component)、任务管理(TMC:Task Management Component)和数据管理(DMC:Data Management Component)。,人机交 互部分,主题层,类&对象层,结构层,属性层,方法层,问题域 部分,任务管 理部分,数据管 理部分,面向对象设计模型,人机交互部分包括: 有效的人机交互所必需的实际显示和输入,负责向用户提供良好的界面; 问题域部分就是对面向对象分析的结果进行改进; 任务管理部分是对系统中若干任务并发执行时,设计合理的任务执行方案; 数据管理部分是对数据的存放和相应的服务进行设计。,这四个部分相对独立,它们之间通过消息相互联系。之所以

4、这样划分是出于使整个系统容易维护的考虑,让将来的每一次变动使系统的修改程度最小。 例如将来考虑将系统的鼠标点击输入改为语音输入,那么只需修改人机交互部分,其它部分不用改动。,二、面向对象设计的准则 结构化方法中软件设计的基本原理在进行面向对象设计时仍然成立,但是增加了一些与面向对象方法密切相关的新特点,从而具体化为面向对象设计准则。,(一)模块化 面向对象软件开发模式,很自然地支持了把系统分解成模块的设计原理:类就是模块。 它是把数据结构和对数据的操作紧密地结合在一起所构成的模块。,(二)抽象 面向对象方法不仅支持过程抽象,而且支持数据抽象。类实际上是一种抽象数据类型,它对外开放的公共接口构成

5、了类的规格说明(即协议),这种接口规定了外界可以使用的合法操作符,利用这些操作符可以对类实例中包含的数据进行操作。使用者无须知道这些操作符的实现算法和类中数据元素的具体表示方法,就可以通过这些操作符使用类中定义的数据。通常把这类抽象称为规格说明抽象。,(三)信息隐藏 在面向对象方法中,信息隐藏通过对象的封装来实现。对于用户来说,类中的属性的表示方法和操作的实现算法都应该是隐藏的。,(四)弱耦合 结构化方法中耦合是指在系统中的各个模块之间的相互连接或相互依赖的强度。在面向对象方法中,耦合主要指不同对象之间通过消息相互关联的紧密程度。应该遵守下列准则使这种耦合尽量松散:,1.尽量降低消息连接的复杂

6、程度。应该尽量减少消息中包含的参数个数,降低参数的复杂程度。 2.减少对象发送(或接收)的消息数。,(五)强内聚 内聚用于描述系统内组成部分中各元素彼此结合的紧密程度,应尽量避免低内聚。在面向对象设计中,从三个层次来考察内聚性。 1.单个方法的内聚性:方法是指操作的实现过程,一个操作由一个或多个方法实现。对方法的内聚性的评价与结构化设计中的相同,具有高内聚的方法应当只执行一个功能。,2.类的内聚性:设计类的原则是,一个类应该只有一个用途,类中的属性和操作应该全都是完成该类的任务所必需的,其中不包括无用的属性和操作。如果某个类有多个用途,通常应该把它分解成多个专用的类。 3.层次结构的内聚性:对

7、象之间通过继承关系而构成的层次结构,特殊类应该确实是对它的一般化类的一种具体化。如果一个派生类摒弃了它基类的许多属性和服务,那就是一个低内聚的。,(六)可重用 软件重用是提高软件开发生产率和目标系统质量的重要途径。重用基本上从设计开始。 重用有两方面的含义:一是尽量使用已有的类(包括开发环境提供的类库,以及以往开发类似系统是创建的类);二是如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将来的可重复使用性。,第二节 问题域子系统(PDC)的设计,一般来说,基于问题域的总体组织框架是长时间保持稳定的(当然,细节是会变的,这里加一个类说明,那里加一个属性或服务)。 例如银行储蓄系统中分行、

8、终端、储户这个组织结构会长期保持稳定,虽然如储户的属性可能会发生变化。正是基于这种稳定,面向对象的分析和设计模型按问题域本身的样子来组织系统,也能从容适应变化的需求,能保持稳定性。,OOD中,OOA的结果恰好就是OOD的问题域部分。这也正是面向对象的设计和分析方法的一个最优良的特点。但是可能要作些改动,这种改动不是否定OOA的分析结果,而是完善。,这些改动基于以下几个原因: (1)由于需求的变化; (2)分析员对问题域的理解可能有误解或欠缺,需要对此加以修正; (3)分析与设计毕竟是性质不同的两类开发工作,分析可以而且应该与具体实现无关,而设计在很大程度上受具体实现环境的约束。,一、对OOA的

9、改动准则 (一)依照面向对象设计的准则审核每个类 优秀的设计能够权衡各种因素,从而使得系统在其整个生命周期中的总开销最小。对大多数软件系统而言,60%以上的软件费用都用于软件维护,因此,优秀软件设计的一个主要特点就是容易维护。在问题域系统中,仔细对照面向对象设计的准则,审查OOA中的每个类。,(二)重用设计和编程的类 根据需要重用现成的类,现成类是已用OO语言或非OO语言编写的可用源程序。例如图(a)是OOA结果中有一个类“交通工具”,设计者发现有一个类似的现成类“交通工具1”( 图(b),那么他就可以按以下步骤重用现成类(图(c)。,PDC中重用类例子,(三)通过增添超类而建立协议 将问题域

10、许多不同的类聚集在一起,这时可建立一个新的父类超类,将这许多类作为该超类的子类。这样一方面有助于改进模型的可理解性,同时可以在超类中给出一个公共的协议,用来与其它子系统或与外部系统部件进行通信。通信的细节在子类中定义。,(四)考虑语言调整继承支持级别 如果OOA模型依赖于多重继承而设计者发现最终用于实现系统的程序设计语言只能支持单继承或不具备继承机制。这时就需要修改原来的类层次结构。 (五) 修改设计以提高性能 如果开发的系统在执行速度上要求严格,我们就需对问题域部分加以修改,例如合并那些消息频繁连接的类。,二、银行储蓄系统的PDC 储蓄系统中,为了提高整个系统的性能,增加“终端控制器”来控制

11、和协调柜员及终端的所有动作,它和“事务”对象协同工作;此外,增加了“事务记录器”,用一个独立的对象记录柜员的操作过程,当需要时能复查柜员的操作过程。以下是银行储蓄系统的PDC部分,为简单起见,以简单的类表示方式描述。,储户,帐户,事务,1+,1+,1+,1+,1+,存款事务,取款事务,总行,分行,储蓄所,1+,柜员,终端控制器,事务记录器,银行储蓄系统的PDC,终端,1+,1+,1+,第三节 人机交互子系统(HIC)的设计,对任何一个系统来说,良好的界面是保证其成功的基本条件。面向对象方法在设计阶段考虑HIC,目的是在开发OOA模型时集中对问题的分析,可以避免了依赖于实现的细节,如窗口和屏幕等

12、。OOD中将用户界面技术从系统其它部分分离出来,目的是如果将来决定该改变用户的界面,那么只需修改HIC类,而系统的其它部分可以保持不变。HIC包括屏幕、报告、调制解调器连接、网络接口、控制面板(如按钮、指示灯和仪表等)。,一、人机交互界面设计的过程 在面向对象设计方法中,也和其它设计方法一样,人机交互界面需要详细考究。在这方面,常常从以下几个方面来考虑。 (一) 研究系统用户 花些时间研究将使用系统的用户,将用户按技能、组织、身份进行分类,对每一类用户研究他们的特征(年龄、教育水平、限制等)、使用系统的目的、最关心的功能以及如何使用系统。,(二) 设计命令 为用户设计命令形式,研究现有的人机交

13、互含义和准则。如果在微机上使用,现在windows已成了微机上图形用户界面事实上工业标准,应该仔细研究。同时结合本系统与用户的特点,设计出最友好的人机界面。,(三) 设计详细的交互 为每一个命令设计详细的交互,在设计交互过程中要遵循以下规则: 1.一致性(一致的术语、一致的步骤、一致的活动); 2.操作步骤少; 3.减少人脑记忆负担; 4.趣味浓,有吸引力; 5.具有undo功能; 6.具有闭合块(用一些小步骤引出定义良好的活动)。,(四) 作原型 在对人机交互部分的设计中,做人机交互原型是非常必要的。这样,用户可对提出的交互活动进行体验和操作,从而找出不足。这对于完善交互设计系统起到了监督和

14、促进作用,使将来设计的界面更令人满意。,二、人机交互类的设计 人机交互类的设计很大程度上依赖于所用的操作系统和编程语言。 例如在windows环境下,从主窗口和部件的人机交互开始,以分类或组装的结构设计出各层的窗口类,每个类中封装了菜单条、下拉菜单、弹出菜单的定义;定义了用来创建菜单、加亮选择项、引用相应的响应所需的服务、所有的物理对话、窗口的实际显示。设计人员可以重用现成的类,例如Visual C+语言提供的MFC类库。,三、银行储蓄系统的HIC 下图是储蓄系统的HIC,由各种窗口组成,实际上,每个窗口对象可以进一步分解为各种文本域、选择按钮、图符等。当然如果有现成的构成GUI的类库,那么可

15、以直接利用,只需提供合适的参数就行。,银行系统窗口,存款窗口,取款窗口,初次存款窗口,一般存款窗口,银行储蓄系统的HIC,事务窗口,验卡窗口,验密码窗口,第四节 任务管理子系统(DMC)的设计,有的系统中存在着许多并发行为,例如银行储蓄系统中,每个时刻多个柜员同时都在请求系统处理着各项事务,因此存在着许多并发行为。当系统中有许多并发行为时,需要依照各个行为的协调和通信关系,划分各种任务,以简化并发行为的设计和编码。任务是进程的别称,是执行一系列活动的一段程序。不同的任务标识了同时发生的不同行为。这种并发行为既可以在不同的处理器上实现,也可以在单个处理器上利用中断机制实现。,任务管理主要包括任务

16、的选择和调整,为此,在任务管理子系统中需要标识一些新类,这些类建立以后将主要负责处理并发问题、中断、操作系统一级的调度以及有关特定平台的一些问题。正如HIC所做那样,TMC把有关特定平台的处理机制与系统其它部分隔离开来。这样,如果决定将系统移植到另一个平台,那么只需替换TMC的类就可以了。,一、任务管理子系统设计策略 任务管理子系统设计首先要对任务进行选择,然后对每个任务进行审查。 (一)任务的选择 任务的选择从以下几个方面去查找: 1、事件驱动 有些任务是事件驱动的,而事件常常是当数据到来时发出一个信号。在系统运行时,这种任务的工作过程是:任务睡眠(不消耗CPU时间),等待一个来自数据线或其

17、它数据源的中断;当接到中断时,任务唤醒,接收数据并把数据放入内存缓冲区或其它目的地,通知需要知道这件事的对象;然后该任务又回到睡眠状态。,2、时钟驱动 某些任务每隔一定时间间隔就被触发以执行某些处理。 例如某些设备需要周期性地获得数据;某些人机界面、子系统、任务、处理机或与其它系统需要周期性的通信。在这些场合往往需要使用时钟驱动型任务。 这种任务工作过程是:任务设置了唤醒时间后进入睡眠状态,等待来自系统的时钟中断;当接到中断时,任务唤醒并做它的工作,通知有关的对象;然后设置唤醒时间后又回到睡眠状态。,(二)审查任务并调整 任务找到之后,仔细审查每个任务。 1、设置任务的优先级 系统中,对每个任

18、务的时间要求不同,可以通过设置优先级来安排各个任务。某些操作必须在很强的时间限制内完成,应该把它分离成独立的任务,设置高优先级,执行时优先执行。,2.识别协调者 当有三个或更多的任务时,应当增加一个附加任务,起协调者的作用。 3.调整任务 进一步仔细分析和选择每个确实需要的任务,应该使系统中包含的任务数尽量少。,二、银行储蓄系统的TMC 下图中,储蓄系统中,通过读卡器将存折的帐号读入,密码也由储户从密码输入器输入,那么可以设计两个任务,“读卡中断”、“密码中断”分别接收读卡器的数据和密码输入器的数据。,中断,读卡中断,密码中断,读卡器和密码输入器如何接收数据的过程被封装在相应“读卡中断”和“密

19、码中断”类中,接收数据之后,将它进行相应的处理并送到有关的对象中。图86以读卡为例,表明了银行储蓄系统中TMC、PDC、HIC之间如何工作。银行储蓄系统中TMC、PDC、HIC相互隔离,每一子系统内部的信息对系统其它部分是隐藏的,它们相互之间通过消息进行联系。,银行系统TMC的“读卡中断”平常处于睡眠状态,当读卡器开始工作时,“读卡中断”被唤醒,获得数据,向PDC的“分行”类发送消息,要求检验帐号,“分行”类接收消息后,执行相应的服务,将结果发给HIC的“验卡窗口”类,“验卡窗口”类接到消息,将相应的检验结果以一定的方式显示在屏幕上。,很明显,在这个过程中,需要做许多工作。但这样做的好处是:提

20、高系统的可维护性和可修改性,系统只需要修改一小部分就能适应一个新的环境。 例如读卡器的读卡方式发生变化或验卡窗口的显示方式发生变化,只需修改相应的读卡中断或验卡窗口而不影响系统其它部分。,HIC、PDC、TMC的联系,第五节 数据管理子系统(DMC)的设计,当系统中的数据需要长期保存时,需要对数据管理进行设计。设置DMC部分的主要原因,和OOD的其它部分一样,将特定的数据库管理技术与其它部分隔离开来,避免数据存储管理模式的改变对系统的影响。目前主要有3种数据管理模式: 文件管理 关系数据库管理 面向对象数据库管理。,一、文件管理 文件管理系统是操作系统的一个组成部分,使用它长期保存数据具有成本低和简单的特点。用这种方式存储数据时,列出需要存储的类和属性,把这个列表引入第一范式,为每个第一范式表建立一个文件。为减少文件数,可把表示一般特殊结构的属性萎缩成一个单一文件。要注意满足性能及存储的需求。在DMC中定义一个“ObjectSever”(对象服务器)类,为每个文件创建一个实例,该类中封装了如何建立、读、写以及删除的机制。其它子系统中的对象需要访问数据时,增加服务,与DMC中的对象建立消息连接。,二、关系数据库管理 关系数据库管理系统建立在关系理论的基础上,它使用若干表格来管理数据。用这种方式存储数据时,列出需要存储的类和属性,把这个列表引入第三范式,为每个第三范式表

温馨提示

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

评论

0/150

提交评论