首页计算机计算机软件软件工程 20 第10章 面向对象设计2.pptx

20 第10章 面向对象设计2.pptx

页数:43页文件大小:4.27 MB来源: 软件工程ppt课件

本课件讲解面向对象设计的子系统划分与设计,先说明子系统之间的客户供应商与平等伙伴交互方式、层次组织与块状组织方案及拓扑结构,随后依次展开问题域、人机交互、任务管理与数据管理四类子系统的设计内容,并给出ATM系统的设计示例。

面向对象设计(二)封面,标示本部分涵盖类构件、系统分解、设计问题域子系统、设计人机交互子系统等内容
类构件:构件、独立性,依次讲解10.3.2类构件模块独立性、具有单一、完整的功能,且经过、具有高度可塑性等要点
类构件:构件、重构,围绕多态等要点展开说明
查看本课件的文字版(共 43 页,供检索与复制)

第1页:面向对象设计(二)封面

  • 10.3.2类构件利用面向对象技术,可以更方便更有效地实现软件重用
  • 面向对象技术中的“类”,是比较理想的可重用软构件,不妨称之为类构件
  • 应具有如下三个特点:

第2页:类构件:构件、独立性

10.3.2类构件模块独立性强。具有单一、完整的功能,且经过反复测试被确认是正确的。具有高度可塑性。可重用的软构件必须具有高度可裁剪性,也就是说,必须提供为适应特定需求而扩充或修改已有构件的机制,而且所提供的机制必须使用起来非常简单方便。接口清晰、简明、可靠。软构件应该提供清晰、简明、可靠的对外接口,而且还应该有详尽的文档说明,以方便用户使用。

第3页:类构件:构件、重构

10.3.2类构件类构件的重用方式实例重构继承重构多态重构

第4页:实例重构:由于类的封装

实例重构

  • 由于类的封装性,使用者无须了解实现细节就可以使用适当的构造函数,按照需要创建类的实例
  • 然后向所创建的实例发送适当的消息,启动相应的服务,完成需要完成的工作
  • 这是最基本的重用方式
  • 此外,还可以用几个简单的对象作为类的成员创建出一个更复杂的类,这是实例重用的另一种形式

第5页:继承重构当已有的类构件

继承重构当已有的类构件

  • 不能通过实例重用完全满足当前系统需求时,继承重用提供了一种安全地修改已有类构件,以便在当前系统中重用的手段
  • 面向对象方法特有的继承性提供了一种对已有的类构件进行裁剪的机制
  • 为提高继承重用的效果,关键是设计一个合理的、具有一定深度的类构件继承层次结构

第6页:多态重构利用:多态性

多态重构利用

多态性不仅可以使对象的对外接口更加一般化(基类与派生类的许多对外接口是相同的),从而降低了消息连接的复杂程度,而且还提供了一种简便可靠的软构件组合机制。系统运行时,根据接收消息的对象类型,由多态性机制启动正确的方法,去响应一个一般化的消息,从而简化了消息界面和软构件连接过程。

第7页:软件重用的效益整体

软件重用的效益整体

本页正文以课件图示为主,源文件仅提取到上述文字说明,具体图形内容请对照原课件图片。

第8页:质量随着每一次重用

质量随着每一次重用

  • 都会有一些错误被发现并被清除,构件的质量也会随之改善
  • 随着时间的推移,构件将变成实质上无错误的
  • HP公司经研究发现,被重用的代码的错误率是每千行代码中有0.9个错误,而新开发的软件的错误率是每千行有4.1个错误

第9页:生产率:全过程时

生产率

的全过程时,创建计划、模型、文档、代码和数据所需花费的时间将减少,从而将用较少的投入给客户提供相同级别的产品,因此,生产率得到了提高。

由于应用领域、问题复杂程度、项目组的结构和大小、项目期限、可应用的技术等许多因素都对项目组的生产率有影响,因此,不同开发组织对软件重用带来生产率提高的数字的报告并不相同,但基本上30%~50%的重用大约可以导致生产率提高25%~40%。

第10页:成本软件重用带来的净

