第三部分面向对象的设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

定义:
面向对象的设计(OOD)就在是OOA模型基础上运用 面向对象方法,进行系统设计,目标是产生一个符合 具体实现条件的OOD模型。
6
三、 OOA与OOD的分工 ——两种不同的观点
7.1 什么是面向对象设计
第二种观点的理由:
第二种观点
分 析 设 计
(1)在各种分析/设计方法中 “做什么”和“怎么做”实际上 没有严格的划分”。 (2)过分强调“分析不考虑怎 么做”将使某些必须在OOA考虑 的问题得不到完整的认识。 (3)由于OO方法表示形式的一 致,不存在把细化工作留给设计 人员的必然理由。 (4)避免重复地认识同一事物, 并有利于分析结果的复用。
表示法:采用与OOA一致的表示法
分析 数据流图 (DFD) 设计 OOA OOD
一致的 概念 一致的 表示法
模块结构图 (MSD) 实体-关系图(ERD)
类 图
类 图
传统方法分析与设 计之间的鸿沟
面向对象的分析与设计 之间不存在鸿沟
8
7.2
OOD方法概貌
OOD模型
——从两个侧面来描述
构 件 图
行 为 图
如果是组合,最好用第 1种方式,否则就需要在程序中保证整体对象与部分对象的 生命周期的一致性。 (2)关联 通常,通过在对象中设立指针或对象标识以指向或记录另一端的对象的方法,来实现 关联。如果是单向关联,就在源端的类中设立属性,用来标记另一端的类将来创建的 对象。如果是双向关联,就在两端类中各设立属性,用来标记对方将来创建的对象。 如果关联中对方类的多重性是1,那么可在本方设立一个指向对方对象的指针,或设立 一个记录对方对象引用的属性。 如果对方类的多重性大于1,那么可在本方设立一个指向对方对象的指针集合或引用集 合。 若关联的某端有角色名,最好把其作为另一端类的属性名,以访问与角色名相邻的 类。
OOSD——Object-Oriented Structured Design 面向对象的结构设计
……
3
7.1 什么是面向对象设计
早期OOD的特点:
1、不是基于OOA的 大多基于结构化分析结果(数据流图) 2、是OO编程方法的延伸 多数方法与编程语言有关,特别受Ada影响很大
3、不是纯OO的 对某些OO概念(如继承)缺少支持, 搀杂一些非OO 概念(如数据流和模块等) 4、不是只针对软件生命周期的设计阶段 OOD中的“D”——指的是Design 或 Development 多少涉及分析问题(如识别问题域的对象),但很不彻底
20
(3)按编程语言调整继承
起因:OOA强调如实地反映问题域,OOD考虑实现问题 , 所用语言不支持多继承,甚至不支持继承
多继承模式
狭义菱形
广义菱形
21
把多继承调整为单继承
A
B
A
B
聚合
C C
22
方法1:采用关联
公司人员
公司人员
1
0..2 身份 顾主 职员
顾主身份 顾主职员
职员身份
23
身份
顾主身份
目标:尽可能使复用成分增多,新开发的成分减少
17
(复用) 车辆
例:
可复用的类
序号 厂商 式样 序号认证
问题域中的类
可复用的类
车辆
车辆
序号 厂商 式样 序号认证
序号 颜色 式样 出厂年月
序号认证
18
(2)增加一般类以建立共同协议
增加根类:将所有的具有相似协议的类组织在一 起 提供通用的协议 例:提供创建、删除、复制等服务 增加其他一般类:提供局部通用的协议 例:提供永久存储及恢复功能
项目 人员
任务项
项目名 人员
语言
项目
1 1..*
语言
语言
* 1
……
1 ..*
人员
1..*
32
把 关 联 类 转 化 为 二 元 关 联
公司
公司
雇员
*
1..*
工作
薪水
1
1..*
工作
雇员
*
薪水
1
对关联进行调整后,要考虑关联的实现方式。 (1)聚合
决定在整体类中指出部分类时,是用部分类直接作为整体类中的属性的数据类型, 还是把部分类用作指针或对象标识的基类型,再用这样的指针或对象标示定义整体类 的属性。
2
7.1 什么是面向对象设计
早期的OOD方法
Booch86——Object-Oriented Development 面向对象的开发 GOOD——General Object-Oriented Development 通用面向对象的开发
HOOD——Hierarchical Object-Oriented Design 层次式面向对象的设计
5
7.1 什么是面向对象设计
特点:
1. 以面向对象的分析为基础,一般不依赖结构化分析。
2. 与相应的OOA方法共同构成一种OOA&D方法体系。OOA 和 OOD 采用一致的概念与原则,但属于软件生命周期的 不同阶段,有不同的目标及策略。 3. 较全面地体现面向对象方法的概念与原则。 4. 大多数方法独立于编程语言,通过面向对象的分析 所得到的系统模型可以由不同的编程语言实现。
——早期的OOD可看作现今OOA&D方法的雏形
4
7.1 什么是面向对象设计
二、现今(90年代)的OOD
背景:
从结构化分析文档识别OOD的对象并非良策,识别对象 的关键问题在于用OO方法进行系统分析。
OO方法从设计发展到分析,出现OOA方法。
OOA和OOD构成完整的OOA&D方法体系。 OOD基于OOA, 识别对象由OOA完成, OOD定义对象如何实现。
每个部分均采用与OOA一致的概念、表示法及活动, 但具有自己独特的策略。
13
第8 章
问题域部分的设计
8.1 什么是问题域部分?
对OOA结果按实现条件进行补充与调整就是问题域部分。 •不是传统方法的“转换”,不存在鸿沟。 •主要不是细化,但OOA未完成的细节定义要在OOD完成。 •是对OOA模型的补充与调整 •合并或分开一些类、属性、服务,或调整关系。 按实现条件 (编程语言 ,网络与操 OOA 作系统,复 模型 用支持等) 进行必要的 人 数 调整。 机 据 问题域 交 管 将OOA模型搬到OOD 互 理 部分 作为OOD的基础 部 部 分 分 任务管理部分
——不存在分析与设计之间的鸿沟
3、有不同的侧重点和不同的策略
OOA主要针对问题域,识别有关的对象以及它们之 间的关系,产生一个映射问题域,满足用户需求,独立 于实现的OOA模型。 OOD主要解决与实现有关的问题,基于OOA模型, 针对具体的软、硬件条件(如机器、网络、OS、GUI、 DBMS等)产生一个可实现的OOD模型。
职员身份
0..1 1 公司人员 1
0..1
24
方法2:压平
公司人员
顾主
顾主职员
职员
问题:有什么缺点?
25
公司人员
顾主
顾主职员
职员
顾主信 息
职员信息
26
方法3:取消继承
顾主
顾主职员
职员
问题:有什么缺点?
27
(4)提高性能
•增加属性或类,以保存中间结果 •提高或降低系统的并发度,可能要人为地增加或减少主动对象。 •合并通讯频繁的类
16
(1)为复用设计与编程的类而增加结构
OOA识别和定义的类是本次开发中新定义的,需要进行 编程。 如果已存在一些可复用的类,而且这些类既有分析、设 计时的定义,又有源程序,那么,复用这些类即可提高 开发效率与质量。 可复用的类可能只是与OOA模型中的类相似,而不是完 全相同,因此需对二者进行修改。
4、OOA与OOD可适合不同的生命周期模型
——瀑布模型、螺旋模型、增量模型、喷泉模型
11
7.2
OOD方法概貌
OOD——按实现条件对OOA模型进行调整,并补充几个新的组 成部分(也是由对象构成) 与实现有关的因素:
图形用户界面系统 硬件、操作系统及网络 数据管理系统 其他——编程语言、可复用构件库……
第 一 种 观 点
问题域与 系统责任
与实现有 关的因素
分 做 什 析 么 设 怎 么 计 做
关键问题:对象的特征细节(如属 性的数据类型和服务流程图),是 在分析时定义还是在设计时定义?
7
7.2 OOD方法概貌
概念:运用与OOA部分相同的概念 —
—除实现模型外,没有增加新概念。 对象、类、属性、服务(操作)、封 装、继承、消息、关联、聚合、多 态、主动对象 等 使分析 与设计 之间不 存在鸿 沟
OOA与OOD的关系:
1、从OOA到OOD不是转换;
——是调整和增补 将OOA模型搬到OOD; 进行必要的调整, 作为OOD模型的问题域 部分;
OOA 模型
构件部署 人 机 交 互 部 分
增补其它四个部分,成 为完整的OOD模型。
问题域 部分
任务管理部分
数 据 口 部 分
10
7.2
OOD方法概貌
2、采用一致的概念和表示法
29
(6)为编程方便增加底层成分
——细化对象的分类
例:将几何图形分成 多边形、椭圆、扇形 等特殊类
几何图形
多边形
椭圆
扇形
30
(7) 决定关系的实现方式
把多对多关联转 化为一对多关联
供货商 1..* பைடு நூலகம்户
0..*
供货商 1
客户
1
供需合同 卖方 买方 …….
0..*
1..*
31
把多元关联转化为二元关联
15
8.3 如何进行问题域部分的设计?
•继续运用OOA的方法 ——概念、表示法及一部分策略 •使用OOA结果,并加以修改 ——需求的变化,新发现的错误 •使用OOA结果,并进行补充与调整(本节的重点) (1)为复用设计与编程的类而增加结构 (2)增加一般类以建立共同协议 (3)按编程语言调整继承 (4)提高性能 (5)为数据存储管理增补属性与服务 (6)为编程方便增加底层成分 (7 )决定关系的实现方式 (8)对例外的处理 (9)编程语言限制了可用的属性类型 (10)构造或优化算法 (11)决定对象间的可访问性
第三部分
面向对象的设计
第7 章
面向对象的设计(OOD)概述
7.1 什么是面向对象设计
概而言之,面向对象的设计(OOD)就是运用面向对象方法进行系统设 计;但不同时期有不同内容及特点。
一、早期的OOD(八十年代至九十年代初):
历史:从OOP发展到OOD
G. Booch 1982 年发表“Object-Oriented Design” , 首次称“面向对象的设计”。 1986 年发表“Object-Oriented Development” 较完整地阐述了OOD思想。 两个术语都用OOD作为缩写,内容上也没有根本区别 R. J. Abbott 1983年提出正文分析方法,用规范的英语描述对一个问 题的解释,然后从描述中提取对象及其特征。例:名词——对象,动词 ——操作。被后来的许多OOD方法所采用。 1986年后,相继出现了一批(早期的)OOD方法
19
对相似的操作的处理
1.若有些操作比其他操作具有更少的参数,要加入所没有的参数,但 在这些操作的方法中忽略新加入的参数。
缺点:对消息规约,有些麻烦。 (慎用)
2.若在不同的类中的操作具有相同的语义含义,但方法不同,就为这 样的操作选择一个名字,并应用多态机制。
3.若在一个类中不需要父类中定义的操作,就在该类中把它声明为一 个无操作的方法。 (慎用)
流速调节器 指定流速 ……
流速探测器 当前流速 ……
流速控制器 指定流速 当前流速 …… 流速调节 流速探测 ……
流速调节 ……
流速探测 取当前流速 ……
合并前
合并后
28
•为类增加与实现有关的底层操作

