结构视图表示系统的静态视图,静态视图包括数据结构、数据关系和作用在这些数据上的操作。
静态视图建模的主要可视化工具就是类图
类图建模十分重要,他集成或者包含了其他所有的建模活动。
类图中的类模型包含类、类的属性(包括关系和类的必要操作)。
类图建模的结果为类图和相关文档。
注意的是,在实践中,类图的建模和用例图的建模是同时进行的,两者可以互相帮助发现新的类或者用例。
类
分类
- 实体类:持久的数据库对象,如订单、顾客、学生等
- 表现(边界/视图)类:定义GUI对象的类
- 控制类:控制程序逻辑和处理用户事件的类
- 资源类:负责和外部数据源通信的类
- 中介(调解)类:管理内容高速缓存中的实体对象
特点
- 需求分析过程中,除了实体类之外的类的细节可能会被处理,也可能不被处理
- 初始的非实体类建模可以推迟到交互建模,更加详细的建模可以再推迟到系统设计阶段
发现类(实体类)的方法
构造一个表来从功能性分析中发现类
example:
需求 | 实体类 |
---|---|
系统通过扫描会员卡来确认客户身份 | Customer, MenbershipCard |
发现类是一个反复迭代的过程,可以通过下列问题来确定一个概念是不是候选类
- 这个概念是数据的容器吗?
- 他具有取不同值的独立属性吗?
- 他有很多实例对象吗?
- 他在应用领域的范围内?
有的实体类会在用例图中作为用例出现,可以为其加上注释“from use case view”,其作为外部实体与系统交互,同时也是系统必须了解的内部实体。
属性
新建一个类之后要立刻为类加上属性
分类
标识属性
在一个类中有一个或多个,在该类的所有实例中具有唯一值。
又称关键字。
理想情况下一个类有一个标识属性,但是也有多个的情况。
描述属性
描述类的主要信息内容。
注意点:
属性有原始类型和非原始类型。用int等表示就是原始类型,非原始类型就是用户定义的类型,如用一个Java类来表示。
类之间的关系
关联
表示类之间有简单的协作关系。
例如,Java类中传入了另一个类的参数,则表示这两个类有关联。
作图时用实线表示。
聚合
一个类含有若干个另一个类
例如,顾客拥有一个或者零个会员卡,但每个会员卡都会对应一个顾客。
用白色钻石加实线表示,钻石指向顾客表示的那一端
泛化
一个类是另一个类的超类。
白色三角和实线表示,三角指向超类。