成本软件重用带来的净

  • 成本节省可以用下式估算:C=Cs-Cr-CdCr相关的成本包括:领域分析与建模的成本
  • 设计领域体系结构的成本
  • 为便于重用而增加的文档的成本
  • 维护和完善可重用的软件成分的成本
  • 为从外部获取构件所付出的版税和许可证费
  • 创建(或购买)及运行重用库的费用
  • 对设计和实现可重用构件的人员的培训费用

第11页:10.4系统分解内容提纲

本节内容提纲

  • 设计的准则启发规则软件重用
  • 系统分解
  • 设计问题域子系统
  • 设计人机交互子系统
  • 设计任务管理子系统
  • 设计数据管理子系统
  • 设计类中的服务设计优化

第12页:系统分解

系统分解

本页正文以课件图示为主,源文件仅提取到上述文字说明,具体图形内容请对照原课件图片。

第13页:子系统之间的交互方式客户

子系统之间的交互方式客户

-供应商关系作为“客户”的子系统调用作为“供应商”的子系统,后者完成某些服务工作并返回结果。使用这种交互方案,作为客户的子系统必须了解作为供应商的子系统的接口,然而后者却无须了解前者的接口,因为任何交互行为都是由前者驱动的。平等伙伴关系每个子系统都可能调用其他子系统,因此,每个子系统都必须了解其他子系统的接口。

第14页:组织系统的方案层次

组织系统的方案层次

  • 组织把软件系统组织成一个层次系统,每层是一个子系统
  • 上层在下层的基础上建立,下层为实现上层功能而提供必要的服务
  • 实际上,在上、下层之间存在客户-供应商关系
  • 低层子系统提供服务,相当于供应商,上层子系统使用下层提供的服务,相当于客户
  • 块状组织把软件系统垂直地分解成若干个相对独立的、弱耦合的子系统,一个子系统相当于一块,每块提供一种类型的服务

第15页:组织系统的方案利用层次

组织系统的方案利用层次

和块的各种可能的组合,可以成功地由多个子系统组成一个完整的软件系统。当混合使用层次结构和块状结构时,同一层次可以由若干块组成,而同一块也可以分为若干层。

第16页:设计系统的拓扑结构

设计系统的拓扑结构

由子系统组成完整的系统时,典型的拓扑结构有管道形、树形、星形等。设计者应该采用与问题结构相适应的、尽可能简单的拓扑结构,以减少子系统之间的交互数量。

第17页:10.5设计问题域子系统内容提纲

本节内容提纲

  • 设计的准则启发规则软件重用
  • 系统分解
  • 设计问题域子系统
  • 设计人机交互子系统
  • 设计任务管理子系统
  • 设计数据管理子系统
  • 设计类中的服务设计优化

第18页:设计问题域子系统

设计问题域子系统

面向对象分析所得出的问题域精确模型,为设计问题域子系统奠定了良好的基础,建立了完整的框架。只要可能,就应该保持面向对象分析所建立的问题域结构。通常,面向对象设计仅需从实现角度对问题域模型做一些补充或修改,主要是增添、合并或分解类与对象、属性及服务,调整继承关系等等。当问题域子系统过分复杂庞大时,应该把它进一步分解成若干个更小的子系统。

第19页:设计问题域子系统(续)

设计问题域子系统

在面向对象设计过程中,可能对面向对象分析所得出的问题域模型做的补充或修改。增添一般化类以建立协议调整继承层次把问题域类组合在一起重用已有的类调整需求。

第20页:调整需求有两种情况

调整需求有两种情况

  • 会导致修改通过面向对象分析所确定的系统需求:一是用户需求或外部环境发生了变化
  • 二是分析员对问题域理解不透彻或缺乏领域专家帮助,以致面向对象分析模型不能完整、准确地反映用户的真实需求
  • 无论出现上述哪种情况,通常都只需简单地修改面向对象分析结果,然后再把这些修改反映到问题域子系统中

第21页:重用已有的类:如果有可能

重用已有的类

如果有可能重用已有的类,典型过程如下:选择有可能被重用的已有类,标出这些候选类中对本问题无用的属性和服务,尽量重用那些能使无用的属性和服务降到最低程度的类。在被重用的已有类和问题域类之间添加泛化关系(即从被重用的已有类派生出问题域类)。标出问题域类中从已有类继承来的属性和服务,现在已经无须在问题域类内定义它们了。