显示 * 1 背景 1 1 前景
显示
显示
(5)为数据存储管理增补属性与操作
在数据管理部分设计中介绍
14
8.2 为什么需要问题域部分的设计?
•在OOA阶段只考虑问题域和系统责任,OOD则要考虑与具 体实现有关的问题,需要对OOA结果的补充与调整;
•使反映问题域本质的总体框架和组织结构长期稳定,而 细节可变;
•稳定部分与可变部分分开,使系统从容地适应变化; •有利于同一个分析用于不同的设计与实现; •支持系统族和相似系统的分析设计及编程结果复用; •使一个成功的系统具有超出其生存期的可扩展性。
按实现条件调整 OOA模型 新增的组成部分,隔 离实现条件
基本思想:
尽可能隔离实现 条件对系统的影 响——提供独立 的接口 对不可隔离的因 素,按实现条件 调整OOA模型
实 现 条 件 实现条件
实 现 条 件
12
7.2
OOD方法概貌
OOD过程: 逐个设计OOD模型的五个部分 问题域部分的设计 人机交互部分的设计 控制流管理部分的设计 数据管理部分的设计 构件部署设计 不强调次序



类 图

署 图
构件及部署
从另一侧面观察 OOD模型每个部分 如何用OO概念表达 ——采用OOA的概念及 模型组织方式
包 人
详 细 说
机 图 交 互 部 分
问题域 部分
任务管理部分
数 据 管 理 部 分

从一个侧面观察 OOD模型包括几个主要部分 ——一个核心部分加几个外围部分
9
7.2
OOD方法概貌
相关文档
最新文档