《信息系统分析与设计》-领域对象建模
1 面向对象方法概述
从面向对象的角度来看,世界就是由对象组成的。
任何给定的商业功能都是由一整套共同工作的对象互相协作来完成的。
对象不仅可以执行功能,还拥有属性(数据)。
计算机世界更好地映射现实世界。
对象:对象是行动或思考时作为目标的人或事物广义的讲对象可以是任何人或事物。
面向对象方法的发展
面向对象编程(OOP
)——> 面向对象设计(OOD
) ——> 面向对象分析(OOA
)
面向对象方法的优势
(1) 对问题空间的理解更直接,更符合人类思维方式
(2) 系统分析和系统设计使用同一模型,各阶段过渡平滑
(3) 开发出的信息系统本质上生命力强
(4) 易于扩充和维护
(5) 与数据模型一致
2 识别领域对象
用例建模解决了业务管理功能到信息系统功能的映射;
领域对象建模解决业务管理对象到信息系统逻辑结构(软件结构模型和数据库结构模型)的映射;
对象建模采用的是面向对象分析技术,有关模型包括:
- 类图(
class diagram
):对象及其关系,用于描述系统静态结构; - 状态图(
statechart diagram
):对象的状态及转换,用于描述基于事件响应的对象动态行为和状态之间的关系;
Q: 什么是领域对象?
领域对象就是问题域中有意义的概念类,它们是现实系统中的事物(things)或事件(events)。
软件系统中的类一部分来自于领域对象。
Wirfs-Brock名词短语策略
1 阅读理解需求文档(或用例说明);
2 反复阅读,筛选出名词或名词短语,建立初始对象清单(候选对象);
3 将候选对象分成三类,即显而易见的对象、明显无意义的对象和不确定类别的对象;
4 舍弃明显无意义的名词或短语;
5 小组讨论不确定类别的对象,直到将它们都合并或调整到其它两类。
可根据概念类别来发现问题域中的候选概念,概念类分为:实体类和描述类。
- 实体类: 指的是现实环境中存在的事物或者发生的事情;
- 描述类: 指的是包含其他事物的信息,需要额外的对象描述,独立于对象现有实例。
3 识别对象属性
属性是描述对象静态特征的一个数据项。
组成系统的事物之间是相互制约相互依赖的,对象间有一定的关联结构。如同实体关系图(E-R图)就基本表达了这种关联。UML对于对象关联关系有明确的定义和表示法。
关联表示不同类的对象之间的结构关系,它在一段时间内将多个类的实例连接在一起。可以使用关联表示对象了解其他对象的程度。PS:关联体现的是对象实例之间的关系,而不表示两个分类之间的关系。比如教师和课程之间是承担关系)
保持属性的简单性
1 仅定义与系统责任和系统目标有关的属性。
2 使用简单数据类型来定义属性。如数字、字符串、日期、布尔、文本等。还包含多种特征或规则的数据,可考虑作为独立的对象类。
3 一般不使用可导出的属性。
4 分析阶段不为对象关联而定义属性。在确立关联后,在设计阶段通过关联属性来实现。
属性的有关说明
- 属性的名称和解释:有些属性只适用于该问题域,是专业术语,晦涩难懂;有些常用词语在特定环境下字面的含义有所修改,为了提高清晰度,需要对这些属性进行定义。
- 属性的数据类型:分析时使用简单类型,如
整数
、实数
、字符串
、日期
、数组
、布尔
等,分析阶段因为不考虑技术实现,所以不需要考虑具体语言能支持的数据类型。 - 其它要求:如取值范围、缺省值等。
4 识别对象的关联
零散孤立的概念类构成不了系统的概貌。
组成系统的事物之间是相互制约相互依赖的,对象间有一定的关联结构。
如同实体关系图(E-R图)就基本表达了这种关联。
UML
对于对象关联关系有明确的定义和表示法。
关联表示不同类的对象之间的静态关系,它在一段时间内将多个类的实例连接在一起。可以使用关联表示对象了解其他对象的程度。对象关联通常可以使用“has a”
来进行验证。
描述关联的要素
1、
关联名称
多数关联是二元的(即只存在于两个类的实例之间),在图中表示为连接两个类符号的实线路径。
使用关联名称,应该反映该关系的目的,并且应该是一个动词词组。
2、
关联角色
关联所联系的每一端叫做一个角色
角色名称应该是一个名词,能够表达被关联对象在关联中所充当的角色,角色名称紧邻关联线的末端。
3、
关联的多重性(Multiplicity)
定义了一个类A的实例在一段特定的时间内能够和多少个类B的实例发生关联。
类似于ER中的关联基数(一对一/一对多/多对多)
4、
关联的导向性(Navigability)
角色的导向性特征表示可以通过关联从源类导向到目标类上。也就是说给定关联一端的对象就能够容易并直接地得到另一端的对象。
识别关联的导向可以推迟,与设计实现有关。通常是源对象存储了对目标对象的一些引用。
整体-部分关联
如果对象a是对象b的一个组成部分,则称b为a的整体对象,a为b的部分对象,二者对应的关联形式称为整体-部分关联(Whole-Part)。可以用 a “is a part of” b
进行验证。
整体-部分关系建模的这种关联也称为聚集(aggregation
),在UML
类图中使用连接线和菱形表达,菱形一端的对象是整体对象。整体-部分关联有两种类型:
组合聚集(
composition aggregation
)组合聚集具有很强的归属关系,在特定时刻部分只能是一个组合对象的成员。
整体端的重数不会超过 1(即它无法被多个整体对象共享),关系建立后一般不可变更。
关联路径的末端有一个实心菱形,用来表示组合关系。
共享聚集 (
shared aggregation
)描述整体-部分的关系,部分可能同时属于多个整体对象。
关联路径的末端有一个空心菱形,用来表示聚集关系。
5 识别泛化关系
泛化(Generalization
)是在多个概念之间识别共性,定义超类(一般概念)和子类(特定概念)关系的活动。
如在图书馆系统中,发现图书馆目前还收藏了其它资源,比如影碟(VCD/DVD)、音乐CD、电子书等品种。它们和图书一样可以被任何读者借出,每个对象都有条码和状态。但它们也有自己的特性,比如属性项、借阅期限、逾期惩罚不同,必须区别对 待。
1、一般-特殊结构(Generalization-Specialization
)
如果类A具有类B的全部属性和行为,而且具有自己特有的某些属性或服务,则A叫做B的特殊类,B叫做A的一般类。
这种关系也称为一般-特殊关系、泛化-特化关系、继承关系。
继承:是指特殊类的对象拥有其一般类的全部属性与服务。
特点:
- 可以简化模型,有效地反映问题空间的分类层次。
- 必须确认子类一定是父类的一个特殊类型,即可以用“is-a-kind-of”进行验证
- 注意控制泛化的粒度,额外的泛化增加复杂性
2、什么时候需要划分一般-特殊结构
1
类的属性或行为不适合该类的全部对象
2
属性和行为相似的类,将这些类的共性抽象出来作为超类,各自特性仍旧保留而作为超类的子类。
3
不要将一个对象的状态变化设计为多个子类,除非对象的多数行为是由状态来决定
3、抽象类
如果一般类A的每个实例还必须是它的一个特殊类的成员,那么类A就被称为一个抽象类。
4、多继承
继承有单继承和多继承。多继承是指一个子类继承了两个父类的属性和行为。
5、接口
当多种不同类型的对象具有相似行为时,可以将他们的行为进行抽象,定义为接口。
接口只是某种行为的契约,接口不含有契约的具体实现机制,实现由类来完成。
6 名词解释
对象:对象是行动或思考时作为目标的人或事物广义的讲对象可以是任何人或事物。
封装:是软化模块化思想的体现,也是面对对象方法的一个重要原则。
消息:对象通过对外提供的服务,在系统中发挥作用。
继承:是指特殊类的对象拥有其一般类的全部属性与服务。
资源项可以有三种状态:一初态 二,终态 三复合状态。
根据概念类别来发现问题可以按以下 7 种来划分:
1
人员,2
组织, 3
物品,4
设备,5
事件,6
规格说明 ,7
业务规则或政策。