修改与问题域类相关的关联,必要时改为与被重用的已有类相关的关联。

第22页:设计问题域子系统:面向对象

  • (3)把问题域类组合在一起在面向对象设计过程中,设计者往往通过引入一个根类而把问题域类组合在一起
  • 事实上,这是在没有更先进的组合机制可用时才采用的一种组合方法
  • 此外,这样的根类还可以用来建立协议

第23页:增添一般化类以建立协议

增添一般化类以建立协议

在设计过程中常常发现,一些具体类需要有一个公共的协议,也就是说,它们都需要定义一组类似的服务。在这种情况下可以引入一个附加类(例如,根类),以便建立这个协议(即命名公共服务集合,这些服务在具体类中仔细定义)。

第24页:调整继承关系:如果

调整继承关系

如果面向对象分析模型中包含了多重继承关系,然而所使用的程序设计语言却并不提供多重继承机制,则必须修改面向对象分析的结果。即使使用支持多重继承的语言,有时也会出于实现考虑而对面向对象分析结果作一些调整。

第25页:调整继承关系使用多重

调整继承关系使用多重

继承机制时,应该避免出现属性及服务的命名冲突。多重继承结构转换成单继承结构,在多重继承结构中的某些继承关系,经简化后将不再存在,这表明需要在各个具体类中重复定义某些属性和服务。

第26页:设计问题域子系统:ATM、假设

例子由于在面向对象分析过程中已经对ATM系统做了相当仔细的分析,而且假设所使用的实现环境能完全支持面向对象分析模型的实现,因此,在面向对象设计阶段无须对已有的问题域模型作实质性的修改或扩充。

第27页:本章内容提纲

本节内容提纲

  • 设计的准则启发规则软件重用
  • 系统分解
  • 设计问题域子系统
  • 设计人机交互子系统
  • 设计任务管理子系统
  • 设计数据管理子系统
  • 设计类中的服务设计优化

第28页:设计人机交互子系统

设计人机交互子系统

从面向对象设计的角度补充关于设计人机交互子系统的策略。分类用户描述用户设计命令层次设计人机交互类。

第29页:分类用户设计者应该认真

分类用户设计者应该认真

研究使用它的用户。应该深入到用户的工作现场,仔细观察用户是怎样做他们的工作的。通常从下列几个不同角度进行分类:按技能水平分类(新手、初级、中级、高级)按职务分类(总经理、经理、职员)按所属集团分类(职员、顾客)。

第30页:描述用户应该仔细了解将来

描述用户应该仔细了解将来

  • 使用系统的每类用户的情况,把获得的下列各项信息记录下来:用户类型
  • 使用系统欲达到的目的
  • 特征(年龄、性别、受教育程度、限制因素等)
  • 关键的成功因素(需求、爱好、习惯等)
  • 技能水平
  • 完成本职工作的脚本

第31页:设计命令层次:设计命令层次

设计命令层次

设计命令层次的工作通常包含以下几项内容。研究现有的人机交互含义和准则设计图形用户界面时,应该保持与普通Windows应用程序界面相一致,并遵守广大用户习惯的约定,这样才会被用户接受和喜爱。确定初始的命令层次所谓命令层次,实质上是用过程抽象机制组织起来的、可供选用的服务的表示形式。

设计命令层次时,通常先从对服务的过程抽象着手,然后再进一步修改它们,以适合具体应用环境的需要。

第32页:设计命令层次精化

设计命令层次精化

  • 命令层次:次序:仔细选择每个服务的名字,并在命令层的每一部分内把服务排好次序
  • 排序时或者把最常用的服务放在最前面,或者按照用户习惯的工作步骤排序
  • 整体-部分关系:寻找在这些服务中存在的整体-部分模式,这样做有助于在命令层中分组组织服务
  • 宽度和深度:由于人的短期记忆能力有限,命令层次的宽度和深度都不应该过大
  • 操作步骤:应该用尽量少的单击、拖动和击键组合来表达命令,而且应该为高级用户提供简捷的操作方法

第33页:设计人机交互类

设计人机交互类

人机交互类与所使用的操作系统及编程语言密切相关。例如,在Windows环境下运行的VisualC++语言提供了MFC类库,设计人机交互类时,往往仅需从MFC类库中选出一些适用的类,然后从这些类派生出符合自己需要的类就可以了。

