标签:OO 状态 对象 建模 软件工程 消息 操作 交互 属性
!!!注:文章内容均来自NUAA软件工程SGH老师的课件!!!撰写文章仅用作复习总结和记录
文章目录
1 对象结构模型
OOA:介绍
- OOA:面向对象的分析,运用面向对象方法进行系统分析。
- 是软件生命周期的一个阶段,具有一般分析方法共同具有的内容、目标和策略
- 强调运用面向对象方法进行分析,用面向对象的概念和表示法表达分析结果
- 任务:运用面向对象方法,对问题域和系统责任进行分析和理解,找出描述问题域及系统责任所需的对象,定义对象的属性、操作以及它们之间的关系。
- 目标:建立一个符合问题域、满足用户需求的OOA模型。
- OOA模型:
- OOA过程
- 标识对象:收集资料,对问题域进行描述;从描述中找出对象,定义对象、类
- 标识结构:分类结构;组装结构
- 标识主题:相关对象打包
- 定义属性:标识属性;定位属性;定义实例连接
- 定义操作:标识操作;定义消息连接;操作的说明
1.1 初始类图
1.1.1 概述
类图:描述一组类、接口、协作及其关系;定义静态的对象结构与逻辑设计视图;是面向对象的软件构架的核心。
对象结构模型的粒度分割
* ① 初始级类图:类构架定义(类名+关系+分组机制)
* ② 细化级类图:对象图定义(类名+属性+操作)
* ③ 精化级类图:类构架优化(结构、行为优化;构件分组)
表示法
识别对象与类
-
考虑系统责任
- 对照系统责任所要求的每一项功能,查看是否可以由现有的对象完成这些功能。如果发现某些功能在现有的任何对象中都不能提供,则可启发我们发现问题域中某些遗漏的对象。
-
名词技术:从名词到对象或类通常有一对一的映射。
- 可以启发发现对象的因素包括:人员、组织、物品、设备、事件(如索赔、上访、交易)、表格、日志、报告、结构(汽车上面有车辆,下面有客车和轿车,左右有摩托车;内有发动机,它可作成车队)等。
-
从用例中识别
- (1)用例描述中出现哪些实体?需要哪些实体的合作?
- (2)用例执行过程中会产生并存储哪些信息?
- (3)用例要求与之相关的每个角色的输入是什么?
- (4)用例反馈与之关联的每个角色的输出是什么?
- (5)用例需要操作哪些设备?
审查与筛选
- 舍弃无用的对象
- 通过属性判断:是否通过属性记录了某些有用的信息?
- 通过服务判断:是否通过服务提供了某些有用的功能?
- 二者都不是——无用
- 在应用中,一个对象应该为一些其他的对象提供服务
- 对象的精简:只有一个属性的对象
初始对象表
1.1.2 属性
概念
- 属性是类的一个已命名的性质,它描述该性质的一个实例可以取的值的范围。
- 抽象为属性的性质是与问题高度相关的。
- 从技术观点上,属性是一些变量,包含它的每一个对象实例都具有自己的值。
- 按照OO方法的封装原则,一个对象的属性和操作是紧密结合的,对象的属性只能由这个对象的操作存取。
表示法
属性的识别
- 按常识这个对象应该有哪些属性?
- 在当前的问题域中,对象应该有哪些属性?
- 根据系统责任,这个对象应具有哪些属性?
- 建立这个对象是为了保存和管理哪些信息?
- 对象为了完成其功能,需要增设哪些属性?
- 对象是否需要通过专设的属性区别其状态?
- 用什么属性表示聚合和关联?
- 可利用需求文档中的形容词或所有格短语
1.1.3 操作
概念:
- 操作是描述对象动态特征(行为)的一个操作序列。
- 的具体处理方法的描述放在操作部分,它是类的一个组成部分,只能作用于该类的对象上。
- 有名字和参数表;
- 有可见性和返回类型;
操作分类
- 基本操作
- 检索:分类、选择、查询;
- 更新:插入、删除、修改、计算、汇总
- 关键操作:必须由对象提供的、在算法上复杂的业务操作(如要进行某些计算或监控操作)。
表示法
操作的识别
- 有哪些类会与该类交互?
- 所有与该类具有交互行为的类会发送哪些消息给该类?该类又会发送哪些消息给这些类?
- 该类如何响应别的类发送来的消息?在发送消息之前,该类需要做何处理?
- 从该类本身来说,它应该具有哪些操作来维持其信息的更新、一致性和完整性?
- 系统是否需要该类有另外一些职责?
审查
- 审查对象的每个服务是否真正有用?
- 是否直接提供系统责任所要求的某项功能?
- 响应其它服务的请求间接地完成这种功能的某些局部操作?
- 调整—取消无用的服务
- 是不是高内聚的?
- 一个服务只完成一项单一的、完整的功能。
- 调整—拆分或合并
1.1.4 关系(类及其对象之间的三种关系)
-
泛化(一般 - 特殊)——分类结构、继承机制
-
表示法
-
泛化的识别
- (1)学习当前领域的分类学知识
- (2)按常识考虑事物的分类
- (3)利用泛化的定义
- (4)看两个类的对象之间是否有“是一个”关系。
- (5)考察类的属性与服务(左图)
-
审查
- 问题域是否需要这样的分类?
- 系统责任是否需要这样的分类?
- 是否符合分类学的常识?
-
-
聚合(整体 - 部分)——组合关系、聚合机制
-
概念
- 聚合又称整体—部分结构
- 描述系统中各类对象之间的组成关系,通过它可以看出某个类的对象,以另外一些类的对象作为其组成部分。也可理解为,一个类定义引用另一个类定义。
- 语义:“a part of”或“has a”;
- 区分聚合和组合两种关系
-
表示法;
-
聚合的识别
- (1)物理上的整体事物和它的组成部分;例:机器、设备和它的零部件
- (2)组织机构和它的下级组织及部门;例:公司与子公司、部门
- (3)团体(组织)与成员;例:公司与职员
- (4)一种事物在空间上包容其它事物;例:生产车间与机器
- (5)抽象事物的整体与部分;例:学科与分支学科、法律与法律条款
- (6)具体事物和它的某个抽象方面;例:人员与身份、履历
- (7)在材料上的组成关系;例:面包由面粉、糖和酵母组成,汽车是由钢、塑料和玻璃组成。
-
-
关联(实例连接)——静态联系
-
示意图
-
表示法
-
多对多的化解
-
1.1.5 类图建模过程
-
设计准备
- ① 确定建模目标
- ② 确定建模依据;用例图∕活动图 初始类图
- ③ 准备相关资料
-
标识类与对象
- ① 识别用例图中的对象
- ② 对每个对象进行命名和编号
- ③ 建立初始对象表
- ④ 通过逐次迭代修改初始对象表,最终形成正式对象表
-
定义关系
- ① 识别给定对象间可能存在的联系及其类型
- ② 对每个联系进行命名
- ③ 用继承机制定义分类结构;用聚合机制定义组装结构;标识实例连接
-
定义键
- ① 定义主键和次键
- ② 键的迁移(从父对象到子对象,多属性主键必须一次迁移)
- ③ 确认键和联系,主要检查规则有:
- 禁用多值属性(不重复规则)
- 禁用空值属性(非空规则)
- 复合键对象不能划分成多个单键对象(最小键规则)
-
定义属性
- ① 确定每个对象的全部非键属性
- ② 根据规则检验属性的合理性,并修改和完善数据模型;检验规则:不重复,非空,完全函数依赖,非传递依赖
- ③ 建立对象属性表
-
定义操作
- ① 标识基本操作
- 检索:分类,选择,查询;
- 更新:插入,删除,修改;计算,汇总
- ② 标识关键操作:消息连接
- 寻找一个实例所需的另一实例的操作
- 在已存在实例连接的对象或分类结构之间增加消息连接
- 操作建模策略:
- ① 识别参数、返回值及操作的可见对象
- ② 若操作不太复杂,可直接用源代码表示其实现
- ③ 若操作很复杂,可将其实现表示为协作;并分别用类图和交互图展开协作的结构和行为
- ④ 若操作是方法密集型的,则用活动图对它的实现进行建模
- ① 标识基本操作
初始类图 举例:
1.2 细化类图
-
概念
- 细化类模型与类框架的主框架是一致的。
- 它对对象属性和对象操作作了详细的描述。
- 标识属性的过程包括确定主属性和外来属性以及全部其它属性,根据规则检验属性的合理性,并修改和完善数据模型,建立对象属性表。
- 标识操作的过程包括根据状态图标识基本操作,根据交互图标识关键操作,建立对象操作表。
-
对象属性表
- 主要来自于现实中的信息载体,有些由抽象构造得到。对象属性表最终映射成数据库中数据表格或视图。对于有大量数据项的信息载体,可根据数据间的关系分成几部分,甚至建立多个基表。
- 示意图
-
对象操作表
- 对象操作包括关键操作和基本操作,关键操作主要从交互图中提取,基本操作主要从状态图中提取。
- 示意图
1.3 精化类图
在初始类图的基础上,运用三层体系结构思想对基本类模型进行划分。根据各个对象的具体情况,将对象分成界面、事务和数据层。
设计要点:
- 类分组:单个用例/活动图的对象集/子集
- 类分割:一个基本对象一分为二/一分为三;要与实现策略一致
- 事务类间的关联:三层类图中对象间的关联;按事务型对象进行组织
- 按活动流顺序和逻辑对象类型标识每个对象
举例:
2 对象行为模型
2.1 交互图
2.1.1 交互模型概述
- 行为:对象的交互、状态和活动统称对象的行为可用行为模型表示。
- 行为模型,即动态模型,分为:
- 交互模型:侧重刻画多对象间的交互关系
- 状态模型:侧重刻画单个对象在其生命周期内的状态转移过程
- 交互: 共同完成特定任务的一组对象之间交换消息的行为。
- 交互模型:可用交互图表示,包括顺序图和协作图:
- 顺序图强调时间顺序
- 协作图强调对象间的合作关系
- 顺序图与协作图可相互转换,无信息损失
2.1.2 顺序图基本概念
-
顺序图:一种详细表示对象之间以及对象与系统外部的参与者之间动态联系的图形文档
-
详细而直观地表现了一组相互协作的对象在执行一个用例时的行为依赖关系,以及操作和消息的时序关系
-
消息:
- 对象间进行信息传送的通信描述,带有将要发生的动作
- 模式:〔条件〕消息名(参数表)
- 动作:调用(call),返回(return),发送(send),创建(create),删除(destroy),复制(copy)
- 调用另一个对象的操作,调用本对象的操作,向另一个对象发送一个信号,创建或者撤消一个对象,还可能向调用者返回一个结果。
- 类型:
- 1.简单消息Simple:表示对象间所传送的简单控制流
- 2.调用(同步)消息Procedure Call:表示嵌套控制流和必须等待消息返回的操作调用
- 3.异步消息Asynchronous:表示并发控制流和不必等待消息返回的操作调用
- 4.返回消息Return:表示从同步消息激活的动作返回到调用者的消息
- 5.阻止消息(Balking):表示消息发送者发出消息给接收者,如果接收者无法立即接收这个消息,则发送者放弃这个消息。
- 6.超时消息(Time-out):指消息发送者发出消息给接收者,并按指定时间等待,如果接收者无法在指定时间内接收这个消息,则发送者放弃这个消息。
- 7.自调用(Self Call): 指对象自己调用自己的操作。
-
交互对象:带有生命线的对象;生命线表示对象存在的时间段
- 三种表示方式
- 激活:表示对象正在执行某一动作或等待子过程返回,表示了行为执行持续的时间(活跃期),也表示了操作和它的调用者之间的控制关系。对象只有在处于激活期时才能接收和发送消息。
- 回授:表示对象给自己发送消息(自消息)
- 分支:表示产生分支消息的条件
- 重复:表示消息的一个重复序列。格式:*[条件]
2.1.3 顺序图建模过程
顺序图结构 = 交互对象 + 消息及时序 + 控制流及链关系
设计要点:
- (1) 为每个事务型用例∕活动流创建一张顺序图
- 对单个用例的精化;
- 对一张活动图的精化;
- 对初始类图中消息连接与交互操作的识别。
- (2) 确准参与交互的对象,并合理排序
- (3) 确准对象生存期的消息连接关系与操作方法:将活动图的工作流关系/初始类图的对象间交互关系,逐个分布(映射)到顺序图,以确定参与者对象间需要传递的消息。
- (4) 确准交互对象间消息连接关系的控制方向及请求∕响应策略
实例:
2.1.4 协作图基本概念
待补充。
举例:
顺序图 vx 协作图
- (1)如果对象数目不多,交互情况不复杂,应选择顺序图;
- (2)如果系统关系对象交互行为的时间特性,应选择顺序图;
- (3)如果对象数目很多,且交互情况较复杂,可能使用协作图,但其中的某些“场景片断”可以使用顺序图来专门描述其时间特性。
2.1.5 交互模型建模步骤
(1)列出用例相关的所有对象(类);
(2)根据活动及类间关系确定对象间的消息通讯;
(3)定义对象间的消息连接和消息格式;
(4)确定消息发生的时间顺序;
(5)确定消息编号(针对协作图);
(6)画出交互模型。
2.2 状态图
2.2.1 状态图的基本概念
-
状态模型:描述单个对象在生命期内响应事件所经历的状态及转移行为,是由状态及活动、转换及事件脚本组成的状态机。
-
一个状态机可表示成一个状态图,体现从状态到状态的控制流。
-
事件:指可以引发状态转换的所发生的事情。
-
状态:
- 对象(类)生命期的一个阶段,在该阶段中该对象要满足一些特定的条件,并可从事特定的活动。对象要在一个状态内维持一段时间。
- 状态包括初态,终态,简单状态,复合状态(含并发或顺序子状态),历史状态(复合态中用顺序记录转换前最后活动的子状态)
- 状态的表示法:
-
动作:
- 在状态内或在转化时所做的操作,导致状态改变或一个值返回
- 动作组成:操作调用,对象的创建、修改或删除,信号发送,调用值返回;进入,退出
- entry进入动作
- exit退出动作
- do活动
-
转换:两个状态之间的一种关系,表示当一个特定事件出现时,如果满足一定的条件,对象就从第一个状态(源状态)进入第二个状态(目标状态),并执行一定的动作
-
复合状态:含有子状态的状态(子状态:被嵌套在另外一个状态中的状态)
- 并发:指一个对象在同一时刻可以处在多种状态
2.2.2 状态图建模过程
- 在对象的整个生命期中,从初态开始到终态,列出这个对象可能处于的状态
- 用转换将这些状态连接起来,给转换添加事件、监护条件或动作。
- 识别各状态的进入或退出的动作
- 如果需要,考虑各状态的可能子状态,用子状态进行扩充
举例:
标签:OO,状态,对象,建模,软件工程,消息,操作,交互,属性 来源: https://blog.csdn.net/weixin_46391486/article/details/121766048
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。