二、图
1、用例图(Use Case Diagram)
含义:参与者(Actor)、用例(Use Case)以及他们之间关系构成的用来描述系统功能的动态视图。
作用:用例图是需求分析中的产物。可视化表达系统需求;完全从外部定义系统功能,即需求与设计完全分离;还可以定义系统功能的使用环境和上下文。具有直观,规范等优点。
参与者和参与者之间的泛化关系,用例和用例之间的包含、泛化、扩展关系,参与者和用例之间的关联关系。
-
构成要素
-
参与者(谁来做)
参与者是与目标系统交互的对象,参与者实质上也是类。可以是人、设备、其他系统或任何概念。例:事件作为参与者
-
用例(做什么)
通过以下问题寻找用例:
1.参与者希望系统提供什么功能?
2.系统是否存储和检索信息,如果是,由哪个参与者触发?
3.当系统改变状态时,是否通知参与者?
4.是否存在影响系统的外部事件?
5.哪个参与者通知系统这些事件?
用例的粒度:用例所包含的系统服务或功能单元的多少。
用例规约:
■ 简要说明
■ 事件流:包括基本流和备选流
基本流:用例“正常”执行时的场景
备选流:用例执行过程中可能发生的“异常”情况
■ 用例场景:由基本流和备选流的组合来对场景进行描述
■ 特殊需求:非功能性需求或者设计约束等
■ 前置条件:执行用例前系统必须所处的状态或满足的条件
■ 后置条件:用例执行完毕后可能处于的一组状态
-
关联
-
系统边界
-
-
三种重要关系
-
泛化
一个父用例可以被特化成多个子用例,而父用例与和子用例之间的关系就泛化关系。泛化侧重表示子用例间的 互斥性。
泛化与包含关系的异同:
同:泛化与包含都增强了基础(父)用例的功能;
异:
① 包含是组合关系,泛化是继承关系;
② 包含中的多个基用例是可以同时执行的,而泛化中的多个子用例在一次活动中仅会执行一个; -
包含
包含关系:用例可以简单地包含其他用例具有的行为,并把它所包含的用例作为自身行为的一部分。包含侧重表示被包含用例对参与者提供服务的间接性。
包含关系的主要两种:
① 多个用例有同一段行为,则可以把这段共同行为单独抽象成一个用例,然后让其他用例来包含这一用例。
② 某个用例功能过多,事件流过于复杂,也可以把某一段事件流单独写成一个用例,达到简化的目的(用例的粒度控制)。 -
扩展
扩展关系:在一定条件下,把新的行为加入到已有的用例中,获得的新用例叫做扩展用例,原有的用例叫基础用例。扩展侧重表示扩展用例的触发不确定性。
扩展关系与包含关系的区别:
扩展关系中,基础用例提供了一个或多个插入点,扩展用例为这些插入点提供了需要插入的行为。
扩展关系中,基础用例的执行不一定涉及到扩展用例,扩展用例的执行是具有条件性的。
即使没有扩展用例,基础用例也是一个完整的用例。
-
2、类图
2.1 类图
- 四种关系
-
依赖关系
依赖是两个或多个模型元素之间语义上的连接关系,发生在一个类使用了另外一个类。
依赖关系在代码中的体现形式:
一个类调用另外一个共有类。
一个类作为另外一个类中方法的局部变量。
一个类作为另外一个类中方法的参数或者返回值。■例如,一个人(Person)可以买车(car)和房子(House),Person类依赖于Car类和House类的定义,因为Person类引用了Car和House。与关联不同的是,Person类里并没有Car和House类型的属性,Car和House的实例是以参量的方式传入到buy()方法中去的。
-
泛化关系
泛化(继承)关系用来描述类的一般和具体之间的关系,具体类拥有一般类的所有特性、成员和关系。
-
关联关系
关联关系是一种结构关系,指出了一个事物的对象(类)与另一个事物的对象(类)之间的连接。它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。在Java语言中,关联关系一般使用成员变量来实现。
特性:- 关联名称
- 角色
- 多重性
- 导航性
关联类:
关联中两种重要关系:- 聚集(Aggregation)
聚集描述了部分和整体的关系。与关联关系一样,聚集关系也是通过实例变量实现的,但是关联关系所涉及的两个类是处在同一层次上的,而在聚集关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分。 数据结构中的集合、线性表等与他们的元素之间都是聚集关系。
聚集关系:部分类可以没有整体类而独立存在。
- 组成(Composition)
组成是一种更强形式的关联,也称强聚合关系。部分与整体的生命周期是一致,不能独立存在。
组成关系:部分类不能脱离整体单独存在。
-
实现关系
实现关系用来规定接口和实现接口的类或者构件之间的关系。
-
2.2 对象图(系统某一运行时刻的快照。)
ps:UML笔记(三)