第34页:本章内容提纲

本节内容提纲

  • 设计的准则启发规则软件重用
  • 系统分解
  • 设计问题域子系统
  • 设计人机交互子系统
  • 设计任务管理子系统
  • 设计数据管理子系统
  • 设计类中的服务设计优化

第35页:设计任务管理子系统

设计任务管理子系统

  • 通过面向对象分析建立起来的动态模型,是分析并发性的主要依据
  • 如果两个对象彼此间不存在交互,或者它们同时接受事件,则这两个对象在本质上是并发的
  • 通过检查各个对象的状态图及它们之间交换的事件,能够把若干个非并发的对象归并到一条控制线中
  • 所谓控制线,是一条遍及状态图集合的路径,在这条路径上每次只有一个对象是活动的
  • 通常把多个任务的并发执行称为多任务

第36页:设计任务管理子系统(续)

设计任务管理子系统

设计任务管理子系统,包括确定各类任务并把任务分配给适当的硬件或软件去执行。常见的任务包括:事件驱动型任务时钟驱动型任务优先任务关键任务协调任务。

第37页:事件驱动型任务

事件驱动型任务

事件通常是表明某些数据到达的信号。这类任务可能主要完成通信工作。例如,与设备、屏幕窗口、其他任务、子系统、另一个处理器或其他系统通信。工作过程:任务处于睡眠状态(不消耗处理器时间),等待来自数据线或其他数据源的中断。一旦接收到中断就唤醒了该任务,接收数据并把数据放入内存缓冲区或其他目的地,通知需要知道这件事的对象,然后该任务又回到睡眠状态。

第38页:时钟驱动型任务

时钟驱动型任务

  • 某些任务每隔一定时间间隔就被触发以执行某些处理,例如,某些设备需要周期性地获得数据
  • 某些人机接口、子系统、任务、处理器或其他系统也可能需要周期性地通信
  • 在这些场合往往需要使用时钟驱动型任务
  • 工作过程:任务设置了唤醒时间后进入睡眠状态
  • 任务睡眠(不消耗处理器时间),等待来自系统的中断
  • 一旦接收到这种中断,任务就被唤醒并做它的工作,通知有关的对象,然后该任务又回到睡眠状态

第39页:优先任务:优先任务

优先任务

优先任务可以满足高优先级或低优先级的处理需求:高优先级:某些服务具有很高的优先级,为了在严格限定的时间内完成这种服务,可能需要把这类服务分离成独立的任务。低优先级:与高优先级相反,有些服务是低优先级的,属于低优先级处理(通常指那些背景处理)。设计时可能用额外的任务把这样的处理分离出来。

第40页:关键任务:关键任务是

关键任务

  • 关键任务是有关系统成功或失败的关键处理,这类处理通常都有严格的可靠性要求
  • 在设计过程中可能用额外的任务把这样的关键处理分离出来,以满足高可靠性处理的要求
  • 对高可靠性处理应该精心设计和编码,并且应该严格测试

第41页:协调任务当系统中存在3个以上

协调任务当系统中存在3个以上

该增加一个任务,用它作为协调任务。引入协调任务会增加系统的总开销(增加从一个任务到另一个任务的转换时间),但是引入协调任务有助于把不同任务之间的协调控制封装起来。使用状态转换矩阵可以比较方便地描述该任务的行为。这类任务应该仅做协调工作,不要让它再承担其他服务工作。

第42页:本章内容提纲

本节内容提纲

  • 设计的准则启发规则软件重用
  • 系统分解
  • 设计问题域子系统
  • 设计人机交互子系统
  • 设计任务管理子系统
  • 设计数据管理子系统
  • 设计类中的服务设计优化

第43页:设计数据管理子系统

设计数据管理子系统

  • 被存储的对象,应该知道访问哪些数据库表,怎样访问所需要的行,怎样检索出旧值(如果有的话),以及怎样用现有值更新它们
  • 此外,还应该定义一个ObjectServer类,并声明它的对象
  • 该类提供下列服务:通知对象保存自身
  • 检索已存储的对象(查找,读值,创建并初始化对象),以便由其他子系统使用这些对象
顶部目录