当前课程知识点:软件理论与工程 > 第2章 需求分析 > 2.5 面向对象建模 > 2.5 面向对象建模
大家好
那我们今天开始
软件理论与工程
第二章第五节
面向对象建模
我是主讲老师高广宇
那我们前面呢
其实我们上一章讲的是
这个过程建模的一些相关内容
我们这一章呢
其实是对应到面向对象分析
里面一些内容 对吧
我们首先回顾一下
什么是面向对象分析
我们知道呢
任何一个系统
它都是能够呢
完成一系列相关目标和任务的对象
而对象呢
它完成一个任务时
会请求一系列其它的对象
来帮助完成一些子目标
所以呢
当我们以对象
作为一个基本的元素
或者实体来理解一个系统
或者一个问题的时候
那它所采用的方式
就所谓的
面向对象的一些分析
当然在面向对象分析里面的话呢
它的一个计算的实体是对象
它的一些层次关系呢
包括像聚合 继承 关联 对吧
当然还有一些组合的
一些接口 对吧
就是一个对象
所暴露的一些接口
这是关于面向对象分析
那我们在整个
需求分析的过程中
面向对象分析
我们前面提到
它主要是依赖于像UML语言
来开展一个面向对象的
一个需求建模
所以面向对象的建模呢
是一种用于辨识系统环境中的对象
以及对象之间关系的一个技术
UML的一些这个
各种各样的一些模型
概括起来是包括像对象模型
用例模型
行为模型
以及对象约束语言等等 对吧
重要的就是前面的几大类 对吧
我们后面会略带的
根据我们讲的内容做一些
这个具体的介绍
大概关于UML语言
它这十几类具体的
这个模型和图表
大家自己去
这个课下 去自己学习
那今天呢
我们主要从这个技术路线
领域模型建模
行为模型建模三个方面呢
进行一个探讨和介绍
首先呢
是面向对象建模的一个技术路线
那通常来说呢
我们可以从五个步骤
五个方面来进行一个
这个对象建模
首先呢
我们要从用例描述中
去识别出对象和类
因为我们前面提到了
我们在需求获取阶段
我们有时候会得到一些
用例的一些描述 对吧
那第二个呢
我们要分析用例的一些描述信息
去添加呢
第一步定义的这个类
它的一些属性
和不同类与类之间的一些关联
第三个呢
我们要从用例描述中
去识别一个系统
它的一些什么样的行为
因为我们知道呢
在面向对象的这个过程中
我们需要去定义对象和类
我们同时呢
对于这个类和对象呢
它通常是包括
属性和行为两大类的 对吧
所以第二个步骤
我们要去识别它的一些属性
还有类与类之间的关联
那第三个呢
我们需要去识别它的一些行为
这个当然是有助于我后面
我们在设计和实践阶段
去实现它相应的
一些函数和类接口了 对吧
那第四个呢
我们将系统行为
要分配给这个类
第五个呢
我们是要综合考虑
类的一些属性和行为
去细化类的职责
建立完整的一个对象模型 对吧
要包括向下面这个图里面
我们看到
因为整个需求工程
它接下来面临的就是说
需求设计和软件实现的一些内容
所以在需求工程阶段
我们采用面向对象
进行建模之后
得到的一些模型
其实是很容易在设计和实现阶段
很自然的对接到面向对象的
一些软件设计
和软件实现的
就是关于这一步的
那我们对于面向对象分析的
一个结果来说呢
它通常是要建立一个领域模型
和一个行为模型
那关于这个领域模型和行为模型呢
那我们接下来
分别进行一个介绍
领域模型建模呢
通常呢
就是说我们要发现对象和类
然后呢
要建立类与类之间的关联
要添加类的重要属性
这就是所谓的
建立这个领域模型 对吧
当然发现对象和类的话呢
也有各种各样一些方法
比如这里面提到的
像概念类分类列表
名词分析
行为分析等等 对吧
那领域模型建模的第一个步骤
通常是要去发现对象和类
从哪里去发现
当然是从前面我们提到的
需求获取得到的一些
这个需求获取的结果 对吧
或者是我们以及模型化
表示的一些图 表 文档
所以呢 如果候选对象
既维持一定的状态
又依据状态表现一定的行为
那么它就应该是
一个独立存在的对象 对吧
同时呢 如果候选对象
只有状态 没有行为
那么我们就要去分析它这个状态呢
是不是系统需要的这个数据 对吧
当然如果不是
那这个候选对象
就应该被摒弃 对吧
只有是
它才能够被继续
作为一个对象或者类来存在
同时 这里面我们也要需要注意
实体关系建模思想
有时候我们也有误区 对吧
所以说呢
大家需要这个借鉴
面向对象里面的一些方法
来做这个问题
那领域模型建模里面
发现对象和类
有各种各样的一些方式
第一种方法来说呢
是通过概念类分类列表对吧
这种方式呢
就是说 我们事先呢
给出一个概念类的
一个分类列表
然后呢 依据这个列表
到我们需求获取的这个材料
或者文档中去
找相应的这些对象
那第一类方法呢
就是这个概念类的分类列表
这个概念类分类的列表
它通常的做法是说呢
我们首先呢
定义一个概念类的分类列表
然后呢
到我们需求获取的这个文档
或者说是模型中呢
依照这个概念类列表
去发现对象
比如这里面
图示里面
我们会有这么一个列表 对吧
然后有各种各样的一些
这个字段和字节
那第二类方法呢
是这个名词的分析
那从这个字面上
其实也很容易理解
就是我们
从文本描述中呢
去识别有关的名词和名词短语
为什么呀
因为我们知道对象
它其实就是一个
名词的一个实体
所以呢 通常来说
只有名词对应的
才有可能是对象
所以说呢
我们可以从名词分析的角度上去
从文本中去
发现一些这个对象 对吧
比如说我们这个图示中
有这么一个用例描述
大家可以去看一下
首先顾客
这个携带商品怎么样 怎么样
那我们就能知道
顾客是一个名词
而且呢 在这个里面
可能还多次出现
所以呢 我们知道顾客
其实就可以作为一个对象 对吧
当然了 并不是所有的名词
都可以去作为对象
所以这里面
当然还会有一些摒弃的对象
这个大家可以结合前面
提到了它的一些系统行为
是不是它的一些行为
是不是系统所需要的来判断 对吧
那我们再确定了
这个类和对象之后呢
我们接下来就是
建立类之间的一些关联
我们要保证类之间的协作
所必须的这个可见性 对吧
因为我们前面提到
面向对象的这个分析里面
我们通过定义对象
和类与类之间的交互
才能去对整个系统
它的一些逻辑关系结构进行描述
那其次呢
我们也不要在关联的识别上
花费太多的时间 对吧
因为识别概念类
比识别关联的更加的重要 对吧
就是关于这个
我们实现类协作
必要的一些信息
当然是包括像协作的
一些条件 输入 结果
或者说记录过程
我们要使用用户的描述方式
不进行类型和约束的
一个严格定义
如这里 这是一个图示
我们在定义这个类的一些
重要的一些属性 对吧
这个 就刚才说的
我们要用户的描述的方式
去寻找它的一些重要的
一些基本信息
和一些属性 对吧
那第三个来说呢
我们有了领域模型之后
我们要去进一步定义
它的一些行为模型
行为模型
大家能看到它的重点
在行为两个字
所以呢
它涉及到一个动态的一个变化
它的一个时间上的一些操作 等等
一些流程等等 对吧
所以呢 建立行为模型呢
通常是要建立系统的一些
比如说顺序图 对吧
在需要时呢
我们还需要建立详细的交互图
以及呢 用例的状态图
活动图等等 对吧
当然在有的时候
我们还需要为系统那些行为
去添加一些契约的说明 对吧
以及辅助说明的一些内容
那行为模型建模里面
这个比较重要的一个
就是要建立交互图 对吧
建立交互图的一个上下文环境
它通常指的就是说
它的一些前置或者后置条件
应该要被分配给交互图的
相应的一些行为
而且呢 既然是交互
那我们就要找出
参与交互的一些什么 对象
所以呢 交互图中的参与对象
应该和领域模型中的
这个知识要保持一致
也就是这个对象
来自于我们前面提到的
领域建模所得到的一些类和对象
第三个呢
我们还需要根据发现的对象
以及它们的关联来建立
我们整个完整的
一个交互图的一个框架
最后呢
我们去添加一些详细的信息
去描述不同的对象之间的一些
整个的一些交互行为 对吧
然后 最后我们要进行
消息的一些标识
包括呢 像转化图的
一些详细描述等等 对吧
将整个这交互图它的信息补全
使得它成为一个
比较完整的一个模型
那除了交互图以外
另外还有一类比较重要的
就是所谓的什么状态图
同样的话呢
状态图也需要去确定
它的一个上下文的环境
也就是说呢
我们要去搞清楚
状态的主体
它常见的一些状态主体有哪些
像类 用例对吧 等等
包括有时候像整个系统
那还有呢
我们要去识别状态
我们要去标记它的
初始状态和结束状态
也就是说呢
可能会不存在
确定的初始状态和结束状态
那这个时候
我们就需要去甄别 对吧
第三个呢
我们要建立状态的转换
也就是说呢
不同的状态之间随着时间
或者随着一些触发事件
它怎么去做一些
这个状态的一个变换 对吧
最后呢 我们要像前面一样
我们要去补充详细的信息来完善
我们整个的一个状态图
那同样的呢
我们这个行为模型里面
还有一类
就是所谓的活动图
活动图也是一样
首先确立它的上下文环境
也就是说呢
我们要界定业务流程的
一个处理界限
其次呢 我们需要去分析
业务流程中的主要处理步骤
然后呢 还包括它的一些
主要的数据流
最后我们要进行职责的一个分配
将业务流程的处理步骤呢
要划分到不同的泳道
和不同的这个流程上去 对吧
然后最后我们还要添加
活动图的一些详细信息
去完善活动图的一个描述
但这里面这个
提到的像泳道
等等这些名字
在UML里面
对于活动图定义的时候
一个专用词汇
跟咱们平时的这个还不一样
大家可以再去细化
自己再去看一下
好 那我们关于
面向对象建模这一节呢
我们今天就讲到这
那我们整个第二章呢
到这为止呢
也已经讲完了
好 谢谢大家
-课程概述
-1.1 软件的本质
-1.2 软件工程
--1.2 软件工程
-1.3 软件过程结构
-1.4 过程模型
--1.4 过程模型
-1.5 敏捷开发方法
-第1章 习题
--第1章 习题
-2.1 需求工程过程
-2.2 需求获取
--2.2 需求获取
-2.3 需求分析
--2.3 需求分析
-2.4 过程建模
--2.4 过程建模
-2.5 面向对象建模
-第2章 习题
--第2章 习题
-3.1 设计概述
--3.1 设计概述
-3.2 设计的概念
-3.3 设计模型元素
-3.4 体系结构概述
-3.5 体系结构风格
-3.6 构件级设计
-3.7 UI设计
--3.7 UI设计
-3.8 基于模式的设计
-第3章 习题
--第3章 习题
-4.1 UML概述
-4.2 UML 及UML中的事物
-4.3 UML关系和图
-4.4 UML 图细节(上)
-4.4 UML 图细节(下)
-第4章 习题
--第4章 习题
-5.1 软件测试策略
-5.2 测试传统的应用系统
-5.3 测试面向对象的应用系统
-5.4 测试web应用系统
-5.5 测试移动应用系统
-第5章 习题
--第5章 习题
-6.1 软件项目估算
-6.2 软件过程管理
-6.3 软件配置管理
-6.4 项目版本控制及调试
-第6章 习题
--第6章 习题