350 likes | 593 Views
第 22 章 面向对象设计. 软 件 工 程. 第 22 章 面向对象设计. 22.1 面向对象系统的设计 22.2 系统设计过程 22.3 对象设计过程 22.4 设计模式 22.5 面向对象程序设计 22.6 小结. OOD 基于四个软件设计概念:抽象、信息隐蔽、功能独立性和模块性建造系统的能力,提供了使设计者能以较小的复杂性和折衷达到所有这四个特征的机制。. 22.1 面向对象系统的设计. OO 设计金字塔的四个层次是: 子系统层 类和对象层 消息层 责任层. OO 设计金字塔. 责任设计. 消息设计. 类及对象设计.
E N D
第22章面向对象设计 软 件 工 程
第22章面向对象设计 22.1 面向对象系统的设计 22.2 系统设计过程 22.3 对象设计过程 22.4 设计模式 22.5 面向对象程序设计 22.6 小结
OOD基于四个软件设计概念:抽象、信息隐蔽、功能独立性和模块性建造系统的能力,提供了使设计者能以较小的复杂性和折衷达到所有这四个特征的机制。OOD基于四个软件设计概念:抽象、信息隐蔽、功能独立性和模块性建造系统的能力,提供了使设计者能以较小的复杂性和折衷达到所有这四个特征的机制。
22.1 面向对象系统的设计 OO设计金字塔的四个层次是: • 子系统层 • 类和对象层 • 消息层 • 责任层
OO设计金字塔 责任设计 消息设计 类及对象设计 子 系 统 设 计
将OO分析模型转换到OO设计模型 操作、 协作者 属性、 CRC 索引卡片 责任设计 对象-关 系模型 用例 消息设计 类及对象设计 对象-行为模型 子 系 统 设 计 分析模型 设计模型
将分析模型转换为软件设计 加 数 工 据 过程设计 E-R图 数据 流图 规 对 数据 字典 约 象 接口设计 描 述 体系结构设计 状态变迁图 控制规约 数 据 设 计 设计模型 分析模型
结构化设计 的四个层次 面向对象设计 的四个层次 责任设计 过程设计 消息设计 接口设计 体系结构设计 类及对象设计 数 据 设 计 子 系 统 设 计
OOA方法,把问题当作一组相互作用的实体,并 确定实体间关系。OO设计的“体系结构”更多地关心 对象间的协作,而不是系统构件间的控制流。 判断设计方法的模块化能力的5种标准: • 分解性 • 组装性 • 易理解性 • 连贯性 • 保护性
模块化体系结构导出的设计原则: • 语义模块单元; • 很少的接口; • 小的接口(弱耦合); • 显式的接口; • 信息隐蔽。
流行的几种面向对象设计方法: • Booch方法 • Coad-Yourdon方法 • Rumbaugh方法(简称OMT) (Object Modeling Technology) • Jacobson方法(简称OOSE) • 由Rumbaugh 、 Booch 、 Jacobson 提出的统一建模语言 (Unify Modeing Language简称UML)
目前流行的OOD方法概述 Coad-Yourdon方法 Coad-Yourdon的OOD概述: 强调应用,强调应用的基础设施,强调四 种主要的系统构件的表示: • 问题域构件 • 人机交互构件 • 任务管理构件 • 数据管理构件
目前流行的OOD方法概述 Booch方法在设计的语境内,宏开发包含了体系结 构计划活动:将类似的对象聚集到分离的体系结构 划分中,按抽象层次分层对象,标识相关的场景, 创建设计原型,以及通过应用到使用场景而确认设 计原型。微开发定义了一组“规则”,用于管理操作 和属性的使用及内存管理、错误处理和其他基础设 施功能的领域特定的方针,开发描述规则和方针的 语义的场景,为每个方针创建原型、精化原型以及 评审每个方针使其“广播其体系结构设想”。
目前流行的OOD方法概述 Rumbaugh方法(简称OMT) Rumbaugh的OOD过程概述: • 系统设计:着重于构造一个完全的产品或系统所需的构件的布局。 • 对象设计:强调个体对象的详细布局。
统一的OOD方法 由Rumbaugh 、 Booch 、Jacobson 提出的统一建模语言 (Unify Modeing Language简称UML) UML系统设计的主要目标是表示软件体系结构。UML对象设计着重于对象及其相互交互的描述。UML中的系统设计和对象设计被扩展以考虑待建造系统的用户界面、数据管理的设计以及已被规约的子系统的任务管理的设计。
22.2 系统设计过程 设计步骤: • 将分析模型划分为子系统。 • 标识问题本身的并发性。 • 将子系统分配到处理器和任务。 • 开发用户界面设计。 • 选择实现数据管理的基本策略。 • 标识全局资源及访问它们所需的控制机制。 • 为系统定义合适的控制机制。 • 考虑边界条件应该如何处理。 • 评审并考虑权衡。
22.2.1 划分分析模型 OOD中,划分分析模型以定义类,关系和行为的内聚集合, 这些设计元素被包装为子系统。分层设计方法: • 建立分层的标准; • 确定层的数量; • 命名层并将子系统(和其封装的类)分配到某个层; • 定义每个层的接口; • 精化子系统以建立每个层的类结构; • 定义层间通信的消息模型; • 评审层设计以保证层间的耦合度最小; • 迭代以精化分层设计。
22.2.2 并发性和子系统分配 若类(或子系统)必须异步和同时地作用于事件,则 它们被视为并发的。并发任务通过检查每个对象的状 态图而定义,如果事件和变迁流指明在任意时刻只有 单个对象是活跃的,则建立一个控制线程。即使当一 个对象向另一个对象发送消息,只要第一个对象等待 响应,控制线程就继续,若第一个对象在发送消息后 继续处理,则控制线程分叉。
22.2.3 任务管理构件 1.为什么要有任务管理部分 系统中有许多并发行为时,需要按照 各个行为的协调和通信关系,划分各种任 务(进程),简化并发行为的设计和编码。 根据动态模型分析、定义并发性; 选择软件实现的控制方法。
2.管理并发任务的对象的设计策略 • 确定任务的特征。 • 定义协调者任务和关联的对象。 • 集成协调者和其他任务。
3.怎样设计任务管理部分 任务管理主要包括任务的选择和调整 • 识别事件驱动任务 • 识别时钟驱动任务 • 识别优先任务和关键任务 • 识别协调者 • 审查每个任务 • 定义每个任务
22.2.4 用户界面构件 OOA模型包含的使用场景(use-case)和用户 在其和系统交互时扮演的角色(参与者)的描述 是用户界面设计过程的输入。 一旦参与者及其使用场景被定义,则一个命令层 次被标识。该命令层次定义了主要的系统菜单类 别及主要系统菜单类别内可用的所有子功能。命 令层次被迭代地精化,直至每个use-case可以 通过导航功能层次而被实现。
22.2.5 数据管理构件 数据管理包括两个关注区域:对应用本身关键的数 据的管理;对象存储和检索的基础设施的创建。 数据管理部分提供了数据在数据管理系统中存储和 检索对象的基本结构,它分离了数据管理方案的影 响 (不管该方案是普通文件、关系型数据库、面向 对象数据库或其它方式。)
数据管理设计为分层模式,其思想是分离操纵数数据管理设计为分层模式,其思想是分离操纵数 据结构的低层需求和处理系统属性的高层需求。 数据管理构件的设计包括管理对象所需的属性和操 作的实现,相关的属性被附于问题域中的每个对象。 如何设计数据管理部分 (1)数据存储方法设计 (2)相应服务的设计 为每个需存储其对象的类增加一个 属性和服务
22.2.6 资源管理构件 • 每个资源应该由某“保护者对象”拥有,保护者对象是资源的门卫,控制对资源的访问并缓和对资源的冲突请求。
22.2.7 子系统间通信 一个合约提供了对一个子系统和另一个子系统交互方式的标注。 请求 服务器端子系统 客户端子系统 合约 请求 端 子系统 端 子系统 请求 合约 合约 子系统间协作的模型
刻画存在子系统间的合约的步骤: • 列出可以被子系统的协作者产生的每个请求; • 对每个合约,标注实现该合约隐含的责任所需的操作; • 一次考虑一个合约,创建图1所示表格。 • 如果在子系统间的交互模式是复杂的,则可创建简略子系统协作图。 合约 类型 协作者 类 操作 消息格式 图1 子系统协作表
22.3 对象设计过程 对象的设计描述的形式: • 协议描述:通过定义对象可以接收的每个消息和当对象接收到该消息后完成的相关操作而建立对象的接口,仅仅是一组消息和每个消息的对应注释; • 实现描述:显示被传送给对象的消息所隐含的每个操作的实现细节。包含了对象的名字和类的引用的规约,以及每个操作的过程描述或指向这样的过程描述的指针,指明了数据项和类型的私有数据结构的规约。
设计算法和数据结构 数据结构和算法并发地设计。算法被创建以实现每 个操作的规约。 操作类型有三种: • 以某种方式操纵数据的操作; • 完成计算的操作; • 监控某对象以等待某控制事件出现的操作。
程序构件和接口 软件设计质量的一个重要方面是模块性,即被组合 以形成完整程序的程序构件的规约。面向对象的方 法定义对象为程序构件,它本身又和其他构件连接, 因此,我们还必须标识存在于对象间的接口和对象 的整体结构。程序构件应该在实现该设计的程序设 计语言的语境内表示。
22.4 设计模式 设计模式可通过以下信息来刻画: • 模式的名字 • 模式的意图 • 激发模式动机的“设计压力” • 缓解这些压力的解决方案 • 实现该解决方案所需的类 • 解决方案类中的责任和协作 • 导致有效设计的指导原则 • 源代码例子或源代码模板 • 对相关设计模式的交叉引用 设计模式可应用继承和复合来被使用。复合可导致聚合对象,即复杂的对象可通过选择一组设计模式并复合适当的对象而被组装而成。
面向对象设计(简化的C++类库管理系统) • 设计类库结构 两种可把类条目组织成类库得数据结构: • 二叉树 • 链表: 容易表示多重继承 • 设计问题域子系统—对对象模型做补充和细化 • 类条目(ClassEntry) • 类库(ClassEntryLink) • 父类(ClassBase)、成员函数(ClassFun) 和数据成员(ClassData) • 类条目缓冲区(ClassEntryBuffer)
面向对象设计(简化的C++类库管理系统) • 设计人机交互子系统 • 窗口 • 登录窗口(用户输入账号、确认/放弃) • 主窗口(创建/浏览/存储/退出) • 创建窗口(输入新类名/选择已有类名,三个分组框分别管理父类、成员函数和数据成员,每组框有:添加/编辑/删除) • 选择浏览方式窗口(按类名浏览/按类关系浏览) • 类名浏览窗口 • 类关系浏览窗口 • 重用: 基于VC开发环境,尽可能重用MFC中类 • 设计其它类
22.6 小结 面向对象设计将现实世界的OOA模型转换为可以 用软件实现的实现—特定的模型。OOD过程可以 被描述为有四个层次的金字塔,基础层着重于实 现主要系统功能的子系统的设计;类层刻划了实 现系统所需的整体对象体系结构和类层次;消息 层指明如何实现对象间的协作;责任层标识用以 刻划类特征的属性和操作。