当前位置:
文档之家› 软件工程--面向对象设计与UML
软件工程--面向对象设计与UML
优点:高效; 缺点:修改影响面广
12
§4. 系 统 分 解
② 垂直块组织: 将系统垂直分解成若干独立的子系统,一个子 系统相当于一块,每块提供一种类型的服务。
典型应用系统的组织结构
应 用 软 件 包
人机对 话控制
窗口图形 HCI 图形 屏幕图形 处理 象素图形
仿真 软件包
操 作 系 统 计 算 机 硬 件
38
封包
年个
编辑器 控制器 图组件
见、、 、图组件见、源自 、图形核心窗口系统
基本图形 核心 窗口核心
基本图形 微软窗口
39
活动图:磁盘
40
构件分布图
41
构件图的组合
42
配置图:主机与外围设备
43
应用生存期
系统 描述
论域 分析
客户输入
应用 分析
高层 设计
维护
组装 测试
21
UML
任何方法都应由建模语言和建模过程两部分构成。 建模语言提供了用于表示设计的图形符号,建模 过程描述了进行设计时所需遵循的步骤。 UML则统一了面向对象建模的基本概念、术语及 其图形符号,建立了便于交流的通用语言。 在UML中用5种不同的视图来表示一个系统,这些 视图从不同的侧面描述系统。 • 每一个视图由一组图形来定义。
打印机空闲 打印输出文件 打印机忙 输出文件 入队列
35
时序图:打电话
访客 a {b-a<1} b {c-b<10} c {e-d<5} 铃响信号 拿起话筒 蜂鸣音 拨号码 ... d
<10
交换机
远程交换机
访客
路径 e 铃响 拿起话筒 铃响停止信号 铃响停止
36
协同图:打印
37
状态图:电梯
公司
find_skill
1+ 雇用
雇员
1+ 1+ 具有技能
技能
18
§7. 优化
方法1:嵌套查询 —— 遍历雇员2000次,而对每个 雇员遍历技能10次。命中率为1/4000。 方法2:用Hash Table实现技能,使“会讲日语”对 应唯一的技能对象,则命中率上升为1/400。
方法3:增加一个额外的限定关联“精通语言”, 即可立刻查得结果。
§1. OOD准则
2、抽象Abstraction:抽出事物的本质特性, 暂不考虑其 细节,使设计从具体实现方法中超脱。 3、信息隐藏Information hiding = 对象封装 Encapsulation of object 4、耦合Coupling: 交互耦合(interactive coupling):通过传递message发生 要求降低参数个数和参数复杂性
2、设计实现方法 ⑴ 算法设计:要求做到易修改,并且复杂度低(即 效率高) 易理解,易实现。
⑵ 数据结构设计:需要考虑具体的物理结构的选择。 ⑶ 新添用于存放内部处理中间结果的class;引入新 的低层操作,进一步细化。
15
§6. 设计关联
1、单向关联 例:
雇员 1+ 被雇用 公司
由雇员找其所属公司, 则设雇主为其属性, 即一单向指针
11
§4. 系 统 分 解
2、系统组织方案 ① 水平层次组织: 将系统组织成hierarchy,同一层中的objects相 互独立,而上、下层间有 client-server关系。
一个client只能调用其相邻下层的server —— 封闭式(closed) 一个client可调用其下任一层的server —— 开放式(open)
解之。
一般-特殊内聚
6、复用性Reusability
5
§2. 启发式规则
1、设计结果清晰易懂,应做到: ① 用词一致 —— 按习惯用法命名。不同classes中 相似的methods最好取同一名字。 ② 使用已有的protocol。 ③ 尽量减少message模式的数目。 ④ 避免模糊定义。
2、一般-特殊结构的深度应适当(约100个classes,则 设计7±2层)
需求 属性 获得 普通 术语
开发 规划 导出 相关 需求
详述使用 实例
寻找行为者 和使用实例 构造行为者 和使用实例 模型
25
分析与设计方法图
使用实例分析 结构分析
类设计 数据库设计
子系统设计
结构设计
使用实例设计 结构评审
流程描述
分布描述
设计评审
26
UML方法中的基本模型
系统 视图 使用图形 用户 使用实例图, 活动图 模型 结构 类和对象图, 状态图, 时序图, 模型 协同图, 活动图 行为 状态图, 时序图, 协同图, 模型 活动图, 构件图, 配置图 实现 构件图 模型 环境 配置图 模型 适用对象 用户, 设计者, 实现者, 测试者 设计者, 实现者 实现者, 组装者 实现者 实现者, 组装者, 测试者
③ 分析重用 —— 当需求未变,而系统结构改变时
重用效果的衡量: 额外代价: 创建可重用成分的专门投资 多花2 ~ 4倍时间测试以保证质量 构件库的建立与维护需要投资 以上投资将分摊到重用这些构件的新系统成 本中。重用次数越多,分摊成本越少。
9
§4. 系 统 分 解
回顾SD:从DFD出发 OOD模型分解:
公司 雇员
语 1+ 1+ 言 精通语言
19
§7. 优化
建立这样的索引必然多占空间,而且基关联改 变时也必须相应地修改索引。因此,应只给那些经 常执行并且开销大、命中率低的查询建立索引。 ② 调整查询次序,优化算法 例如公司有5名会日语的雇员,有200名会法语 的雇员。现要找日、法语均会的雇员,则应先找 的 会日语 雇员,再从中找 会法语 的雇员。
29
• 类图用于表示类的存在和类与类之间的相互关 系,是从系统构成的角度来描述正在开发的系 统。 • 类的表示 类的名称 属性 属性 :数据类型 属性 :数据类型 = 初值 操作 操作(参数表):结果类型
30
限定关联
关联名称
类1 角色1
限定词
类2 角色2
聚合、导航和个体数目
整体 类名
聚合,单向导航
27
事 务 模 型 分 析
使用实例图 事件流 脚本
相互作用图(时序图,协同图) 对象&类
面 向 对 象 分 析
对象图,类图 类分组 封包图
UML规划 操作分析过程
状态图
构件图 配置图
28
类图
人 持有人 财产 * 借方 * 抵押 本金 利率 到期 债权人 * 金融机构
信贷银行 *{有序}
银行
* 房屋
13
§5. 设计类中的服务 —— 细化object model中的 methods
1、确立服务
⑴ 从 dynamic model出发:
Event Status 1 do: Action 1 Status 2 do: Action 2
……
⑵ 从function model出发:
I
P
O
14
§5. 设计类中的服务
I
P O
Category
问题域
Application Domain
人机交互 任务管理 数据管理
HumanTask Data Computer Management Management Interface (HCI)
Class-&-Object Structure Attribute Method
10
知识 工程
重用软件成分有三个级别: ① 代码重用: • 源码剪贴 —— 无法溯源,无配臵管理 • Include —— 修改后所有包含了此段代码的程 想象一下,stdio.h 被改动之后…… 序都须重新编译。
• Inheritance —— 无须改动原有代码
8
§3. 软件重用
② 设计重用 —— 当移植系统时
雇员 雇主
公司
由公司找其下属某一雇员,则有两种方法:
方法1:遍历所有雇员,找雇主匹配且满足特征的雇 员。(省空间)
16
方法2:设公司 的属 性雇员 为 一指针集。 (快速) 2、双向关联
雇员
公司 雇员
§6. 设计关联
指针集
方法1:将上述两种单向 关联结合使用
雇员 雇主 公司 雇员
方法2:另设关联类(特 别适用于链属性)
公司
关联类
雇主 雇员 工资
指针集
雇员
17
§7. 优 化
1、确定优先级: 必须站在全局高度确定各项质量指标的优先级, 在优化设计时制定折衷方案。切忌各子系统自以为 是,导致最终优化目标对立。 最常见的情况是在效率与清晰性之间的折衷。
2、提高效率的技术
① 增加关联(类) 例:设某公司有2000名雇员,平均每名雇员会 10种技能,其中有5人精通日语,现要查询 公司中会讲日语的雇员是哪些人
6
§2. 启发式规则
3、设计简单的class(定义不超过一页纸或两屏)。 应注意: ① 避免过多attributes; ② 能用简单的语句描述一个class的任务; ③ objects之间合作关系要简单; ④避免过多methods( 7个)。
问题:设计出大量的classes,使结构复杂度增加。 解决:划分主题,提高可理解性。 4、使用简单的protocol,减少message 中传递的
§4. 系 统 分 解
1、子系统之间的交互方式(collaboration) ① 客户-供应商(client-server)关系:
Client subsystem request Server subsystem contract
② 平等伙伴(peer-to-peer)关系: