本系列文章为笔记,内容根据北京大学《软件工程》MOOC
面向对象分析概述
OOA模型
![fb33bf964fe4d20d82a2679e3eea81c8.png](https://i-blog.csdnimg.cn/blog_migrate/bac64b4a1e144a85395b3af36ae7c7f0.jpeg)
OOA过程
![b47400b651b50a4e17ece031c56a1628.png](https://i-blog.csdnimg.cn/blog_migrate/be0123d4291c6dab2e0df0dd2d726b6c.jpeg)
识别类
研究问题域和用户需求
- 研究用户需求,明确系统责任
阅读:用户需求有关材料
交流:与用户交流,修正用户需求
调查:现场调查
记录、整理:产生合格的需求文档
- 研究问题域
- 确定系统边界
划出系统和用户之间的明确界限,并确定接口
确定系统内外,外部主要是人、设备和外系统
策略和启发
- 考虑问题域
![1143d58e396d9169d7c87fd5510a04dc.png](https://i-blog.csdnimg.cn/blog_migrate/b6e32c2100b77ef6ae4d9796f55b006a.jpeg)
- 考虑系统边界
考虑系统边界,可以启发分析员发现一些与系统边界外的参与者进行交互,并且处理系统对外接口的对象
![70fe5728e12aa0fb81e323843481f44d.png](https://i-blog.csdnimg.cn/blog_migrate/7d49ef3f5871448a5b44cd6dd8451517.png)
- 考虑系统责任
审查和筛选
- 舍弃无用的对象
- 通过属性判断
- 通过操作判断
- 对象的精简
将一对一的对象合并
![c4dc4e12f4244d5b2e28d6015fcaf897.png](https://i-blog.csdnimg.cn/blog_migrate/e6484d15d3e1bdf8606787f14c9d2adf.jpeg)
- 与现实条件有关的对象
可以放到OOD(面向对象设计)部分去考虑,暂时不用理会
![b89cc8b93ca8607cd656dcf53fa94670.png](https://i-blog.csdnimg.cn/blog_migrate/e9964626619a67f6eb0dffea7462e005.jpeg)
- 识别主动对象
- (分析阶段不能完全确定)考虑问题域和系统责任:哪些对象有主动行为
- (分析阶段不能完全确定)从需求考虑系统的执行情况是否需要并发执行
- 考虑系统边界以外的参与者与系统中哪些对象直接进行交互
对象分类,建立类图中的类
- 对象分类
- 异常情况的检查和调整
- 类属性或操作不适合全部对象实例
进一步细化对象:“汽车”分为“客车”,“货车”
- 属性及操作相同的类
”吸尘器“和”电子琴“在”商场“中都可以作为”商品“
- 属性及操作相似的类
有需要时,提升部分类:提取出“汽车”
- 同一事物的重复描述
“学生证”和“学生”
识别属性和操作
识别属性
- 策略与启发
![55c4d93323e99cd04151f8f44081b3d5.png](https://i-blog.csdnimg.cn/blog_migrate/398dd9f0338523e6a8810f9557ef257b.jpeg)
- 审查与筛选
![24b6c8e535e359f0fbe6fdcc1c004861.png](https://i-blog.csdnimg.cn/blog_migrate/320801b50f846d2c9cd8e5235d05a00d.jpeg)
- 与实现条件有关的问题都推迟到OOD考虑
![930e8d3d4c69735f5a87f4720a519fa4.png](https://i-blog.csdnimg.cn/blog_migrate/71658e30571cd68c5bca545ecdd1d999.jpeg)
- 属性的命名:原则与类的命名相同
![eee83330eafbc46d6d82f2d4bb20fd2b.png](https://i-blog.csdnimg.cn/blog_migrate/384e8c26f56e2a92bf93b2b26ac6ecdc.jpeg)
- 属性的详细说明
![27db5419bebaf6f830c80280404dd4ca.png](https://i-blog.csdnimg.cn/blog_migrate/779cbfb7c89aac83e40ae996b814e97a.jpeg)
识别操作
- 区分对象行为的类型
为了明确OOA应该定义对象的哪些操作,首先区分对象行为的不同类型
- 系统行为
- 对象自身的行为——算法简单的操作
- 对象自身的行为——算法复杂的操作计算或监控
- 发现操作的策略与启发
- 考虑系统责任
- 考虑问题域
- 分析对象状态
- 追踪操作的执行路线
- 审查与调整
- 审查对象的每个操作是否真正有用,是不是高内聚的
- 调整
- 拆分
- 合并
- 认识对象的主动行为
- 考虑问题域
- 与系统边界以外的活动者直接进行交互的对象操作
- 根据系统责任观察系统功能的构成层次,考虑完成最外层功能的对象操作
- 操作执行路线逆向追踪
OOA标注的主动对象和主动操作不一定是最终的定局,应为在OOD中可能增加一些新的主动对象
- 操作的命名与定位
- 命名:名词
- 定位:与对象一致
- 操作的详细说明
要在类规约中,要对操作进行详细说明,包括操作的解释、操作的特征标记、操作要发送的消息和约束条件等
- 操作的文字解释
- 操作名、输入输出、参数类型
- 消息发送
- 约束条件
- 操作流程
识别对象之间的关系
识别继承(泛化)
- 识别继承(泛化)关系的策略
- 学习当前领域的分类学知识
- 按常识考虑事物的分类
- 使用继承的定义
- 一种思路是把类看作对象集合,分析这些集合之间的包含关系
- 看一个类是不是具有另一个类的全部特征
- 考察属性与操作的适用范围
- 考虑领域范围内的复用
- 审查与调整
- 问题域是否需要这样的分类
- 系统责任是否需要这样分类
- 是否符合分类学尝试(is a kind of)
- 是否构成了继承关系
- 继承关系的简化
识别关联
- 识别关联的策略
- 认识对象之间的静态联系
- 认识关联的属性与操作
- 分析并表示关联的多重性
- 进一步分析关联的性质
- 命名与定位命名
- 调整对象层和特征层
识别聚合
- 识别聚合的策略
![aa99e14be4fd97a32bb1289ab03d5dcc.png](https://i-blog.csdnimg.cn/blog_migrate/f7dc35da370e3174f16d5e87f708a361.jpeg)
- 审查与筛选
![4b2223238961582f1fb4e8078d59287e.png](https://i-blog.csdnimg.cn/blog_migrate/312df8725dd57b4e0af18d270ec82658.jpeg)
- 调整对象层和属性层
识别依赖
![4fd4f2d7738fcc656f0bad9c0a62e735.png](https://i-blog.csdnimg.cn/blog_migrate/11b8c3b2783f5b9f52a1232b933a23dd.jpeg)