对uml九种图的总结
1. 用例图
- 核心描述:从用户(参与者)角度描述系统的功能需求。它定义了系统的边界,说明了“谁”在系统“内部”能“做什么”。
- 核心元素:
参与者:系统外部的、与系统交互的人、组织或其他系统。用一个小人表示。
用例:系统为参与者提供的一个完整的、有价值的功能单元。用一个椭圆表示。
系统边界:一个方框,将所有用例框在里面,参与者在外面。
- 主要关系:关联:参与者与用例之间的通信路径。包含:一个用例的行为包含了另一个用例的行为。表示基础用例必须使用被包含的功能。箭头指向被包含的用例。扩展:一个用例的行为可以在特定条件下扩展另一个用例的行为。表示基础用例是独立的,扩展用例只是可选的补充。箭头指向被扩展的基础用例。泛化:类似于继承,子用例继承父用例的行为并可以增加自己的行为。
- 作用:在需求分析阶段,用于与客户沟通,明确系统范围和功能,是后续开发的依据。
2. 类图
- 核心描述:展示系统的静态结构,特别是系统中存在的类、类的内部结构以及类之间的关系。它是面向对象编程的基石。
- 核心元素:类:用矩形表示,分三层:类名、属性、方法。接口:一种特殊的类,只声明方法,不实现。
- 主要关系(强度从强到弱):泛化:继承关系,
is-a
关系。如:猫 ->
动物。实现:类实现接口。组合:一种强烈的整体与部分关系,部分不能脱离整体而存在。contains-a
关系(强拥有)。如:公司 ->
部门。聚合:一种弱的整体与部分关系,部分可以独立于整体。has-a
关系(弱拥有)。如:汽车 ->
轮胎。关联:一种结构性的连接,一个对象“知道”另一个对象。如:学生 ->
课程。依赖:一个类的变化会影响另一个类,是一种临时、微弱的关系。如:A类的方法使用了B类作为参数。
- 作用:用于系统详细设计,直接指导编码。
3. 对象图
- 核心描述:类图在某一特定时刻的实例化快照。它展示的是在该时刻,系统中存在的具体对象及其链接。
- 与类图的区别:类图是“模板”、“蓝图”,描述所有可能性。对象图是“照片”、“快照”,描述具体场景下的实际情况。对象名带下划线,属性有具体的值。
- 作用:用于解释复杂的类图关系,或演示系统在某个运行时刻的状态。
4. 状态图
- 核心描述:描述一个特定对象在其整个生命周期内所经历的所有状态,以及导致状态发生改变的事件。
- 核心元素:状态:对象在生命周期中满足某些条件、执行某些活动的情形。用圆角矩形表示。转移:状态之间的有向箭头,由触发事件[监护条件]/动作 来标注。初始状态和终止状态:实心圆和同心圆。
- 作用:对行为依赖于状态的对象(如订单、电梯、线程)进行建模,非常适合描述反应式系统。
5. 活动图
- 核心描述:描述系统内部活动的控制流和数据流。可以看作是加强版的流程图,特别擅长描述并行行为。
- 核心元素:活动:代表一个执行步骤。开始节点和结束节点。控制流:活动之间的箭头。分支与合并:菱形,用于判断。分岔与汇合:粗黑线,用于表示并行活动的开始和同步。泳道:将活动按职责分组(如按用户角色或子系统),直观展示职责分配。
- 作用:用于对业务工作流、用例的详细执行流程、复杂算法进行建模。
6. 序列图
- 核心描述:强调时间顺序的交互图。它按时间顺序显示对象之间传递的消息。
- 核心元素:对象生命线:垂直的虚线,代表对象在一段时间内的存在。激活条:生命线上的矩形条,代表对象执行操作的时间段。消息:对象生命线之间的箭头,代表调用、信号等。类型包括同步消息、异步消息、返回消息等。
- 作用:最常用的交互图,用于分析用例的详细交互逻辑,清晰展示消息的先后次序。
7. 协作图
- 核心描述:强调对象组织结构的交互图。它展示对象之间的链接以及在这些链接上传递的消息。
- 与序列图的区别:序列图强调时间顺序,消息有明确的序号。协作图强调对象间的静态关系(链接),消息通过序号表示顺序。协作图更易于看出哪些对象之间存在通信关系。
- 注意:在UML 2.x中,协作图已更名为通信图。
- 作用:当需要重点关注参与交互的对象之间的结构关系时使用。
8. 构件图
- 核心描述:描述软件构件(即可交付的物理模块)之间的静态结构和依赖关系。
- 核心元素:构件:代表一个可替换的物理单元,如源代码文件、动态库、可执行文件、配置文件等。用带标签的矩形表示。接口:构件提供或需要的接口。依赖关系:一个构件需要另一个构件才能正常工作。
- 作用:在系统实现阶段,用于指导开发、编译和部署,展示系统的物理代码结构。
9. 部署图
- 核心描述:描述系统硬件的物理拓扑结构,以及软件构件在运行时在这些硬件节点上的部署情况。
- 核心元素:节点:代表一种物理计算资源,如服务器、个人电脑、交换机、传感器等。用立方体表示。构件:可部署的软件单元,可以展示构件被部署在哪个节点上。连接:节点之间的通信路径,如网络连接(TCP/IP)、串口等。
- 作用:用于规划系统的物理架构,对分布式系统、嵌入式系统和客户端/服务器系统至关重要。