




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第11章 面向对象的设计第11章 面向对象设计11.1 面向对象设计的准那么面向对象设计的准那么11.2 启发规那么启发规那么11.3 软件重用软件重用11.4 系统分解系统分解11.5 设计问题域子系统设计问题域子系统11.6 设计人机交互子系统设计人机交互子系统11.7 设计义务管理子系统设计义务管理子系统11.8 设计数据管理子系统设计数据管理子系统11.9 设计类中的效力设计类中的效力11.10 设计关联设计关联11.11 设计优化设计优化小结小结面向对象设计 设计那么是把分析阶段得到的需求转变成符合本钱和质量要求的、笼统的系统实现方案的过程。 从面向对象分析到面向对象设计(OOD),
2、是一个逐渐扩展模型的过程。 许多分析结果可以直接映射成设计结果,而在设计过程中又往往会加深和补充对系统需求的了解,从而进一步完善分析结果。面向对象方法的一大优势就是分析和设计活动之间的平滑(无缝)过渡. 面向对象设计可再细分为系统设计和对象设计。 系统设计确定实现系统的战略和目的系统的高层构造。 对象设计确定解空间中的类、关联、接口方式及实现效力的算法。 系统设计与对象设计之间的界限,比分析与设计之间的界限更模糊。 优秀设计就是使得系统在其整个生命周期中的总开销最小的设计, 其主要特点就是容易维护。11.1 面向对象设计的准那么1. 模块化面向对象软件开发方式,很自然地支持模块的设计原理:对象
3、就是模块。2. 笼统面向对象方法支持过程和数据笼统。类是一种笼统数据类型。运用者无须知道类中数据元素的详细表示方法,就可以经过接口运用类中定义的数据。这类笼统称为规格阐明笼统。3. 信息隐藏对象的封装性实现支持了信息隐藏。4. 弱耦合 耦合主要指不同对象之间相互关联的严密程度。两个对象应该经过类的接口实现耦合,而不应该依赖于类的详细实现细节(友元)。对象之间的两类耦合:(1) 交互耦合:交换音讯使交互耦合尽能够松散的准那么:减少音讯中包含的参数个数,降低参数的复杂程度, 减少音讯数。(2) 承继耦合:互为基类和派生类(非模块之间)与交互耦合相反,应该提高承继耦合程度。经过承继关系结合起来的基类
4、和派生类,构成了更大的模块。5. 强内聚在面向对象设计中存在下述3种内聚。1 效力内聚。一个效力应该完成一个且仅完成一个功能。2 类内聚。设计类的原那么是,一个类应该只需一个用途,它的属性和效力应该是高内聚的。类的属性和效力应该全都是完成该类对象的义务所必需的。假设某个类有多个用途,通常应该把它分解成多个公用的类。3 普通-特殊(承继)内聚。设计出的普通-特殊构造,应该符合多数人的概念,更准确地说,这种构造应该是对相应的领域知识的正确抽取。严密的承继耦合与高度的普通-特殊内聚是一致的。6. 可重用重用有两方面的含义: 一是尽量运用已有的类二是在设计新类的协议时思索未来的可重用性。1. 设计结果
5、应该明晰易懂保证设计结果明晰易懂的主要要素如下:1 用词一致:一词一用。2 运用已有的协议。3 减少音讯方式的数目。4 防止模糊的定义:类的用途有限,名明晰11.2 启发规那么2. 普通-特殊构造的深度应适当 一个中等规模(大约包含100个类)的系统中,类等级层次数应坚持为72。 不应该仅仅从方便编码的角度出发随意创建派生类,应该使普通-特殊构造与领域知识或常识坚持一致。3. 设计简单的类 小而简单的类便于开发和管理(高内聚)。为使类坚持简单,应该留意以下几点。(1) 防止包含过多的属性:完成的功能能够太多了。(2) 有明确的定义:义务应该简单。(3) 简化对象之间的协作关系。假设需求多个对象
6、协同配合才干做好一件事,那么破坏了类的简明性和明晰性。(4) 不要提供太多效力。典型地,一个类提供的公共效力不超越7个。 在开发大型软件系统时,遵照上述启发规那么也会带来另一个问题:设计出大量较小的类,难承继, 这同样会带来一定复杂性。 处理这个问题的方法之一,是把系统中的类按逻辑分组,也就是划分“主题。4. 运用简单的协议音讯中的参数最好不要超越3个。复杂音讯导致对象紧耦合。5. 运用简单的效力模块复杂性 类中的效力小为好,35行源程序语句,可用一个简单句子描画它的功能。 假设需求在效力中运用复杂的CASE语句,思索用普通-特殊构造替代这个类的能够性。6. 把设计变动减至最小稳定性设计的质量
7、越高,设计结果越稳定。随着时间推移,设计方案日趋成熟,改动越来越小。1. 重用重用也叫再用或复用,是指同一事物不作修正或稍加改动就多次反复运用。软件重用可分为3个层次:(1) 知识重用(例如,软件工程知识的重用)。(2) 方法和规范的重用(例如,面向对象方法或国家制定的软件开发规范的重用)。(3) 软件成分的重用。11.3 软件重用 11.3.1 概述2. 软件成分的重用级别软件成分的重用的3个级别:(1)几种方式的代码重用源代码剪贴:几乎无法跟踪原始代码块的修正源代码包含#include :重新编译都用最新源代码承继:可扩展或修正库中的类而不影响原有的代码(2) 设计结果重用重用某个软件系统
8、的设计模型。e.g. 同3(3) 分析结果重用重用分析模型, 例如,把一个运用系统移植到完全不同的软硬件平台上。3. 10种典型的可重用软件成分1 工程方案:软件质量保证方案。2 本钱估计:不同工程中类似功能的本钱估算。3 体系构造:事务类处置体系构造。4 需求模型/规格阐明:对象模型,数据流图。5 设计:体系构造、数据、接口和过程设计。6 源代码:兼容的程序构件。7 用户文档和技术文档:部分重用。8 用户界面:GUI 可占运用程序的60%代码量。9 数据: 记录构造,文件和完好的数据库。10 测试用例:与重用设计或代码相关的用例。面向对象技术中的类构件有3种重用方式:实例重用、承继重用和多态
9、重用。1. 可重用软构件应具备的特点(1) 模块独立性强:具有单一、完好的功能,且经过反复测试被确认是正确的。11.3.2 类构件(2) 具有高度可塑性:必需提供为顺应特定需求而扩展或修正已有构件的机制,且运用起来非常简一方便。(3) 接口明晰、简明、可靠,详尽的文档阐明。2. 类构件的重用方式(1) 实例重用按照需求创建类的实例。然后向它发送音讯,启动相应的效力,完成需求完成的任务。还可以用几个简单实例/类创建出一个更复杂的类, 见承继重用。类提供的效力过少,那么难被重用。(2) 承继重用提高承继重用的关键是设计合理的、具有一定深度的类构件承继层次构造:每个子类只参与少量新属性和新效力,而降
10、低其接口复杂度,表现出一个明晰的进化过程,提高可了解性;也为多态重用奠定了良好根底。(3) 多态重用利用多态性可简化对象的对外接口 (基类与派生类一样的对外接口),从而降低了音讯的复杂程度。运转时,接纳音讯的对象由多态性机制启动本人特定的方法,去呼应一个普通化的音讯,从而简化了音讯界面。能够影响重用性的操作:与表示方法有关的操作。例如,不同实例的比较、显示、擦除等等。与数据构造、数据大小等有关的操作。与外部设备有关的操作。例如,设备控制。算法在未来能够会改良(或改动)的中心操作。转换接口:重用时都必需重新定义的效力的集合, C+言语编程时,在基类中将其定义为纯虚函数。扩展接口:有多种能够的实现
11、算法的效力,派生类可改动算法或承继父类中的算法。用C+言语实现时,在基类中把这类效力定义为普通的虚函数。1. 质量:重用构件错误较少2. 消费率:3050%的重用导致消费率提高2540%3. 本钱节省:C=Cs-Cr/N-Cd11.3.3 软件重用的效益 处理复杂问题的普遍战略:“分而治之,各个击破系统的主要组成部分称为子系统, 根据所提供的功能来划分。子系统之间应该具有尽能够简单、明确的接口。相对独立地设计各个子系统, 减少子系统彼此间的依赖性。面向对象设计模型也由主题、类与对象、构造、属性、效力等5个层次组成。在逻辑上都有4个子系统: 问题域子系统、人机交互子系统、义务管理子系统和数据管理
12、子系统。11.4 系统分解不同的软件系统中,这四个子系统的重要程度和规模能够相差很大: 某些系统仅有3个(甚至少于3个)子系统。 子系统之间的两种交互方式 (1) 客户-供应商关系 (Client-supplier) “客户的子系统调用作为“供应商的子系统,后者完成某些效力任务并前往结果。运用这种交互方案,作为客户的子系统必需了解作为供应商的子系统的接口,然而后者却无须了解前者的接口,由于任何交互行为都是由前者驱动的。(2) 平等同伴关系(peer-to-peer)关系每个子系统都能够调用其他子系统,因此,每个子系统都必需了解其他子系统的接口。这种组织系统的方案比起客户-供应商方案来,交互更复
13、杂,从而使系统难于了解,容易发生不易觉察的设计错误。尽量运用客户-供应商关系。2.程度层次和垂直块组织系统的两种方案(1) 层次组织每层是一个子系统。同层的对象,彼此间相互独立,而不同层的对象可存在客户-供应商关系。层次构造又可进一步划分成:1) 封锁式: 每层仅运用其直接下层提供的效力。2) 开放式: 每层可以运用任何下层提供的效力。优缺陷: 简单/高效通常,在需求陈说中只描画了对系统顶层和底层的需求,顶层就是用户看到的目的系统,底层那么是可以运用的资源。设计者必需设计一些中间层次: 过渡, 效率, 质量。(2) 块状组织把系统垂直地分解成假设干个相对独立的、弱耦合的子系统/块,每块提供一种
14、类型的效力。采用层次与块状的混合构造3. 设计(分布式)系统的拓扑构造由子系统组成完好的系统时,典型的拓扑构造有管道形、树形、星形等。设计者应该采用与问题构造相顺应的、尽能够简单的拓扑构造,以减少子系统之间的交互数量。ATM系统的星型构造实例设计受详细实现环境的约束:本工程估计要运用的编程言语,可用的软构件库(主要是类库)程序员的编程阅历。 分析模型,为设计奠定了根底, 应尽能够保管。 设计仅需从实现角度对模型做一些补充或修正:增添、合并或分解类与对象、属性及效力,调整承继关系等。11.5 设计问题域子系统1. 调整需求一是用户需求或外部环境发生了变化;二是对象分析模型不能完好、准确地反映用户
15、的真实需求。2. 重用已有的类重用已有类的典型过程如下:(1) 选择重用最类似的已有类。(2) 从被重用的已有类派生出问题域类。(3) 添加或修正问题域类中需求的属性和效力。(4) 修正与问题域类相关的关联。3. 把问题域类组合在一同可以引入一个根类把问题域类组合在一同。e.g. 系统-子系统4. 增添普通化类以建立协议一些类需求有一个公共的协议:类似的效力, 共同接口。可以引入一个根类以便建立这个协议。5. 调整承继层次(1) 运用多重承继机制阔菱形比窄菱形易防止属性及效力的命名冲突(载重)。(2) 运用单承继机制运用仅提供单承继机制的言语,必需多重承继构造转换成单承继构造。人机交互子系统设
16、计确定人机交互的细节,对GUI, 包括指定窗口和报表的方式、设计命令层次等。原型是胜利地设计人机交互的常用手段。OOD的特点:设计人机交互类, 重用, 如Visual C+的MFC类库。11.6 设计人机交互子系统对象可以并发地任务。对象能够存在相互制约的顺序执行关系。设计任务的一项内容就是,确定哪些是必需/能够同时动作的对象,哪些是相互制约的对象。11.7 设计义务管理子系统1. 分析并发性动态模型是分析并发性的主要根据。对象彼此间不存在(间接/传送)交互那么它们可以是并发的。检查对象的形状图及它们之间交换的事件,可以把假设干个非并发的对象归并到一条控制线中:这条线上只需一个对象是活动的。计
17、算机中用义务(task)/进程(process)实现控制线。并发行为既可以在不同的处置器上实现,也可以在单处置器上用多义务操作系统实现。2. 设计义务管理子系统义务分类: 事件驱动型义务、时钟驱动型义务、优先义务、关键义务和协调义务。设计义务管理子系统,包括确定各类义务并把义务分配给适当的硬件或软件去执行。这与面相过程设计一样。OOD:能够添加新类或用已有类来实现义务管理。数据管理子系统是系统存储或检索对象的根本设备。它建立在某种数据存储管理方式(文件、关系数据库或面向对象数据库)之上而隔离了数据存储管理方式对对象存储或检索的影响。由于对象包含了程序和数据,面向对象的数据管理子系统比面向过程的
18、系统更必需更复杂。OODB是为此而生的数据存储管理方式。11.8 设计数据管理子系统1. OS文件:本钱低,简单,效率低2. 关系数据库:规范, 通用,成熟,开销大3. 面向对象数据库管理系统专门管理对象的新技术:扩展的关系数据库或面向对象程序设计言语。(1) RDBM+OO(2) OOL+Object 存储和管理运用方便,欠规范都用文件, 提供的效力越来越高.11.8.1 选择数据存储管理方式设计数据格式和相应的效力。1. 设计数据格式(1) 文件系统:属性表规范成第一范式=纪录。(2) 关系数据库:类的第三范式属性表=数据库表。(3) 面向对象数据库:不用11.8.2 设计数据管理子系统2
19、. 设计相应的效力在需求存储类中添加一个属性和效力用于完成存储对象本身的任务。在某个基类中定义这样的属性和效力。需求存储类的对象就从此基类中承继此属性和效力。定义一个ObjectServer(对象效力器)类,并创建它的实例。该类提供以下效力:- 保管对象;- 检索和恢复已存储的对象两种方法:1 每个对象本人保管本人2 由对象效力器担任存储对象ATM系统中,永久性数据存储放在分行计算机中。由于必需坚持数据的一致性和完好性,而且有多个并发事务同时访问这些数据,因此,采用成熟的商品化关系数据库管理系统存储数据。每个事务/更新作为一个不可分割的批操作来处置,由事务/更新封锁账户直到该事务终了为止。11
20、.8.3 例子分析得出的对象模型只列出最中心的效力。设计必需把动态模型中对象的行为以及功能模型中的数据处置,转换成由适当的类所提供的效力。11.9 设计类中的效力 11.9.1 确定类中应有的效力数据流图中的某些处置能够与对象(=数据流)提供的效力相对应,以下规那么有助于确定操作的目的对象类(该对象类的效力实现此操作):1 假设某个处置的功能是从输入流中抽取一个值,那么该输入流就是目的对象。2 假设某个处置具有类型一样的输入流和输出流,而且输出流本质上是输入流的另一种方式,那么该输入=输出流就是目的对象。3 假设某个处置从多个输入流得出输出值,那么该处置是输出流类的一个效力。4 假设某个处置把
21、对输入流处置的结果输出给数据存储或动作对象,那么该数据存储或动作对象就是目的对象。当一个处置涉及多个对象时,下面两条规那么有助于确定处置的归属:1 假设处置影响或修正了一个对象,最好把处置定为处置的目的的效力。2 调查处置涉及的对象类及他们之间的关联,找中心类,其他类和关联围绕的中心类应为处置的目的。1. 设计实现效力的算法思索的要素:(1) 选用复杂度较低的算法,不要过分追求高效率。(2) 容易了解与容易实现:往往与高效率有矛盾。(3) 易修正: 预测并预备能够的修正。11.9.2 设计实现效力的方法2. 选择数据构造为分析阶段的逻辑构造,设计方便、有效的物理数据构造:LIST/ARRAY,STRING/INT。3. 定义内部类和内部操作增添一些在需求陈说中没有提到的类,如用来存放在执行算法过程中的中间结果。复杂操作可以分解为简单操作。设计中应该定义这些新添加的简单操作为内部操作。设计必需确定实现关联的战略。1. 关联的遍历方式:单向和双向11.10 设计关联2. 实现单向关联用指针可以方便地实现单向关联。实现一元关联(a)的简单指针(b)=属性;实现多元关联(a)的指针集合(b)。3. 实现双向关联实现双向关联的3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 开封大学《思维与逻辑学》2023-2024学年第二学期期末试卷
- 金华职业技术学院《地质与地貌学实践》2023-2024学年第二学期期末试卷
- 皮装饰制品的消费者行为研究考核试卷
- 电子乐器模块接口设计考核试卷
- 皮革服装制作中的节能环保技术考核试卷
- 游戏开发工具与编程语言考核试卷
- 矿物成因类型与勘查标志考核试卷
- 矿石质量评价与控制考核试卷
- 矿山开采与环境保护协调发展考核试卷
- 皮革护理的国际化发展考核试卷
- 跨境电商平台下的中国二手车出口模式
- 2024年辅导员岗位素质试题及答案
- 运动素质知到课后答案智慧树章节测试答案2025年春浙江大学
- 中国资源循环集团有限公司招聘笔试真题2024
- JGJT46-2024《施工现场临时用电安全技术标准》条文解读
- 预应力混凝土管桩(L21G404)
- 2024年郑州职业技术学院单招职业技能测试题库及答案解析
- (高清版)TDT 1013-2013 土地整治项目验收规程
- 驾照体检表完整版本
- 2023年苏州市初中毕业生音乐美术现场考核试卷答案
- 常暗之厢(7规则-简体修正)
评论
0/150
提交评论