基于类的需求建模
基于类的建模
- 基于类建模要表示系统操作的对象、应用于对象间能有效控制的操作(也称方法或服务)、对象间的关系、已定义类之间的协作等。
- 基于类的分析模型的元素主要有:
- 类和对象、属性、操作、CRC模型、协作图和包。
- 基于类的建模,就是要识别和表示这些元素。
基于类的建模基本思路
- 识别分析类 – 分析出有哪些类
- 描述属性 – 对应将来编代码定义类属性
- 定义操作 – 对应将来编代码定义方法
- CRC建模 – 解决类的功能是什么,协作关系如何
- 关联与依赖 – 解决类之间有什么关系
9.1 识别分析类
- 识别分析类:可以通过检查需求模型开发的使用场景,或通过对为系统开发的用例或处理叙述进行“语法分析”,来进行识别。
具体做法
- 首先用下划线画出每个名词或名词词组
- 将这些名词输入到一个列表中,同时标注出同义词。
- 筛选甄别,把描述问题的名词和解决方案的名词分开。
分析类的表现形式
在所有名词的基础上,找以下对应形式:
- 外部实体(例如,其他系统、设备、人员),产生或使用基于计算机的系统的信息,产生或使用基于计算机的系统的信息。
- 事物(例如,报告、显示、字母、信号),问题信息域的一部分。
- 偶发事件或事件(例如,所有权转移或机器人的一组移动完成),在系统操作环境内发生。
- 角色(例如,经理、工程师、销售人员),由和系统交互的人员扮演。
- 组织单元(例如,部门、组、团队),和某个应用相关。
- 场地(例如,制造车间或码头),建立问题的环境和系统的整体功能。
- 结构(例如,传感器、四轮交通工具、计算机),定义了对象的类或与对象相关的类。
上面是一种一般性归类方法,之所以这样做是为了防止两个问题
- 防止漏掉未来系统中需要的类
- 防止误认为一些名词是系统中类
还有其他归类方法,如:按照数据产生者(源)、数据使用者(汇点)、数据管理者、查看(或观察者)类、辅助类。
特别注意:
- 什么不能是类或对象。
- 通常,绝不应该用“强制性的过程的名称”为类命名
- 例如:
- Image”图像“是类
- InvertImage”图像翻转“是操作,不应是类
举例:
名词列表
分析筛选建议
分析师在考虑每个潜在的类是否应该包含在分析模型中时,可使用以下6个选择特征:
- 保留信息:只有当相关信息必须被记录才能保证系统正常工作时,潜在类在分析过程中才是有用的。
- 所需服务:潜在类必须具有一种可确认的、能用某种方式改变类的属性值的操作。
- 多个属性:在需求分析过程中,焦点应在于”主“信息;事实上,只有一个属性的类可能在设计中有用,但是在分析活动阶段,把它作为另一个类的某个属性可能更好。
- 公共属性:可以为潜在类定义一组属性,这些属性适用于类的所有实例。
- 公共操作:可以为潜在类定义一组操作,这些操作适用于类的所有实例。
- 必要需求:在问题空间中出现的外部实体,或者任何系统解决方案的运行所必须的信息,几乎都被定义为需求模型中的类。
分析筛选
注意:
- 上面的表是不全面的,必须添加其他类以使模型完整;
- 某些被拒绝的潜在类可能成为那些被接受的类的属性;
- 问题的不同陈述可能导致作出不同的”接受或拒绝“决定。
- 如何确定某个潜在类是否应该真的成为一个分析类?
9.2 描述属性
- 属性是在问题环境下完整定义类的数据集合。
- 例如:学生类,在教务系统和学生社团系统中的属性就会有很多不同。
- 为了给分析类开发一个有意义的属性集合,需要选择那些合理的”属于“类的”东西“。
- 每个类都应回答如下问题:
- 什么数据项在问题的环境内能够完整地定义这个类?
SafeHome实例
- 考虑为SafeHome定义System类。
- 房主配置安全功能以反映传感器信息、识别信息、报警响应信息、激活或关闭信息等。
- 可以用如下方式表现这些组合数据项:
- 识别信息 = 系统编号 + 确认电话号码 + 系统状态
- 报警应答信息 = 延迟时间 + 电话号码
- 激活或者关闭信息 = 主密码 + 允许重复次数 + 临时密码
说明:
- 等式右边的某些数据项可以精化到基础级,
- 可以为System类组成一个合理的属性列表。
- 通常,如果多个项和类相关联,就应避免把这个项定义为属性。例如:
- 传感器(Sensor)是整个系统(System)的一部分,因此并没有列为System类的属性。
- Sensor已经被定义为类,多个Sensor对象将和System类关联。
System类的类图
9.3 定义操作
-
操作:定义某个对象的行为。
-
通常可以粗略地划分为四种类型:
- 以某种方式操作数据;
- 执行计算的操作;
- 请求某个对象的状态的操作;
- 监视某个对象发生某个控制事件的操作。
-
操作必须”理解“类的属性和相关属性的性质。
-
定义操作中
- 研究处理说明(或用例)合理选择属于类的操作
- 研究语法解析分离动词
-
例如描述:”为传感器分配编号和类型“ ”主密码用于激活和接触系统“ 表明:
- assign()操作和Sensor类相关
- arm()和disarm()应用于System类
-
另外,操作还可能被划分成子操作
经过分析后的类图