类图
概念:类图是一切面向对象方法的核心建模工具。类图描述了系统中对象的类型以及它们之间存在的各种静态关系。
目的:用来表示类、接口以及它们之间的静态结构和关系。
泛化(Generalization)
-
泛化关系:是一种继承关系,表示子类继承父类的所有特征和行为。
-
箭头指向:带三角箭头的实线,箭头指向父类。
实现(Realization)
-
实现关系:是一种类与接口的关系,表示类是接口所有特征和行为的实现。
-
箭头指向:带三角箭头的虚线,箭头指向接口。
关联(Association)
-
关联关系:是一种拥有关系,它使得一个类知道另一个类的属性和方法。
-
代码体现:成员变量
-
箭头指向:带普通箭头的实线,指向被拥有者。双向的关联可以有两个箭头,或者没有箭头。单向的关联有一个箭头。
自己买的车,想什么时候开就开。但是车是车,人是人,没有整体与部分的关系。
聚合(Aggregation)
-
聚合关系:是一种整体与部分的关系。且部分可以离开整体而单独存在。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
-
代码体现:成员变量
-
箭头指向:带空心菱形的实线,空心菱形指向整体。
电脑有键盘才能输入信息,电脑是整体,键盘是部分,键盘也可以离开电脑,单纯的拿去敲。所以是聚合。
组合(Composition)
-
组合关系:是一种整体与部分的关系。但部分不能离开整体而单独存在,组合关系是关联关系的一种,是比聚合关系还要强的关系。
-
代码体现:成员变量
-
箭头指向:带实心菱形和普通箭头的实线,实心菱形指向整体。
鸟是整体,翅膀是部分。鸟死了,翅膀也就不能飞了。所以是组合。
一个公司拥有多个部门,公司和部门之间是组合关系,公司破产了,部门就不复存在了。部门和员工是聚合关系,部门被裁掉,员工就换下家了。
依赖(Dependency)
- 依赖关系:是一种使用关系,即一个类的实现需要另一个类的协助。
- 箭头指向:带普通箭头的虚线,普通箭头指向被使用者。
老司机只管开车,车是谁的不重要,给什么车开什么车。
部署图
-
概念:描述了系统内部的软件如何分布在不同的节点上。
-
目的:用来表示软件和硬件的映射关系。
组件图
-
概念:描绘了系统中组件提供的、需要的接口、端口等,以及它们之间的关系。
-
目的:用来展示各个组件之间的依赖关系。
订单系统组件依赖于客户资源库和库存系统组件。中间的虚线箭头表示依赖关系。另外两个符号,表示组件连接器,一个提供接口,一个需要接口。
包图
-
概念:描绘了系统在包层面上的结构设计。
-
目的:用来表示包和包之间的依赖关系。
-
《Use》关系表示使用依赖,Web Shopping依赖Payment
-
《Merge》关系表示合并,Web Shopping合并了Shopping Cart就拥有了Shopping Cart的功能
-
《Access》关系表示私有引入,比如代码中的指定包名类名
-
《Import》关系表示公共引入,比如Java中的import之后,就可以直接使用import包中的类了。
用例图
-
概念:用例图是指由参与者、用例,边界以及它们之间的关系构成的用于描述系统功能的视图。
-
目的:用来描述整个系统的功能。
用例图中包含以下三种关系:
-
包含关系使用符号《include》,想要查看订单列表,前提是需要先登录。
-
扩展关系使用符号《extend》,基于查询订单列表的功能,可以增加一个导出数据的功能
-
泛化关系,子用例继承父用例所有结构、行为和关系。
活动图
- 概念:描述了具体业务用例的实现流程。
- 目的:用来表示用例实现的工作流程。
图中简单描述了,从开始到登录到查看订单列表,或者登录失败直接结束。
序列图
-
概念:序列图根据时间序列展示对象如何进行协作。它展示了在用例的特定场景中,对象如何与其他对象交互。
-
目的:通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
图中展示的是支付宝条码支付场景的序列图。其中,loop是循环,alt是选择。
通信图
-
概念:描述了收发消息的对象的组织关系,强调对象之间的合作关系而不是时间顺序。
-
目的:用来显示不同对象的关系。
图中展示了一个线上书店的通讯图,方框和小人表示生命线,不同生命线之间可以传递消息,消息前面的数字可以表达序列顺序。