面向对象的设计.ppt
《面向对象的设计.ppt》由会员分享,可在线阅读,更多相关《面向对象的设计.ppt(63页珍藏版)》请在三一文库上搜索。
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. 模块化 面向对象软件开发模式,很自然地支持模块的设计原理:对象就是模块。 2. 抽象 面向对象方法支持过程和数据抽象。 类是一种抽象数据类型。使用者无须知道类中数据元素的具体表示方法,
3、就可以通过接口使用类中定义的数据。 这类抽象称为规格说明抽象。 3. 信息隐藏 对象的封装性实现支持了信息隐藏。,4. 弱耦合 耦合主要指不同对象之间相互关联的紧密程度。 两个对象应该通过类的接口实现耦合,而不应该依赖于类的具体实现细节(友元)。 对象之间的两类耦合: (1) 交互耦合:交换消息 使交互耦合尽可能松散的准则:减少消息中包含的参数个数,降低参数的复杂程度, 减少消息数。 (2) 继承耦合:互为基类和派生类(非模块之间) 与交互耦合相反,应该提高继承耦合程度。 通过继承关系结合起来的基类和派生类,构成了更大的模块。,5. 强内聚 在面向对象设计中存在下述3种内聚。 (1) 服务内聚
4、。一个服务应该完成一个且仅完成一个功能。 (2) 类内聚。设计类的原则是,一个类应该只有一个用途,它的属性和服务应该是高内聚的。类的属性和服务应该全都是完成该类对象的任务所必需的。如果某个类有多个用途,通常应该把它分解成多个专用的类。 (3) 一般-特殊(继承)内聚。设计出的一般-特殊结构,应该符合多数人的概念,更准确地说,这种结构应该是对相应的领域知识的正确抽取。 紧密的继承耦合与高度的一般-特殊内聚是一致的。,6. 可重用 重用有两方面的含义: 一是尽量使用已有的类 二是在设计新类的协议时考虑将来的可重用性。,1. 设计结果应该清晰易懂 保证设计结果清晰易懂的主要因素如下: (1) 用词一
5、致:一词一用。 (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 测试用例:与
9、重用设计或代码相关的用例。,面向对象技术中的类构件有3种重用方式:实例重用、继承重用和多态重用。 1. 可重用软构件应具备的特点 (1) 模块独立性强:具有单一、完整的功能,且经过反复测试被确认是正确的。,11.3.2 类构件,(2) 具有高度可塑性:必须提供为适应特定需求而扩充或修改已有构件的机制,且使用起来非常简单方便。 (3) 接口清晰、简明、可靠,详尽的文档说明。,2. 类构件的重用方式 (1) 实例重用 按照需要创建类的实例。然后向它发送消息,启动相应的服务,完成需要完成的工作。 还可以用几个简单实例/类创建出一个更复杂的类, 见继承重用。类提供的服务过少,则难被重用。 (2) 继承
10、重用 提高继承重用的关键是设计合理的、具有一定深度的类构件继承层次结构: 每个子类只加入少量新属性和新服务,而降低其接口复杂度,表现出一个清晰的进化过程,提高可理解性;也为多态重用奠定了良好基础。,(3) 多态重用 利用多态性可简化对象的对外接口 (基类与派生类相同的对外接口),从而降低了消息的复杂程度。运行时,接收消息的对象由多态性机制启动自己特定的方法,去响应一个一般化的消息,从而简化了消息界面。 可能影响重用性的操作: 与表示方法有关的操作。例如,不同实例的比较、显示、擦除等等。 与数据结构、数据大小等有关的操作。 与外部设备有关的操作。例如,设备控制。 算法在将来可能会改进(或改变)的
11、核心操作。,转换接口:重用时都必须重新定义的服务的集合, C+语言编程时,在基类中将其定义为纯虚函数。 扩充接口:有多种可能的实现算法的服务,派生类可改变算法或继承父类中的算法。用C+语言实现时,在基类中把这类服务定义为普通的虚函数。,1. 质量:重用构件错误较少 2. 生产率:3050%的重用导致生产率提高2540% 3. 成本节省:C=Cs-Cr/N-Cd,11.3.3 软件重用的效益,解决复杂问题的普遍策略:“分而治之,各个击破” 系统的主要组成部分称为子系统, 根据所提供的功能来划分。 子系统之间应该具有尽可能简单、明确的接口。 相对独立地设计各个子系统, 减少子系统彼此间的依赖性。
12、面向对象设计模型也由主题、类与对象、结构、属性、服务等5个层次组成。 在逻辑上都有4个子系统: 问题域子系统、人机交互子系统、任务管理子系统和数据管理子系统。,11.4 系统分解,不同的软件系统中,这四个子系统的重要程度和规模可能相差很大: 某些系统仅有3个(甚至少于3个)子系统。,子系统之间的两种交互方式 (1) 客户-供应商关系 (Client-supplier) “客户”的子系统调用作为“供应商”的子系统,后者完成某些服务工作并返回结果。使用这种交互方案,作为客户的子系统必须了解作为供应商的子系统的接口,然而后者却无须了解前者的接口,因为任何交互行为都是由前者驱动的。,(2) 平等伙伴关
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 设计
链接地址:https://www.31doc.com/p-2605231.html