学习目的
了解面向对象的起源,掌握抽象、继承、分解、整体-部分结构、服务的概念。通过CRC卡片实例学习识别类的方法,重点是找出领域类,职责和交互类次之 。掌握UML类图表达法:类、属性、关联、聚合、组合、继承。
学习内容
- 面向对象分析
- CRC卡片法
- UML类图建模
学习产出
一、面向对象分析
1.基本观点
采用对象,类,方法等原子概念,在需求分析,设计与实现之间建立自然的映射关系。主要是基于分类、泛化、聚合关系在对象集合之间建立结构。对象的行为是执行预定的动作(服务),对象通过执行动作来完成状态变迁。
2.面向对象起源
- 面向对象程序设计:将OOP中的概念推到分析和设计阶段
- 数据库设计:将数据语义建模概念,如实体-关系、泛化、聚合和分类用于系统分析和设计
- 结构化分析:将结构化分析方法与技术,如SADT方法等用于系统分析与建模
- 知识表示:基于问题框架和语义网络的知识表示方法
3.Peter Coad的面向对象方法
- 核心概念:对象、属性、结构、服务、主题
- 结构:一般/特殊结构(继承)、整体部分结构
继承结构
整体部分结构
- 服务:瞬时服务(对象的创建、结束、修改)、计算服务、监控服务(对象持续监控流程,检查预设条件是否满足)。使用带箭头的虚线来表示一个对象引用另一个对象的服务。
4.面向对象分析的步骤
- 识别对象和类
- 识别类之间的关系,建立由继承和组合关系组成的类层次结构
- 定义主题,通过主题将对象模型组织成多个抽象层次或视角,一般说来通过继承关系或整体部分关系联系起来的类同属于一个主题
- 识别各个对象内部的属性信息,并将其赋予相应抽象层次的类。
- 为每个类定义服务
5.面向对象分析常用术语对照表
二、CRC卡片分拣法
1.CRC卡片分拣法三要素
- C:类Class
- R:responsibilities类职责定义
- C:collaborations交互协作关系定义
- 步骤:首先提取类的定义,再给该类寻找他该完成的职责以及和他有交互关系的其他类
2.CRC卡片分拣法步骤
- 寻找类,过滤名词
- 筛选类,识别类
- 识别类的功能职责,通过动词识别以及筛选。
- 识别对象之间的交互关系。
- 总结形成UML类图
三、UML类图
1.类的定义:是具有相同性质、相同行为、相同的对象关系、相同语义的对象集合
2.类属性的定义:通过定义类的属性,能够描述和区分该类对象
- 属性的可见性:公有属性(+),私有属性(-),受保护的属性(#),对同包的对象可见(~)
3.类关系
- 关联关系:聚合关系(车和乘客)组合关系(窗口与按钮)(特例)、自返关联、二元关联、N元关联
- 泛化关系:继承关系,类与类之间的层次关系
- 依赖关系:彼此使用服务
- 实现关系:具体类对抽象的接口的实现
4.类图的三个层次
- 概念类:只有类名
- 设计说明类:类名和属性和方法
- 实现类:有具体的方法
5.建立类图的步骤
- 研究分析问题领域,确定系统的需求
- 发现对象与类,明确含义和责任,确定属性和操作
- 发现类之间的关系,把类之间的关系用关联、泛化、聚集、组合、依赖等关系表达出来
- 设计类与关系。调整和细化已得到的类与类之间的关系
- 绘制类图并编制相应的说明
6.类图建模风格
- 属性名和类型一致
- 不要对有关联类的关联命名
- 静态操作/属性要在实例操作/属性之前列出
- 一可见性降低的次序排列出操作/属性
- 避免已被语言的命名规范所隐含的版型
- 总是要指明多样性
- 不要对每个依赖关系都建模
- 把子类放在父类的下面
- 小心基于数据的继承
- 按惯例是把整体画在部分的左边
四、总结反思
本周通过对面向对象、CRC卡片法和UML类图绘制的学习,从软件设计的总体角度,详细说明了最开始应该从哪里入手,该如何搭出UI层一下的框架,并且规范了一些搭建的步骤,用处十分大。