§ 3.4 分析建摸方法
结构化分析 (传统建模方法 )
面向对象分析计算机世界现实世界影射计算机世界现实世界 结构化开发方法结构化分析结构化设计结构化编程
OOA
OOD
OOP
面向对象开发方法
§ 3.4.2 面向对象分析方法思考题
软件开发中为什么要使用面向对象方法?
面向对象分析方法与结构化分析方法有哪些相似之处?有何区别?
面向对象方法是对过去的一个完全突破,还是,换汤不换药,?
对象 ( object)
现实世界中某个具体的物理实体或概念在计算机逻辑中的映射和体现。
对象具有的含义:
在现实世界中:
是客观世界中的一个实体
在面向对象程序中:
表达成计算机可理解、可操纵、具有一定 属性 和 行为 的对象
在计算机世界中:
是一个可标识的存储区域面向对象方法是一种运用对象、
类、继承、封装、聚合、消息传递、
多态性等概念来构造系统的 软件开发方法 。
面向对象 =对象 + 类 + 继承 + 消息通信面向对象的主要特征:
封闭性 (Encapsulation)
继承性 (Inheritance)
多态性 (Polymorphism)
类( class)
具有共同属性和行为的对象的抽象
类与对象的关系
–类是对象的抽象
–对象是类的实例类对象对象、实体与类对象 实体类 抽象数据类计算机世界 现实世界计算机逻辑的实现影射抽象实例化抽象概念世界封装封装是软件开发方法的重要原则,有两个涵义:
把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位
(对象)。
尽可能隐蔽对象的内部细节
(信息隐蔽)
传统方法数据与过程是分离的过程 1输入输出 过程 2
过程 3
数据实体属于该对象的数据对象处理数据的方法消息消息对象把数据和处理数据的方法封状成一个单元传统方法和面向对象方法的比较传统方法系统是过程的集合过程与数据实体交互过程接受输入并产生输出面向对象方法系统是交互对象的集合对象与人或其它对象交互对象发送与响应消息继承 (继承性 inheritance)
继承性是父类和子类之间共享数据和方法的机制
继承性具有传递性
继承性包括单继承和多重继承 子类继承部分增加部分父类共性部分继承性作用
使软件系统具有开放性
更好地进行抽象与分类
增强代码的重用率多态(多态性 polymorphism)
不同的对象收到同一消息可产生完全不同的结果,这一现象叫做 多态
多态的效果?
用户发送一个通用的消息,而实现的细节则由接收对象自行决定多态性的作用
增强了操作的透明性,可理解性和可扩展性
增强了软件的灵活性和重用性消息 (message)
消息? 对象之间相互请求或相互协作的途径,是要求某个对象执行某个功能操作的规格说明
消息内容? 通常包含接收方及请求接收方完成的功能信息
发送方? 发出消息,请求接收方响应
接收方? 收到消息后,经过解释,激活方法,予以响应为什么对面向对象方法感兴趣?
面向对象方法的主要优点:?
自然性追求软件系统对现实系统的直接模拟,
尽量实现将现实世界中的事物直接映射到软件系统的解空间中。
软件复用可复用性(可重用性) reusebility
可扩展性
可管理 性可复用性(可重用性)
面向对象技术允许复用的不仅仅是代码,通过面向对象技术,我们可以复用需求、分析、设计、测试计划、用户界面以及体系结构等等,事实上,软件工程生存期中的每个部分都可以复用 。
传统系统分析,面向功能,把系统看成一组功能
OOA,把问题当作一组相互作用的实体,并确定实体间关系面向对象技术是一个有全新概念的开发模式,其特点是,
(1)方法是对软件开发过程所有阶段进行综合考虑而得到的 ;
(2)从生存期的一个阶段到下一个阶段所使用的方法与技术具有高度的连续性 ;
(3)将 OOA,OOD,OOP集成到生存期的相应阶段,
开发方法的组合分析 设计 编程结构化 结构化 面向对象结构化 面向对象 面向对象面向对象 结构化 第三代或第四代语言面向对象 面向对象 第三代或第四代语言面向对象 面向对象 传统编程与面向对象的混合面向对象 面向对象 面向对象
OO方法的开发过程
OO方法改进了在生存期各个阶段间的界面,因为生存期各个阶段开发出来的,部件,都是 类,在面向对象生存期的各个阶段对各个 类 的信息进行细化,类 成为分析,设计和实现的 基本单元 。
类的生存期模型类的规格说明从废弃型开发 既存类的复用 渐增式的实现渐增式的测试求精和维护测试用例和测试的开发实现从既存类演变类的设计与实现
类的规格说明指导对存放现存类的软件库进行查找?
现存类提供当前应用所需功能
三种可能利用现存类的方向,
现存类的复用
从现存类进行演变
从废弃类进行开发对象之间的联系与对象模型面向对象方法开发软件通常建立的三种形式的模型
描述系统数据结构的 对象模型
描述系统控制结构的 动态模型
描述系统功能的 功能模型三种模型从三个不同但由密切相关的角度模拟目标系统。
对象模型 是最重要、最基本、最核心的。
对象模型对象模型表示静态的、结构的系统数据的性质。
对模拟客观世界实体的对象以及对象彼此之间的关系的映射,描述了系统的静态结构。
OO方法强调围绕对象而不是功能来构造系统 。
类及对象间常见的联系
分类关系
(归纳关系、一般与特殊的关系)
组成关系
(组合关系、整体 /部分的关系)
对象属性之间的静态的联系
对象行为的动态联系分类关系 (一般与特殊的关系 )示例学生本科生 研究生组成关系 (整体与部分的关系 )示例学科部 办公室学院实验室对象模型中表现上述联系的结构和连接
(1)分类结构(一般 /特殊结构)
分类是对象抽象的基础分类结构表现的是事物的一般与特殊的关系,即,is-a”关系。
面向对象术语中常把一般与特殊的关系称为 泛化( Generalization)
与 特化( Specialization) 联系存户一般 /特殊结构举例一般类
(父类、基类、超类 )
特殊类
(子类、具体类 )
继承一个特殊类中的所有对象可继承一般类中的属性,服务,关系.
账号姓名余额存款取款支票存户 储蓄存户利息率
(2) 组装结构(整体 /部分结构)
组装结构表示对象类之间的组成关系,即整体与部分的关系。
整体对于部分是,has-a”关系。
(部分对于整体是,a-part-of”关系 )
组装结构体现了面向对象方法的聚合(也叫聚集 Aggregation) 原则。
整体 /部分结构表示法举例微机
1+
电源主机箱 键盘监视器 鼠标内存CPU 硬盘
o?
(3)实例连接 (Instance Connection)
实例连接表现了对象之间的静态联系,通过对象的属性来表现对象之间的依赖关系。
面向对象术语中把对象之间的实例连接称为 链接 (Link),把类之间的实例连接称为 关联 (Association)
实例连接 示例 及表示教师 指导论文
0,m 1
学生教师为学生指导论文:
教师 教学
0,m 0,n
学生教师为学生授课:
关联关系 (链属性 )的表示允许实例连接带有一组属性,这些属性通过关联来描述类 1 连接名称
m n
类 1
连接属性关联关系
(链属性 )
为之工作工资职务雇主雇员个人名字身份证号公司名字地址题目答辩时间成绩教师 学生指导论文
0,m 1
(4)消息连接 (Message Connection)
对象之间的 通信 联系。
一需要另一个对象的服务,便向它发出个对象请求服务的消息,接收消息的对象响应消息,触发所要求的服务操作。
消息连接体现了对象行为的 动态联系 。
一家公司的对象模型 ( OMT) 示例为之工作管理 0,1
姓名身份证号码地址员工 名字电话号码主要产品地址公司职务 雇用解雇项目名预算优先级项目产品名成本重量产品工人 经理 部门部门名主持参加
1+1+
1+ 1+
1+
生产网上商店对象模型 (部分 )示例 (UML)
销售代表 0,,1
定货 name
address
顾客
creditRating( ):String
产品雇员
1
dataReceived
isPrepaid
number:String
price:Money
协作顾客
contactName
creditRating
creditLimit
creditCard#
个人顾客
{creditRating( )
==“poor”}
定货作业线
dispatch( )
close( )
remind( )
billForMonth( )
Quantity:Integer
price:Money
isSatisfied:Boolean
1
*
*
*
* 1
物品面向对象的方法论方法论是如何对复杂系统进行,抽象,的工作,以及如何建立抽象模型。
二,面向对象分析建模 (OOA)
面向对象分析方法确实不同于结构化分析方法吗?
Fichman,R.G and C.F.Kemerer,
在,Object-oriented Conventional Analysis
and Design Methodologies” 中阐述:
我们的结论是面向对象分析方法表现了相对面向过程的方法学(如结构化分析)的根本性变化,而且相对面向数据的方法学仅仅是增量性的变化。面向过程的方法学在建模过程中的关注点不是对象的内在性质,从而导致了和面向对象的三个基本原理相正交的问题域模型。
面向对象分析方法使得软件工程师能够通过对象、属性和操作(作为主要的建模成分)的表示来对问题建模。
建立分析模型 5个基本原则:
( 1) 建模信息域;
( 2) 描述模块功能;
( 3) 表示模型行为;
( 4) 分解以模型显示更多细节;
( 5)早期 模型表示问题的本质,而后期模型提供实现细节。
OOA的意图 是定义所有和被求解的问题相关的类
(及同类关联的关系和行为),为了达到这个目标,必须完成以下任务:
( 1)必须在客户和软件工程师之间沟通了解基本的用户需求;
( 2)必须标识类 (定义属性和方法 );
( 3)必须刻划类层次;
( 4)表示对象对象关系(对象连接);
( 5)必须建模对象行为;
( 6)任务 (1)到 (5)递进地反复使用,直至完成建模流行的几种面向对象方法,
Booch方法
Coad-Yourdon方法
Rumbaugh 方法 (简称 OMT)
( Object Modeling Technology)
Jacobson 方法 ( 简称 OOSE)
由 Rumbaugh,Booch,Jacobson
提出的统一建模语言
(Unify Modeing Language简称 UML)
目前流行的 OOA方法概述
Coad-Yourdon方法
Coad-Yourdon的 OOA过程概述:
使用,寻找什么,标准来标识对象
定义一般 /特殊结构
定义整体 /部分结构
标识主题(子系统构件的表示)
定义属性
定义服务目前流行的 OOA方法概述
Booch方法
Booch的 OOA宏观开发过程概述:
标识类和对象
标识类和对象的语义
标识类和对象间的关系
进行精化目前流行的 OOA方法概述
Rumbaugh方法 ( 简称 OMT)
Rumbaugh的 OOA过程概述:
开发对问题的范围陈述
建造对象模型
开发动态模型
构造系统的功能模型不同面向对象分析方法的相似步骤:
( 1)使用基本需求作为指南选择 类和对象;
( 2) 为对象标识属性和操作;
( 3)定义组织 类的结构和层次;
( 4) 建造对象 -关系模型的;
( 5)建造 对象 -行为模型。
统一的 OOA方法由 Rumbaugh,Booch,Jacobson
提出的统一建模语言
(Unify Modeing Language简称 UML)
UML是一种定义良好,易于表达,
功能强大且普遍实用的建模语言。
UML的开发历程
Booch’91其它方法 OMT-1 OOSE
Booch’93 OMT-2
UML 0.8
UML 0.9&0.91
UML 1.0
UML 1.1
UML同行专家意见
OMG认证
10/95
10/96 & 9/96
OMG审核,1/97
OMG修正,9/97
OMG采用,11/97
UML 1.3
对象模型技术
(OMT,Object Model Tech.)
对象模型 动态模型 功能模型基本模型,
三个模型分别从不同角度分析系统分析模型?
对象模型,描述静态结构,定义做事情的实体
功能模型,描述处理 (数据变换 ),
指明系统应“做什么”
动态模型,描述交互过程,规定什么时候做
OMT模型系统分析和设计过程概观图产生需求结构及对象设计建立模型问题描述对象模型、动态模型、功能模型详细的对象模型详细的动态模型详细的功能模型分析阶段设计阶段实例:饮料自动售货机系统设置一个饮料自动售货机可以放置五种不同或部分相同的饮料,可由厂商根据销售状况自动调配,并可随时重新设置售价,但售货机最多仅能放置 50罐饮料,其按钮设计在各种饮料样本的下方,若经金额计算器累计金额足够,则选择键灯会亮;若某一种饮料已销售完毕,则售完灯会亮。
销售顾客将硬币投入售货机,经累加金额足额的饮料选择键灯亮,等顾客按键选择。顾客按键后饮料由取物楼掉出,并自动结算及找钱。
取消交易顾客可在按下选择键前任何一个时刻,拉动退币杆取消交易收回硬币。
步骤,
(1)找出对象及其关联
(2)赋予类及关联的属性数据
(3)组织类的结构
OMT的 对象图找出饮料自动售货机系统中的对象设置一个饮料自动售货机可以放置五种不同或部分相同的饮料,可由厂商根据销售状况自动调配,并可随时重新设置售价,但售货机最多仅能放置 50罐饮料,其按钮设计在各种饮料样本的下方,若经 金额计算器 累计金额足够,则选择键灯会亮;若某一种饮料已销售完毕,则售完灯会亮。
销售顾客 将硬币投入 售货机,经累加金额足额的饮料 选择键 灯亮,等顾客按键选择。顾客按键后饮料由取物楼掉出,并自动结算及找钱。
取消交易顾客可在按下选择键前任何一个时刻,拉动 退币杆 取消交易收回硬币。
对象模型描述系统内部对象结构,包括对象本身的定义、对象的属性、操作,以及对象与其它对象之间的关系。
对象模型是 OMT方法论中最重要的部分,动态模型、功能模型都将依次而建立对象模型以对象图形式呈现,对象图由类构成。
饮料自动售货机 系统 对象图贩卖机饮料号码价格投币 -接受饮料掉出金额显示按纽退币杆售完显示存量计算器饮料号码存量递减售完显示重置选择钮选择钮状态灯亮灯熄售完灯亮按钮顾客姓名硬币投币 -置入拿取饮料退币杆退币杆状态拉动金额计算器金额累加找零重置购买选取被拉动属于属于属于属于建立数据字典为所有模型实体准备一个数据字典,精确描述每一个对象类,
包括,
成员
约束
关联、属性、操作动态模型用来描述系统与时间相关的动态行为即系统的控制逻辑,表现对象彼此间经过相互作用后,随时间改变的不同运算顺序。
动态模型以,事件,( Events)和
,状态,( States)为其模型的主要概念。
动态模型以状态图形式呈现,
事件,? 瞬时发生的行为;
引起对象状态转换的控制信息 。
事件类和属性举例:
飞机起飞(航线、航班号、城市)
按动鼠标按钮(按钮、位置)
……,.
脚本和事件踪迹脚本是系统某一次特定运行时期内发生的事件序列。 ( 脚本也叫场景)
事件追踪图侧重说明发生于系统执行过程中的一个特 定,场景 (scenarios)”。
通话脚本(只包括影响电话线的事件)
17,打电话者挂断电话
16,电话切断
15,接电话者挂断电话
14,通电话
12,接电话者电话停止振铃
13,铃声在打电话者电话中消失
11,接电话者回答
10,铃声在打电话者电话传出
9,接电话者的电话开始振铃
8,打电话者拨数字 (3)
7,打电话者拨数字 (7)
6,打电话者拨数字 (3)
5,打电话者拨数字 (2)
4,电话忙音结束
3,打电话者拨数字 (8)
2,电话忙音开始
1,打电话者拿起听筒
状态,对象属性和对象关联的抽象形式状态的特征表示方法举例:
状态,闹铃响描述,闹铃响表示预定时间到产生本状态的事件序列:
设置闹钟(预定时间)
不包括清除闹铃的任何后续操作当前时间 =预定时间表征本状态的条件:
闹铃 =开,从预定时间起没有按键的情况下,
目标时间?当前时间?目标时间 =20秒本状态接受的各种时间:
事件 动作 下一个状态当前时间 =目标时间 +20 重新设置闹钟 正常按下按钮(任意按钮) 重新设置闹钟 正常动态模型表示方法
状态图状态和事件的网络,侧重描述每一类对象的动态行为。
状态图例:
状态 1
Do:活动 1 状态 2.…...
事件 1[条件 1] / 动作 1 结束事件初始事件空闲 可视菜单左边按钮按下 /显示弹出菜单左边按钮弹起 /擦除弹出菜单光标移动 /高亮菜单项弹出菜单动作举例,饮料自动售货机 系统 的状态图投入硬币
(有效的)
按下选择饮料键
Do:显示售货机在备用所有灯都关闭
Do:显示金额总数
Do:显示金额已够饮料选择灯亮取出饮料结算找零扣减存量完成交易饮料“售完”灯亮投入硬币金额
(1元,5元,10元 )
金额不足再投币存量为零无效的硬币取消取消回到备用状态回到备用状态事件追踪图举例,打电话的事件追踪图挂断电话电话切断挂断电话通 话 通 话停止振铃停止振铃响应电话电话振铃铃 声拨 号 (3)
拨 号 (7
拨 号 (3)
拨 号 (2)
电话忙音结束拨 号 (8)
电话忙音开始拿起听筒电话线 接电话者打电话者存量为零找零扣减存量灯亮余额饮料结算选择键 #
选择按纽灯亮金额总够显示总额总额累加投入硬币金额计算器 存量计算器顾客 售货机 选择键举例,饮料自动售货机 系统 的事件追踪图售完灯
3,功能模型用来描述系统中数据的变换。
传统 DFD + 控制流对象 A 对象 B过程 1 过程 2
数据存储区控制流数据流基于三个模型的分析步骤
需求陈述
对象建模
动态建模
功能建模
添加 操作反复建模
OMT支持整个软件生命周期,
需求分析、系统设计、系统实现、
测试与维护。
1,分析阶段理解应用问题,建立 对象模型、动态模型和功能模型,说明对象关联、控制流及数据变换。
2,系统设计阶段确定 系统框架,考虑并发任务、通讯机制和数据存储策略。
3,对象设计阶段从实现的角度 细化 分析对象模型、
动态模型和功能模型
OMT方法的特点:
开发重点在分析阶段
强调数据结构而不是功能
形式化描述能力强
开发步骤的衔接良好
重复性的开发过程
Yourdon的 OOA方法以类与对象图及对象状态图为辅助工具,建立问题域的五层模型,
OOA模型被划分为五个层次
(五个视图 )
OOA的结构 类的边界
Class &object layer
(类及对象层 )
Attribute layer
(属性层 )
Service layer
(服务层 )
Structure layer
(结构层 )
Subject layer
(主题层 )
实例的边界实例连接消息连接主题服务属性分析阶段由五个活动组成:
(1) 标识类及对象
(2) 标识结构
(3) 标识主题
(4) 定义属性及实例连接
(5) 定义服务及消息连接五个步骤常根据需要交叉进行步骤 1,识别类与对象
(1)发现对象主要策略,
考虑问题域?
人员?
组织?
物品?
设备?
事件?
表格结构
考虑系统边界?
人员?
设备?
外系统
考虑系统责任
问题域描述中的 名词,往往是候选的及对象 ;根据问题域结构可提取候选的类及对象 ;
例,银行储蓄管理系统
与系统发生作用的 其它系统 和必要的 设备 可作为候选的类及对象 ;
如,打印机等
(分析阶段可不把与实现有关的计算机部件作为候选的类及对象 )
系统必须观测,记忆 的与时间有关的事件 可作为候选的类及对象 ;
如:建立帐户的日期打开一个帐户等
与系统发生交互的 人 及系统必须保留其信息的人,可作为候选的类及对象 ;
如:柜员、储户等
这些人所属的 组织 单位,可作为候选的类及对象 ;
如:总行、分行等
系统必须记忆、且不在问题域约束中的顺序 操作过程 (为了指导人机交互 )
可作为候选的类及对象 ;
如:柜员事务、远程事务等。
其中属性是操作过程名,操作特权及操作步骤的描述 ;
系统需了解掌握的物理位置、办公地点 等可作为候选的类及对象 ;
如,ATM机器、帐户等
(2)审查和筛选,
舍弃无用的类
对象的精简?
只有一个属性的对象?
只有一个服务的对象
推迟到 OOD考虑的对象帐册
@上级系统接口供货员销售事件商品特价商品计量商品
@收款机商品一览表超市销售管理系 统
(对象层 )
步骤 2,定义属性与服务
定义属性
定义服务对象的状态与状态转换图例:栈的状态 /服务对照表空 半满 满压入 可执行 可执行 不可执行弹出 不可执行 可执行 可执行例:栈状态转换图空半满满创建压入 (未满 )
弹出 (未空 )
压入
(报错 )
弹出 (报错 )
弹出 (已空 )压入弹出压入 (已满 )
定义服务对象行为分类发现服务的策略审查与调整识别对象的主动行为服务的详细说明 (服务解释、消息协议、
消息发送、约束条件、服务流程图 )
帐册前班节余销售事件表收入累计上交款本班节余接班计帐报帐交班
@上级系统接口帐目目册
@消息发送查帐报帐价格更新种类增删供货员缺货登记表缺货登记供货销售事件收款人购物清单应收款……
销售计划入帐商品编号名称单价架上数量下限售出补充价格更新特价商品开始日期结束日期计量商品
*单价计量单位计价方式*售出
*补充
*价格更新
@收款机本班收款员开始时间结束时间
@登录售货结帐商品一览表商品目录检索种类增删超市销售管理系 统
(特征层 )
建立数据字典为所有模型实体准备一个数据字典,
精确描述每一个对象类,包括,
成员
约束
关联、属性、操作对象字典举例:
类名 父类 提供的服务 需要的服务帐户 …… …… ……
ATM …… …… ……
银行 …… …… ……
出纳员 …… …… ……
…… …… …… ……
步骤 3,定义结构与连接
初步确定关联
对应于描述性动词或动词短语
需求陈述中隐含
根据问题域知识得出
筛选
完善
分析标识对象之间的关系
对象之间的分类关系:一般 -特殊结构
对象之间的组成关系:整体 -部分结构
对象之间的静态联系:实例连接
对象之间的动态关系:消息连接从一般类发现特殊类 公司职员股东姓名身分证号码
……
股份
……
职员工资
……
公司职员姓名身分证号码股份工资
……
…… …… ……
……
??
从特殊类发现一般类 公司职员股东姓名身分证号码
……
股份
……
职员工资
……
…… ……
……
股东姓名身分证号码股份
…………
职员姓名身分证号码工资
…………
?
收款机
A
B
C
现钞收款机
D
E
F
现钞收款机
A
B
C
D
E
F
X
Y
Z Z
X
Y
为支持复用建立结构收款机类成为可供本领域其它系统复用的领域构件取消没有特殊属性的特殊类大学生 研究生研究方向指导教师
……
学生姓名学号班级
……
……
研究生研究方向指导教师
……
学生姓名学号班级
……
……
通过增加属性简化一般 -特殊结构人员……
……
男人
……
……
女人
……
……
……
……
美国人
……
……
日本人
……
……
人员性别国籍……
……
中国人两种结构的变通冷藏车
……
……
汽车
……
……
制冷设备
……
……
冷藏车
……
……
汽车
……
……
制冷设备
……
……
仅用一般
-特殊结构两种结构同 用冷藏车
……
……
汽车
……
……
制冷设备
……
……
仅用整体
-部分结构用整体 -部分结构实现复用车床
……
……
机床 ……
……
刨床
……
……
起重机 ……
……
电动机 …
………
钻床
……
……
送料车 ……
……
筛选,删除下列关联
已删去的类间的关联
无关或实现关联
瞬时事件
三元关联
派生关联中央计算机总行通信银行代码
ATM
拥有分行计算机出纳工作站远程业务 现金卡分行 帐户 储户出纳员出纳业务
通信授权存取拥有拥有持有组成拥有拥有雇佣进入被进入修改修改进入
ATM系统的初始对象图步骤 4,定义服务及消息连接分析和认识对象之间在行为上的往来关系。
顺序系统中的消息传递主动对象 A
a 被动对象 Bb
被动对象 C
c
被动对象 D
d1 d2
运行开始运行结束服务执行消息发送控制点返回示意并发系统中的消息传递主动对象 A 主动对象 B
被动对象 D
任务 Task1
线程 Ta
控制线程之间的消息连接控制点返回示意被动对象 C 被动对象 E
控制线程内部的消息连接任务 Task2
线程 Tb
多个控制线程之间的消息与顺序系统中消息的不同之处
(1)并发执行的控制线程之间传送的 消息的不同用途:
向 接收者发出访问请求
向接收者提交数据
向接收者发布通知或事件信息
向接收者传递同步控制信号
(2)消息的同步与异步
(3)接收者对消息的不同响应方式
(4)发送者对消息处理结果的不同期待方式
(5)消息的接收者是否唯一
定向消息
广播消息
OOA对消息的表示 —消息连接消息连接是 OOA(或 OOD) 模型中对对象之间行为依赖关系的表示识别和表示的主要问题,?
对象之间是否存在消息?
消息是同一线程内部的还是不同线程之间的?
每一种消息是从发送者哪个服务发出的?
由接收者哪个服务响应处理的?
消息是同步还是异步?
发送者 是否等待消息的处理结果?
如何建立消息连接
(1)建立控制线程内部的消息连接基本策略:,服务模拟,
,执行路线追踪,
具体做法:
人为地模拟当前服务的执行,通过考虑需要请求其它对象的服务来发现新消息。
分析该消息的发送者与接收者在执行时是否属于同一控制线程
(2)建立控制线程之间的消息连接对每个控制线程考虑:?
它在执行时是否需要请求其它控制线程中的对象为它提供服务?由哪个对象发出?由哪个对象中的服务处理?
它在执行时是否要向其它控制线程中的对象提供或索取数据?
它在执行时是否将产生对其它控制线程的执行有影响的事件?
各个控制线程的并发执行是否要传递同步控制信号
一个控制线程在何种条件下中止执行?
中止后在何种条件下由其它控制线程用何法唤醒?
(3)对象分布问题及对消息的影响
每台处理机上分布的一组对象中至少应有一个主动对象;
同一台处理机上的对象之间的消息通信既可能是一个控制线程内部的,也可能是不同控制线程之间的。
帐册前班节余销售事件表收入累计上交款本班节余接班计帐报帐交班
@上级系统接口帐目目册
@消息发送查帐报帐价格更新种类增删供货员缺货登记表缺货登记供货销售事件收款人购物清单应收款
……
销售计划入帐商品编号名称单价架上数量下限售出补充价格更新特价商品开始日期结束日期计量商品
*单价计量单位计价方式
*售出*补充
*价格更新
1 m
商品一览表商品目录检索种类增删
1m
(关系层,完整的类图 )
@收款机本班收款员开始时间结束时间
@登录售货结帐步骤 4,标识主题 (主体 )
Coad/Yourdon方法中主题的概念:
主题是把一组具有较强联系的类组织在一起而得到的类的集合。
主题概念及其用途?
主题层是在 OOA基本模型 (类图 )之上建立一个能帮助人们从不同的认识层次来理解系统的补充模型;
主题一种比类和对象抽象层次更高、粒度更大的概念,用以建立系统的高层抽象视图;
主题有助于指导系统设计者或用户等理解一个大的系统模型,有助于组织一个大项目的工作。
主题概念的特点?
是由一组类构成的集合?
一个主题内部的对象类应具有某种意义上的内在联系
描述系统中相对独立的组成部分(如一个子系统)
描述系统中某一方面的事物(如人员、
设备)
解决 系统中某一方面的问题(如输入输出)?
主题的划分有一定的灵活性和随意性主题的表示法三种表示方式,压缩方式半展开方式全展开方式编号 主题名压缩方式编号 主题名半展开方式:
类名类名
……
类名主题名主题名
…… 下层主题主题的表示法全展开方式:
编号 编号编号编号类图上原有的全部内容如何划分主题
把每个结构作为一个主题;
(选取结构中最上层的类作为一主题 )
通过实例连接互相联系的类可划分到一个主题;
把不属于任何结构,也没有实例连接的类作为一个主题。
如何精练主题从 问题域 和 接口复杂性 两方面入手,
使用问题域精练主题,即用整体 /部分结构对问题域进行划分,而不是按功能分解方法划分,
按高内聚低偶合原则,通过使主题间依赖性和交互性最小原则保留能反映子问题域的主题,
主题 数目 >7个左右,则进一步精练主题,
何时引入主题依赖于模型自身复杂性
小系统,不需引入主题 ;
中等系统,先标识类及对象,
然后引入主题 ;
大系统,先标识主题,对问题域进行划分,分给不同的任务组 ;
主题层次的控制
中小型系统可只设一层主题,最多不超过两层;
大型系统可只设两层主题,最多不超过三层。
中央计算机总行通信银行代码
ATM
拥有分行计算机出纳工作站远程业务 现金卡分行 帐户 储户出纳员出纳业务
通信授权存取拥有拥有持有组成拥有拥有雇佣进入被进入修改修改进入把 ATM系统划分为三个主题
2 31 1
1 1
2
2 2
3
33
3
帐册前班节余销售事件表收入累计上交款本班节余接班计帐报帐交班
@上级系统接口帐目目册
@消息发送查帐报帐价格更新种类增删供货员缺货登记表缺货登记供货销售事件收款人购物清单应收款
……
销售计划入帐商品编号名称单价架上数量下限售出补充价格更新特价商品开始日期结束日期计量商品
*单价计量单位计价方式
*售出*补充
*价格更新
1 m
商品一览表商品目录检索种类增删
1m
(关系层,完整的类图 )
@收款机本班收款员开始时间结束时间
@登录售货结帐
1
1 1
1
33
33
2
2
2
2
范例:移动电话系统移动电话系统的功能:
用手机做移动通讯
下载铃声
下载图案
管理电话簿移动电话系统的使用用例图
Talk to Others
Download Icons
Manage Phonebook
Download RingsMobile user Mobile Network
定义移动电话系统的对象(简化)
手机包括的对象:
手机屏幕
手机按钮
手机(屏幕、按钮以外的部件)
其它对象:
基站
MButton
MDisplqy
MmobileStation
MmobileHandset
移动电话系统的类图移动电话系统对象间的通信
MButton MDisplqy
:MMobileStation
:
MMobileHandset
Mobile user
1:pushDigButton()
3:pushSendButton() 2:displayButtonNumber()
4:connectStation() 7:displayConnectSuccess()
6:connectSuccess ()5:createConnection()
移动电话系统的协作图移动电话系统的顺序图
:MButton,MDisplqy,MMobileHandset
Mobile user
pushSendButton()
displayButtonNumber()
displayConnectSuccess() connectSuccess ()
createConnection()
pushDigButton()
connectStation()
:
MMobileStation
MButton
MDisplqy
MmobileStation
MmobileHandset
移动电话系统的类图之二
pushDigButton()
pushSendButton()
pushDisconnectButton()
createConnection()
destoryConnection ()
responseError()
displayError()
displayButtonNumber()
displayConnectSuccess()
displayIncomingCall()
connectStation()
disconnectStation()
connectSuccess ()
Diaconnectsuccess()
结构化分析 (传统建模方法 )
面向对象分析计算机世界现实世界影射计算机世界现实世界 结构化开发方法结构化分析结构化设计结构化编程
OOA
OOD
OOP
面向对象开发方法
§ 3.4.2 面向对象分析方法思考题
软件开发中为什么要使用面向对象方法?
面向对象分析方法与结构化分析方法有哪些相似之处?有何区别?
面向对象方法是对过去的一个完全突破,还是,换汤不换药,?
对象 ( object)
现实世界中某个具体的物理实体或概念在计算机逻辑中的映射和体现。
对象具有的含义:
在现实世界中:
是客观世界中的一个实体
在面向对象程序中:
表达成计算机可理解、可操纵、具有一定 属性 和 行为 的对象
在计算机世界中:
是一个可标识的存储区域面向对象方法是一种运用对象、
类、继承、封装、聚合、消息传递、
多态性等概念来构造系统的 软件开发方法 。
面向对象 =对象 + 类 + 继承 + 消息通信面向对象的主要特征:
封闭性 (Encapsulation)
继承性 (Inheritance)
多态性 (Polymorphism)
类( class)
具有共同属性和行为的对象的抽象
类与对象的关系
–类是对象的抽象
–对象是类的实例类对象对象、实体与类对象 实体类 抽象数据类计算机世界 现实世界计算机逻辑的实现影射抽象实例化抽象概念世界封装封装是软件开发方法的重要原则,有两个涵义:
把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位
(对象)。
尽可能隐蔽对象的内部细节
(信息隐蔽)
传统方法数据与过程是分离的过程 1输入输出 过程 2
过程 3
数据实体属于该对象的数据对象处理数据的方法消息消息对象把数据和处理数据的方法封状成一个单元传统方法和面向对象方法的比较传统方法系统是过程的集合过程与数据实体交互过程接受输入并产生输出面向对象方法系统是交互对象的集合对象与人或其它对象交互对象发送与响应消息继承 (继承性 inheritance)
继承性是父类和子类之间共享数据和方法的机制
继承性具有传递性
继承性包括单继承和多重继承 子类继承部分增加部分父类共性部分继承性作用
使软件系统具有开放性
更好地进行抽象与分类
增强代码的重用率多态(多态性 polymorphism)
不同的对象收到同一消息可产生完全不同的结果,这一现象叫做 多态
多态的效果?
用户发送一个通用的消息,而实现的细节则由接收对象自行决定多态性的作用
增强了操作的透明性,可理解性和可扩展性
增强了软件的灵活性和重用性消息 (message)
消息? 对象之间相互请求或相互协作的途径,是要求某个对象执行某个功能操作的规格说明
消息内容? 通常包含接收方及请求接收方完成的功能信息
发送方? 发出消息,请求接收方响应
接收方? 收到消息后,经过解释,激活方法,予以响应为什么对面向对象方法感兴趣?
面向对象方法的主要优点:?
自然性追求软件系统对现实系统的直接模拟,
尽量实现将现实世界中的事物直接映射到软件系统的解空间中。
软件复用可复用性(可重用性) reusebility
可扩展性
可管理 性可复用性(可重用性)
面向对象技术允许复用的不仅仅是代码,通过面向对象技术,我们可以复用需求、分析、设计、测试计划、用户界面以及体系结构等等,事实上,软件工程生存期中的每个部分都可以复用 。
传统系统分析,面向功能,把系统看成一组功能
OOA,把问题当作一组相互作用的实体,并确定实体间关系面向对象技术是一个有全新概念的开发模式,其特点是,
(1)方法是对软件开发过程所有阶段进行综合考虑而得到的 ;
(2)从生存期的一个阶段到下一个阶段所使用的方法与技术具有高度的连续性 ;
(3)将 OOA,OOD,OOP集成到生存期的相应阶段,
开发方法的组合分析 设计 编程结构化 结构化 面向对象结构化 面向对象 面向对象面向对象 结构化 第三代或第四代语言面向对象 面向对象 第三代或第四代语言面向对象 面向对象 传统编程与面向对象的混合面向对象 面向对象 面向对象
OO方法的开发过程
OO方法改进了在生存期各个阶段间的界面,因为生存期各个阶段开发出来的,部件,都是 类,在面向对象生存期的各个阶段对各个 类 的信息进行细化,类 成为分析,设计和实现的 基本单元 。
类的生存期模型类的规格说明从废弃型开发 既存类的复用 渐增式的实现渐增式的测试求精和维护测试用例和测试的开发实现从既存类演变类的设计与实现
类的规格说明指导对存放现存类的软件库进行查找?
现存类提供当前应用所需功能
三种可能利用现存类的方向,
现存类的复用
从现存类进行演变
从废弃类进行开发对象之间的联系与对象模型面向对象方法开发软件通常建立的三种形式的模型
描述系统数据结构的 对象模型
描述系统控制结构的 动态模型
描述系统功能的 功能模型三种模型从三个不同但由密切相关的角度模拟目标系统。
对象模型 是最重要、最基本、最核心的。
对象模型对象模型表示静态的、结构的系统数据的性质。
对模拟客观世界实体的对象以及对象彼此之间的关系的映射,描述了系统的静态结构。
OO方法强调围绕对象而不是功能来构造系统 。
类及对象间常见的联系
分类关系
(归纳关系、一般与特殊的关系)
组成关系
(组合关系、整体 /部分的关系)
对象属性之间的静态的联系
对象行为的动态联系分类关系 (一般与特殊的关系 )示例学生本科生 研究生组成关系 (整体与部分的关系 )示例学科部 办公室学院实验室对象模型中表现上述联系的结构和连接
(1)分类结构(一般 /特殊结构)
分类是对象抽象的基础分类结构表现的是事物的一般与特殊的关系,即,is-a”关系。
面向对象术语中常把一般与特殊的关系称为 泛化( Generalization)
与 特化( Specialization) 联系存户一般 /特殊结构举例一般类
(父类、基类、超类 )
特殊类
(子类、具体类 )
继承一个特殊类中的所有对象可继承一般类中的属性,服务,关系.
账号姓名余额存款取款支票存户 储蓄存户利息率
(2) 组装结构(整体 /部分结构)
组装结构表示对象类之间的组成关系,即整体与部分的关系。
整体对于部分是,has-a”关系。
(部分对于整体是,a-part-of”关系 )
组装结构体现了面向对象方法的聚合(也叫聚集 Aggregation) 原则。
整体 /部分结构表示法举例微机
1+
电源主机箱 键盘监视器 鼠标内存CPU 硬盘
o?
(3)实例连接 (Instance Connection)
实例连接表现了对象之间的静态联系,通过对象的属性来表现对象之间的依赖关系。
面向对象术语中把对象之间的实例连接称为 链接 (Link),把类之间的实例连接称为 关联 (Association)
实例连接 示例 及表示教师 指导论文
0,m 1
学生教师为学生指导论文:
教师 教学
0,m 0,n
学生教师为学生授课:
关联关系 (链属性 )的表示允许实例连接带有一组属性,这些属性通过关联来描述类 1 连接名称
m n
类 1
连接属性关联关系
(链属性 )
为之工作工资职务雇主雇员个人名字身份证号公司名字地址题目答辩时间成绩教师 学生指导论文
0,m 1
(4)消息连接 (Message Connection)
对象之间的 通信 联系。
一需要另一个对象的服务,便向它发出个对象请求服务的消息,接收消息的对象响应消息,触发所要求的服务操作。
消息连接体现了对象行为的 动态联系 。
一家公司的对象模型 ( OMT) 示例为之工作管理 0,1
姓名身份证号码地址员工 名字电话号码主要产品地址公司职务 雇用解雇项目名预算优先级项目产品名成本重量产品工人 经理 部门部门名主持参加
1+1+
1+ 1+
1+
生产网上商店对象模型 (部分 )示例 (UML)
销售代表 0,,1
定货 name
address
顾客
creditRating( ):String
产品雇员
1
dataReceived
isPrepaid
number:String
price:Money
协作顾客
contactName
creditRating
creditLimit
creditCard#
个人顾客
{creditRating( )
==“poor”}
定货作业线
dispatch( )
close( )
remind( )
billForMonth( )
Quantity:Integer
price:Money
isSatisfied:Boolean
1
*
*
*
* 1
物品面向对象的方法论方法论是如何对复杂系统进行,抽象,的工作,以及如何建立抽象模型。
二,面向对象分析建模 (OOA)
面向对象分析方法确实不同于结构化分析方法吗?
Fichman,R.G and C.F.Kemerer,
在,Object-oriented Conventional Analysis
and Design Methodologies” 中阐述:
我们的结论是面向对象分析方法表现了相对面向过程的方法学(如结构化分析)的根本性变化,而且相对面向数据的方法学仅仅是增量性的变化。面向过程的方法学在建模过程中的关注点不是对象的内在性质,从而导致了和面向对象的三个基本原理相正交的问题域模型。
面向对象分析方法使得软件工程师能够通过对象、属性和操作(作为主要的建模成分)的表示来对问题建模。
建立分析模型 5个基本原则:
( 1) 建模信息域;
( 2) 描述模块功能;
( 3) 表示模型行为;
( 4) 分解以模型显示更多细节;
( 5)早期 模型表示问题的本质,而后期模型提供实现细节。
OOA的意图 是定义所有和被求解的问题相关的类
(及同类关联的关系和行为),为了达到这个目标,必须完成以下任务:
( 1)必须在客户和软件工程师之间沟通了解基本的用户需求;
( 2)必须标识类 (定义属性和方法 );
( 3)必须刻划类层次;
( 4)表示对象对象关系(对象连接);
( 5)必须建模对象行为;
( 6)任务 (1)到 (5)递进地反复使用,直至完成建模流行的几种面向对象方法,
Booch方法
Coad-Yourdon方法
Rumbaugh 方法 (简称 OMT)
( Object Modeling Technology)
Jacobson 方法 ( 简称 OOSE)
由 Rumbaugh,Booch,Jacobson
提出的统一建模语言
(Unify Modeing Language简称 UML)
目前流行的 OOA方法概述
Coad-Yourdon方法
Coad-Yourdon的 OOA过程概述:
使用,寻找什么,标准来标识对象
定义一般 /特殊结构
定义整体 /部分结构
标识主题(子系统构件的表示)
定义属性
定义服务目前流行的 OOA方法概述
Booch方法
Booch的 OOA宏观开发过程概述:
标识类和对象
标识类和对象的语义
标识类和对象间的关系
进行精化目前流行的 OOA方法概述
Rumbaugh方法 ( 简称 OMT)
Rumbaugh的 OOA过程概述:
开发对问题的范围陈述
建造对象模型
开发动态模型
构造系统的功能模型不同面向对象分析方法的相似步骤:
( 1)使用基本需求作为指南选择 类和对象;
( 2) 为对象标识属性和操作;
( 3)定义组织 类的结构和层次;
( 4) 建造对象 -关系模型的;
( 5)建造 对象 -行为模型。
统一的 OOA方法由 Rumbaugh,Booch,Jacobson
提出的统一建模语言
(Unify Modeing Language简称 UML)
UML是一种定义良好,易于表达,
功能强大且普遍实用的建模语言。
UML的开发历程
Booch’91其它方法 OMT-1 OOSE
Booch’93 OMT-2
UML 0.8
UML 0.9&0.91
UML 1.0
UML 1.1
UML同行专家意见
OMG认证
10/95
10/96 & 9/96
OMG审核,1/97
OMG修正,9/97
OMG采用,11/97
UML 1.3
对象模型技术
(OMT,Object Model Tech.)
对象模型 动态模型 功能模型基本模型,
三个模型分别从不同角度分析系统分析模型?
对象模型,描述静态结构,定义做事情的实体
功能模型,描述处理 (数据变换 ),
指明系统应“做什么”
动态模型,描述交互过程,规定什么时候做
OMT模型系统分析和设计过程概观图产生需求结构及对象设计建立模型问题描述对象模型、动态模型、功能模型详细的对象模型详细的动态模型详细的功能模型分析阶段设计阶段实例:饮料自动售货机系统设置一个饮料自动售货机可以放置五种不同或部分相同的饮料,可由厂商根据销售状况自动调配,并可随时重新设置售价,但售货机最多仅能放置 50罐饮料,其按钮设计在各种饮料样本的下方,若经金额计算器累计金额足够,则选择键灯会亮;若某一种饮料已销售完毕,则售完灯会亮。
销售顾客将硬币投入售货机,经累加金额足额的饮料选择键灯亮,等顾客按键选择。顾客按键后饮料由取物楼掉出,并自动结算及找钱。
取消交易顾客可在按下选择键前任何一个时刻,拉动退币杆取消交易收回硬币。
步骤,
(1)找出对象及其关联
(2)赋予类及关联的属性数据
(3)组织类的结构
OMT的 对象图找出饮料自动售货机系统中的对象设置一个饮料自动售货机可以放置五种不同或部分相同的饮料,可由厂商根据销售状况自动调配,并可随时重新设置售价,但售货机最多仅能放置 50罐饮料,其按钮设计在各种饮料样本的下方,若经 金额计算器 累计金额足够,则选择键灯会亮;若某一种饮料已销售完毕,则售完灯会亮。
销售顾客 将硬币投入 售货机,经累加金额足额的饮料 选择键 灯亮,等顾客按键选择。顾客按键后饮料由取物楼掉出,并自动结算及找钱。
取消交易顾客可在按下选择键前任何一个时刻,拉动 退币杆 取消交易收回硬币。
对象模型描述系统内部对象结构,包括对象本身的定义、对象的属性、操作,以及对象与其它对象之间的关系。
对象模型是 OMT方法论中最重要的部分,动态模型、功能模型都将依次而建立对象模型以对象图形式呈现,对象图由类构成。
饮料自动售货机 系统 对象图贩卖机饮料号码价格投币 -接受饮料掉出金额显示按纽退币杆售完显示存量计算器饮料号码存量递减售完显示重置选择钮选择钮状态灯亮灯熄售完灯亮按钮顾客姓名硬币投币 -置入拿取饮料退币杆退币杆状态拉动金额计算器金额累加找零重置购买选取被拉动属于属于属于属于建立数据字典为所有模型实体准备一个数据字典,精确描述每一个对象类,
包括,
成员
约束
关联、属性、操作动态模型用来描述系统与时间相关的动态行为即系统的控制逻辑,表现对象彼此间经过相互作用后,随时间改变的不同运算顺序。
动态模型以,事件,( Events)和
,状态,( States)为其模型的主要概念。
动态模型以状态图形式呈现,
事件,? 瞬时发生的行为;
引起对象状态转换的控制信息 。
事件类和属性举例:
飞机起飞(航线、航班号、城市)
按动鼠标按钮(按钮、位置)
……,.
脚本和事件踪迹脚本是系统某一次特定运行时期内发生的事件序列。 ( 脚本也叫场景)
事件追踪图侧重说明发生于系统执行过程中的一个特 定,场景 (scenarios)”。
通话脚本(只包括影响电话线的事件)
17,打电话者挂断电话
16,电话切断
15,接电话者挂断电话
14,通电话
12,接电话者电话停止振铃
13,铃声在打电话者电话中消失
11,接电话者回答
10,铃声在打电话者电话传出
9,接电话者的电话开始振铃
8,打电话者拨数字 (3)
7,打电话者拨数字 (7)
6,打电话者拨数字 (3)
5,打电话者拨数字 (2)
4,电话忙音结束
3,打电话者拨数字 (8)
2,电话忙音开始
1,打电话者拿起听筒
状态,对象属性和对象关联的抽象形式状态的特征表示方法举例:
状态,闹铃响描述,闹铃响表示预定时间到产生本状态的事件序列:
设置闹钟(预定时间)
不包括清除闹铃的任何后续操作当前时间 =预定时间表征本状态的条件:
闹铃 =开,从预定时间起没有按键的情况下,
目标时间?当前时间?目标时间 =20秒本状态接受的各种时间:
事件 动作 下一个状态当前时间 =目标时间 +20 重新设置闹钟 正常按下按钮(任意按钮) 重新设置闹钟 正常动态模型表示方法
状态图状态和事件的网络,侧重描述每一类对象的动态行为。
状态图例:
状态 1
Do:活动 1 状态 2.…...
事件 1[条件 1] / 动作 1 结束事件初始事件空闲 可视菜单左边按钮按下 /显示弹出菜单左边按钮弹起 /擦除弹出菜单光标移动 /高亮菜单项弹出菜单动作举例,饮料自动售货机 系统 的状态图投入硬币
(有效的)
按下选择饮料键
Do:显示售货机在备用所有灯都关闭
Do:显示金额总数
Do:显示金额已够饮料选择灯亮取出饮料结算找零扣减存量完成交易饮料“售完”灯亮投入硬币金额
(1元,5元,10元 )
金额不足再投币存量为零无效的硬币取消取消回到备用状态回到备用状态事件追踪图举例,打电话的事件追踪图挂断电话电话切断挂断电话通 话 通 话停止振铃停止振铃响应电话电话振铃铃 声拨 号 (3)
拨 号 (7
拨 号 (3)
拨 号 (2)
电话忙音结束拨 号 (8)
电话忙音开始拿起听筒电话线 接电话者打电话者存量为零找零扣减存量灯亮余额饮料结算选择键 #
选择按纽灯亮金额总够显示总额总额累加投入硬币金额计算器 存量计算器顾客 售货机 选择键举例,饮料自动售货机 系统 的事件追踪图售完灯
3,功能模型用来描述系统中数据的变换。
传统 DFD + 控制流对象 A 对象 B过程 1 过程 2
数据存储区控制流数据流基于三个模型的分析步骤
需求陈述
对象建模
动态建模
功能建模
添加 操作反复建模
OMT支持整个软件生命周期,
需求分析、系统设计、系统实现、
测试与维护。
1,分析阶段理解应用问题,建立 对象模型、动态模型和功能模型,说明对象关联、控制流及数据变换。
2,系统设计阶段确定 系统框架,考虑并发任务、通讯机制和数据存储策略。
3,对象设计阶段从实现的角度 细化 分析对象模型、
动态模型和功能模型
OMT方法的特点:
开发重点在分析阶段
强调数据结构而不是功能
形式化描述能力强
开发步骤的衔接良好
重复性的开发过程
Yourdon的 OOA方法以类与对象图及对象状态图为辅助工具,建立问题域的五层模型,
OOA模型被划分为五个层次
(五个视图 )
OOA的结构 类的边界
Class &object layer
(类及对象层 )
Attribute layer
(属性层 )
Service layer
(服务层 )
Structure layer
(结构层 )
Subject layer
(主题层 )
实例的边界实例连接消息连接主题服务属性分析阶段由五个活动组成:
(1) 标识类及对象
(2) 标识结构
(3) 标识主题
(4) 定义属性及实例连接
(5) 定义服务及消息连接五个步骤常根据需要交叉进行步骤 1,识别类与对象
(1)发现对象主要策略,
考虑问题域?
人员?
组织?
物品?
设备?
事件?
表格结构
考虑系统边界?
人员?
设备?
外系统
考虑系统责任
问题域描述中的 名词,往往是候选的及对象 ;根据问题域结构可提取候选的类及对象 ;
例,银行储蓄管理系统
与系统发生作用的 其它系统 和必要的 设备 可作为候选的类及对象 ;
如,打印机等
(分析阶段可不把与实现有关的计算机部件作为候选的类及对象 )
系统必须观测,记忆 的与时间有关的事件 可作为候选的类及对象 ;
如:建立帐户的日期打开一个帐户等
与系统发生交互的 人 及系统必须保留其信息的人,可作为候选的类及对象 ;
如:柜员、储户等
这些人所属的 组织 单位,可作为候选的类及对象 ;
如:总行、分行等
系统必须记忆、且不在问题域约束中的顺序 操作过程 (为了指导人机交互 )
可作为候选的类及对象 ;
如:柜员事务、远程事务等。
其中属性是操作过程名,操作特权及操作步骤的描述 ;
系统需了解掌握的物理位置、办公地点 等可作为候选的类及对象 ;
如,ATM机器、帐户等
(2)审查和筛选,
舍弃无用的类
对象的精简?
只有一个属性的对象?
只有一个服务的对象
推迟到 OOD考虑的对象帐册
@上级系统接口供货员销售事件商品特价商品计量商品
@收款机商品一览表超市销售管理系 统
(对象层 )
步骤 2,定义属性与服务
定义属性
定义服务对象的状态与状态转换图例:栈的状态 /服务对照表空 半满 满压入 可执行 可执行 不可执行弹出 不可执行 可执行 可执行例:栈状态转换图空半满满创建压入 (未满 )
弹出 (未空 )
压入
(报错 )
弹出 (报错 )
弹出 (已空 )压入弹出压入 (已满 )
定义服务对象行为分类发现服务的策略审查与调整识别对象的主动行为服务的详细说明 (服务解释、消息协议、
消息发送、约束条件、服务流程图 )
帐册前班节余销售事件表收入累计上交款本班节余接班计帐报帐交班
@上级系统接口帐目目册
@消息发送查帐报帐价格更新种类增删供货员缺货登记表缺货登记供货销售事件收款人购物清单应收款……
销售计划入帐商品编号名称单价架上数量下限售出补充价格更新特价商品开始日期结束日期计量商品
*单价计量单位计价方式*售出
*补充
*价格更新
@收款机本班收款员开始时间结束时间
@登录售货结帐商品一览表商品目录检索种类增删超市销售管理系 统
(特征层 )
建立数据字典为所有模型实体准备一个数据字典,
精确描述每一个对象类,包括,
成员
约束
关联、属性、操作对象字典举例:
类名 父类 提供的服务 需要的服务帐户 …… …… ……
ATM …… …… ……
银行 …… …… ……
出纳员 …… …… ……
…… …… …… ……
步骤 3,定义结构与连接
初步确定关联
对应于描述性动词或动词短语
需求陈述中隐含
根据问题域知识得出
筛选
完善
分析标识对象之间的关系
对象之间的分类关系:一般 -特殊结构
对象之间的组成关系:整体 -部分结构
对象之间的静态联系:实例连接
对象之间的动态关系:消息连接从一般类发现特殊类 公司职员股东姓名身分证号码
……
股份
……
职员工资
……
公司职员姓名身分证号码股份工资
……
…… …… ……
……
??
从特殊类发现一般类 公司职员股东姓名身分证号码
……
股份
……
职员工资
……
…… ……
……
股东姓名身分证号码股份
…………
职员姓名身分证号码工资
…………
?
收款机
A
B
C
现钞收款机
D
E
F
现钞收款机
A
B
C
D
E
F
X
Y
Z Z
X
Y
为支持复用建立结构收款机类成为可供本领域其它系统复用的领域构件取消没有特殊属性的特殊类大学生 研究生研究方向指导教师
……
学生姓名学号班级
……
……
研究生研究方向指导教师
……
学生姓名学号班级
……
……
通过增加属性简化一般 -特殊结构人员……
……
男人
……
……
女人
……
……
……
……
美国人
……
……
日本人
……
……
人员性别国籍……
……
中国人两种结构的变通冷藏车
……
……
汽车
……
……
制冷设备
……
……
冷藏车
……
……
汽车
……
……
制冷设备
……
……
仅用一般
-特殊结构两种结构同 用冷藏车
……
……
汽车
……
……
制冷设备
……
……
仅用整体
-部分结构用整体 -部分结构实现复用车床
……
……
机床 ……
……
刨床
……
……
起重机 ……
……
电动机 …
………
钻床
……
……
送料车 ……
……
筛选,删除下列关联
已删去的类间的关联
无关或实现关联
瞬时事件
三元关联
派生关联中央计算机总行通信银行代码
ATM
拥有分行计算机出纳工作站远程业务 现金卡分行 帐户 储户出纳员出纳业务
通信授权存取拥有拥有持有组成拥有拥有雇佣进入被进入修改修改进入
ATM系统的初始对象图步骤 4,定义服务及消息连接分析和认识对象之间在行为上的往来关系。
顺序系统中的消息传递主动对象 A
a 被动对象 Bb
被动对象 C
c
被动对象 D
d1 d2
运行开始运行结束服务执行消息发送控制点返回示意并发系统中的消息传递主动对象 A 主动对象 B
被动对象 D
任务 Task1
线程 Ta
控制线程之间的消息连接控制点返回示意被动对象 C 被动对象 E
控制线程内部的消息连接任务 Task2
线程 Tb
多个控制线程之间的消息与顺序系统中消息的不同之处
(1)并发执行的控制线程之间传送的 消息的不同用途:
向 接收者发出访问请求
向接收者提交数据
向接收者发布通知或事件信息
向接收者传递同步控制信号
(2)消息的同步与异步
(3)接收者对消息的不同响应方式
(4)发送者对消息处理结果的不同期待方式
(5)消息的接收者是否唯一
定向消息
广播消息
OOA对消息的表示 —消息连接消息连接是 OOA(或 OOD) 模型中对对象之间行为依赖关系的表示识别和表示的主要问题,?
对象之间是否存在消息?
消息是同一线程内部的还是不同线程之间的?
每一种消息是从发送者哪个服务发出的?
由接收者哪个服务响应处理的?
消息是同步还是异步?
发送者 是否等待消息的处理结果?
如何建立消息连接
(1)建立控制线程内部的消息连接基本策略:,服务模拟,
,执行路线追踪,
具体做法:
人为地模拟当前服务的执行,通过考虑需要请求其它对象的服务来发现新消息。
分析该消息的发送者与接收者在执行时是否属于同一控制线程
(2)建立控制线程之间的消息连接对每个控制线程考虑:?
它在执行时是否需要请求其它控制线程中的对象为它提供服务?由哪个对象发出?由哪个对象中的服务处理?
它在执行时是否要向其它控制线程中的对象提供或索取数据?
它在执行时是否将产生对其它控制线程的执行有影响的事件?
各个控制线程的并发执行是否要传递同步控制信号
一个控制线程在何种条件下中止执行?
中止后在何种条件下由其它控制线程用何法唤醒?
(3)对象分布问题及对消息的影响
每台处理机上分布的一组对象中至少应有一个主动对象;
同一台处理机上的对象之间的消息通信既可能是一个控制线程内部的,也可能是不同控制线程之间的。
帐册前班节余销售事件表收入累计上交款本班节余接班计帐报帐交班
@上级系统接口帐目目册
@消息发送查帐报帐价格更新种类增删供货员缺货登记表缺货登记供货销售事件收款人购物清单应收款
……
销售计划入帐商品编号名称单价架上数量下限售出补充价格更新特价商品开始日期结束日期计量商品
*单价计量单位计价方式
*售出*补充
*价格更新
1 m
商品一览表商品目录检索种类增删
1m
(关系层,完整的类图 )
@收款机本班收款员开始时间结束时间
@登录售货结帐步骤 4,标识主题 (主体 )
Coad/Yourdon方法中主题的概念:
主题是把一组具有较强联系的类组织在一起而得到的类的集合。
主题概念及其用途?
主题层是在 OOA基本模型 (类图 )之上建立一个能帮助人们从不同的认识层次来理解系统的补充模型;
主题一种比类和对象抽象层次更高、粒度更大的概念,用以建立系统的高层抽象视图;
主题有助于指导系统设计者或用户等理解一个大的系统模型,有助于组织一个大项目的工作。
主题概念的特点?
是由一组类构成的集合?
一个主题内部的对象类应具有某种意义上的内在联系
描述系统中相对独立的组成部分(如一个子系统)
描述系统中某一方面的事物(如人员、
设备)
解决 系统中某一方面的问题(如输入输出)?
主题的划分有一定的灵活性和随意性主题的表示法三种表示方式,压缩方式半展开方式全展开方式编号 主题名压缩方式编号 主题名半展开方式:
类名类名
……
类名主题名主题名
…… 下层主题主题的表示法全展开方式:
编号 编号编号编号类图上原有的全部内容如何划分主题
把每个结构作为一个主题;
(选取结构中最上层的类作为一主题 )
通过实例连接互相联系的类可划分到一个主题;
把不属于任何结构,也没有实例连接的类作为一个主题。
如何精练主题从 问题域 和 接口复杂性 两方面入手,
使用问题域精练主题,即用整体 /部分结构对问题域进行划分,而不是按功能分解方法划分,
按高内聚低偶合原则,通过使主题间依赖性和交互性最小原则保留能反映子问题域的主题,
主题 数目 >7个左右,则进一步精练主题,
何时引入主题依赖于模型自身复杂性
小系统,不需引入主题 ;
中等系统,先标识类及对象,
然后引入主题 ;
大系统,先标识主题,对问题域进行划分,分给不同的任务组 ;
主题层次的控制
中小型系统可只设一层主题,最多不超过两层;
大型系统可只设两层主题,最多不超过三层。
中央计算机总行通信银行代码
ATM
拥有分行计算机出纳工作站远程业务 现金卡分行 帐户 储户出纳员出纳业务
通信授权存取拥有拥有持有组成拥有拥有雇佣进入被进入修改修改进入把 ATM系统划分为三个主题
2 31 1
1 1
2
2 2
3
33
3
帐册前班节余销售事件表收入累计上交款本班节余接班计帐报帐交班
@上级系统接口帐目目册
@消息发送查帐报帐价格更新种类增删供货员缺货登记表缺货登记供货销售事件收款人购物清单应收款
……
销售计划入帐商品编号名称单价架上数量下限售出补充价格更新特价商品开始日期结束日期计量商品
*单价计量单位计价方式
*售出*补充
*价格更新
1 m
商品一览表商品目录检索种类增删
1m
(关系层,完整的类图 )
@收款机本班收款员开始时间结束时间
@登录售货结帐
1
1 1
1
33
33
2
2
2
2
范例:移动电话系统移动电话系统的功能:
用手机做移动通讯
下载铃声
下载图案
管理电话簿移动电话系统的使用用例图
Talk to Others
Download Icons
Manage Phonebook
Download RingsMobile user Mobile Network
定义移动电话系统的对象(简化)
手机包括的对象:
手机屏幕
手机按钮
手机(屏幕、按钮以外的部件)
其它对象:
基站
MButton
MDisplqy
MmobileStation
MmobileHandset
移动电话系统的类图移动电话系统对象间的通信
MButton MDisplqy
:MMobileStation
:
MMobileHandset
Mobile user
1:pushDigButton()
3:pushSendButton() 2:displayButtonNumber()
4:connectStation() 7:displayConnectSuccess()
6:connectSuccess ()5:createConnection()
移动电话系统的协作图移动电话系统的顺序图
:MButton,MDisplqy,MMobileHandset
Mobile user
pushSendButton()
displayButtonNumber()
displayConnectSuccess() connectSuccess ()
createConnection()
pushDigButton()
connectStation()
:
MMobileStation
MButton
MDisplqy
MmobileStation
MmobileHandset
移动电话系统的类图之二
pushDigButton()
pushSendButton()
pushDisconnectButton()
createConnection()
destoryConnection ()
responseError()
displayError()
displayButtonNumber()
displayConnectSuccess()
displayIncomingCall()
connectStation()
disconnectStation()
connectSuccess ()
Diaconnectsuccess()