目录
UML
- UML 是统一建模语言的简称,它是一种由一整套图表组成的标准化建模语言。
- UML用于帮助系统开发人员阐明,展示,构建和记录软件系统的产出。
- UML代表了一系列在大型而复杂系统建模中被证明是成功的做法,是开发面向对象软件和软件开发过程中非常重要的一部分。
- UML主要使用图形符号来表示软件项目的设计,使用UML可以帮助项目团队沟通、探索潜在的设计和验证软件的架构设计。
我拿来写论文凑字数的
UML 图表可大致分为结构性图表和行为性图表两种。
- 结构性图表显示了系统在不同抽象层次和实现层次上的静态结构以及它们之间的相互关系。
- 结构性图表显示了系统在不同抽象层次和实现层次上的静态结构以及它们之间的相互关系。
- 结构图分为类图、轮廓图、组件图、组合结构图、对象图、部署图、包图。
- 行为图又分活动图、用例图、状态机图和交互图。
- 交互图又分为序列图、时序图、通讯图、交互概览图。
结构性图表
类图
类图是一切面向对象方法的核心建模工具。该图描述了系统中对象的类型以及它们之间存在的各种静态
关系。
表示类的框分为以下几层:
-
类名:类名如果是正体字,表面这是一个具体的实例。如果是斜体字,表面类是抽象的。
-
属性:一个属性可以是public、private或protected。一个属性的左边如果是加号(+),表示它是public;左边如果是减号(-),表示它是private;左边如果是井号(#),表示它是protected;
-
方法:一个方法的左边如果是加号(+),表示它是public;左边如果是减号(-),表示它是private;左边如果是井号(#),表示它是protected;
类图中具体类、抽象、接口和包的表示法
在UML类图中表示具体类
具体类在类图中用矩形框表示,矩形框分为三层:第一层是类名字。第二层是类的成员变量;第三层是类的方法。成员变量以及方法前的访问修饰符用符号来表示:
- “+”表示 public;
- “-”表示 private;
- “#”表示 protected;
- 不带符号表示 default
在UML类图中表示抽象类
抽象类在UML类图中同样用矩形框表示,但是抽象类的类名以及抽象方法的名字都用斜体字表示:
在UML类图中表示接口
接口在类图中也是用矩形框表示,但是与类的表示法不同的是,接口在类图中的第一层顶端用构造型 <>表示,下面是接口的名字,第二层是方法:
在UML类图中表示包
类和接口一般都出现在包中
关系
泛化(Generalization)
- 【泛化关系】是一种继承关系,表示子类继承父类的所有特征和行为。
- 【箭头指向】带三角箭头的实线,箭头指向父类。
实现(Realization)
- 【实现关系】是一种类与接口的关系,表示类是接口所有特征和行为的实现。
- 【箭头指向】带三角箭头的虚线,箭头指向接口。
关联(Association)
- 【关联关系】是一种拥有关系,它使得一个类知道另一个类的属性和方法。
- 【代码体现】成员变量
- 【箭头指向】带普通箭头的实线,指向被拥有者。双向的关联可以有两个箭头,或者没有箭头。单向的关联有一个箭头。
聚合(Aggregation)
- 【聚合关系】是一种整体与部分的关系。且部分可以离开整体而单独存在。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
- 【代码体现】成员变量
- 【箭头指向】带空心菱形的实线,空心菱形指向整体。
组合(Composition)
- 【组合关系】是一种整体与部分的关系。但部分不能离开整体而单独存在,组合关系是关联关系的一种,是比聚合关系还要强的关系。
- 【代码体现】成员变量
- 【箭头指向】带实心菱形和普通箭头的实线,实心菱形指向整体。
依赖(Dependency)
- 【依赖关系】是一种使用关系,即一个类的实现需要另一个类的协助。
- 【箭头指向】带普通箭头的虚线,普通箭头指向被使用者。
组件图
在统一建模语言中,组件图描绘了组件如何连接在一起以形成更大的组件或软件系统。它展示了软件组件的体系结构以及它们之间的依赖关系。那些软件组件包括运行时组件,可执行组件和源代码组件。
- 【概念】描绘了系统中组件提供的、需要的接口、端口等,以及它们之间的关系。
- 【目的】用来展示各个组件之间的依赖关系。
订单系统组件依赖于客户资源库和库存系统组件。中间的虚线箭头表示依赖关系。另外两个符号,表示组件连接器,一个提供接口,一个需要接口。
部署图
部署图有助于模拟面向对象软件系统的物理方面。它是一个结构性图表,显示了软件产出于系统架构内如何被分发至指定目标。产出即现实生活中各种通过开发过程产生的产品。部署图对运行时配置进行建模,并可视化应用程序中 产出的分布。在大多数情况下,它表达了硬件配置以及和软件组件之间的关系。
- 【概念】描述了系统内部的软件如何分布在不同的节点上。
- 【目的】用来表示软件和硬件的映射关系。
图中简单的表示,不同机器上面部署的不同软件。
对象图
对象图是实例 (Instance) 的表达,包括对象和数据值。静态的对象图是类图的一个实例,它是系统在某个时间点的详细状态的快照,不同之处在于类图表示了一个由类及其关系组成的抽象模型,而对象图则表达了特定时刻的实例。对象图的使用是相当有限的,它常被用作展示数据结构例子。
- 【概念】对象图是类图的一个实例,是系统在某个时间点的详细状态的快照。
- 【目的】用来表示两个或者多个对象之间在某一时刻之间的关系。
类图与对象图的关系
UML 对象图显示了系统中的对象实例如何在特定状态下彼此交互。它也表示那个状态下那些对象的数据值。换句话说,UML 对象图可以被看作是如何在特定状态下使用类(在 UML 类图中绘制)的表达。
类图示例:
以下类图示例代表两个类 - 用户和附件。用户可以上传多个附件,因此这两个类都以一个关联连接,在附件方侧以0 … *作为多重性。
对象图示例:
下面的对象图示例显示了當Peter (即用户)上载两个附件时 User 和 Attachment 类的对象实例如何。因上传两个附件,所以有两个附件对象。
包图
包图是 UML 一種用以显示包和包之间的依赖关系的结构性图表。模型图能显示系统的不同视图,例如,多层应用程序。
- 【概念】描绘了系统在包层面上的结构设计。
- 【目的】用来表示包和包之间的依赖关系。
- 《Use》关系表示使用依赖,Web Shopping依赖Payment
- 《Merge》关系表示合并,Web Shopping合并了Shopping Cart就拥有了Shopping Cart的功能
- 《Access》关系表示私有引入,比如代码中的指定包名类名
- 《Import》关系表示公共引入,比如Java中的import之后,就可以直接使用import包中的类了。
组合结构图
组合结构图是添加到 UML 2.0 中的新的图表之一。组合结构图与类图相似,是一种用于微观视角的系统建模组件图,而不是整个类的组成部分。它是一种静态结构图,显示了一个类的内部结构和这个结构所实现的协作。
组合结构图可以包括内部零件,零件通过其互相交互或通过端口与外界交互。复合结构是一组相互关联的元素,它们在运行时进行协作以达到某种目的。每个元素在协作中都有一些定义的角色。
- 【概念】描述了一个"组合结构"的内部结构,以及他们之间的关系。这个"组合结构"可以是系统的一部分,或者一个整体。
- 【目的】用来表示系统中逻辑上的"组合结构"。
图中描述了Car是由车轴连接着的两个前面轮子、两个后面轮子,和引擎组合的。
轮廓图
- 【概念】轮廓图提供了一种通用的扩展机制,用于为特定域和平台定制UML模型。
- 【目的】用于在特定领域中构建UML模型。
图中定义了一个简易的EJB的概要图。Bean是从Component扩展来的。Entity Bean和Session Bean继承了Bean。EJB拥有Remote和Home接口,和JAR包。
行为性图表
用例图!
-
用例模型从用例的角度描述系统的功能需求,它是系统预期功能(用例)及其环境(参与者)的模型。用例使您能够将系统需要与系统如何满足这些需求相关联。
-
将用例模型想象成一个菜单,就像在餐馆中找到的菜单一样,通过查看菜单,你知道什么菜肴以及他们的价格,你也知道餐厅供应什么样的菜肴:意大利,墨西哥,中国等等。通过查看菜单,您可以对该餐厅的用餐体验有个全面的了解。
-
因为它是一个非常强大的计划工具,所以团队成员通常在开发周期的所有阶段都使用用例模型。
- 【概念】用例图是指由参与者、用例,边界以及它们之间的关系构成的用于描述系统功能的视图。
- 【目的】用来描述整个系统的功能。
用例图中包含以下三种关系:
- 包含关系使用符号《include》,想要查看订单列表,前提是需要先登录。
- 扩展关系使用符号《extend》,基于查询订单列表的功能,可以增加一个导出数据的功能
- 泛化关系,子用例继承父用例所有结构、行为和关系。
活动图
活动图用于展示工作流程,它支持选择 (Choice),迭代 (Iteration)和并发 (Concurrency)。活动图描述了目标系统的控制流程,比如探索复杂的业务规则和操作,描述用例和业务流程。在统一建模语言中,活动图旨在模拟计算和组织过程(即工作流程)。
- 【概念】描述了具体业务用例的实现流程。
- 【目的】用来表示用例实现的工作流程。
状态机图
状态图是 UML 中用来描述基于 David Harel 的状态图概念的系统行为的一种图表。状态图描绘允许的状态和转换以及影响这些转换的事件,它有助于可视化对象的整个生命周期,从而更好地理解以状态主導 (State-based) 的系统。
- 【概念】状态机图对一个单独对象的行为建模,指明对象在它的整个生命周期里,响应不同事件时,执行相关事件的顺序。
- 【目的】用来表示指定对象,在整个生命周期,响应不同事件的不同状态。
图中描述了,门在其生命周期内所经历的状态。
序列图
序列图根据时间序列展示对象如何进行协作。它展示了在用例的特定场景中,对象如何与其他对象交互。
- 【概念】序列图根据时间序列展示对象如何进行协作。它展示了在用例的特定场景中,对象如何与其他对象交互。
- 【目的】通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
如何画序列图
对象和生命线
生命线:在时序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间。
关于对象的命名:
- 对象名和类名,例如:dispatcherServlet:DispatcherServlet
- 只显示类名,即表示它是一个匿名对象,例如::DispatcherServlet
- 只显示对象名不显示类名,例如:dispatcherServlet
活动条
在生命线的虚线上可以用活动条来表示某种行为的开始和结束,一般用小矩形来表示。
消息
在面向对象的分析和设计中,对象的行为也被称为消息,因为对象之间的行为的交互擢用也可以看成是对象之间发送消息实现的。通常,当一个对象调用另一个对象中的行为时,即完成了一次消息传递。
时序图中关注生命线之间的通信,这些通信就是对象发送的消息。UML用生命线间带有实心箭头的实现表示消息,每条消息从发送对象指向接收对象。
另外消息中还细分为了简单消息、同步消息和异步消息。
简单消息:就表示控制如何从一个对象发送给另一个对象,并不包含控制的细节。
同步消息:意味着阻塞和等待。如:A向B 发送一个消息后,对象A 必须一直等到B执行完成后返回才能继续往下执行。这就是同步消息。
异步消息:就意味着是非阻塞。如:A向B发送消息后,直接可以执行下面代码,无需等待B的执行。
同步消息用实心箭头表示,异步消息用开放式箭头表示。
自我调用消息:
消息的返回值:
通讯图
与序列图类似,通訊圖也用于模拟用例的动态行为。与序列图相比,通訊圖更侧重于显示对象的协作而不是时间顺序。
- 【概念】描述了收发消息的对象的组织关系,强调对象之间的合作关系而不是时间顺序。
- 【目的】用来显示不同对象的关系。
图中展示了一个线上书店的通讯图,方框和小人表示生命线,不同生命线之间可以传递消息,消息前面的数字可以表达序列顺序。
交互概览图
交互概述图侧重于交互控制流程的概述,它是活动图的变体,其中节点是交互 (Interactions) 或交互发生 (Interaction Occurrences)。交互概述图描述了隐藏於消息 (Message) 和生命线 (Lifeline) 間的交互。
- 【概念】交互概览图与活动图类似,但是它的节点是交互图。
- 【目的】提供了控制流的概述。
时序图
时序图显示了既定时间内对象的行为。时序图是序列图的一种特殊形式,它俩之间的差异是轴反转,时间从左到右增加,生命线显示在垂直排列的独立隔间中。
【概念】时序图被用来显示随时间变化,一个或多个元素的值或状态的更改。也显示时控事件之间的交互和管理它们的时间和期限约束。
【目的】用来表示元素状态或者值随时间的变化而变化的视图。
UML词汇表和术语
- 抽象类:一个永远不会被实例化的类。这个类的一个实例永远不会存在。
- Actor(演员):发起系统参与的事件的对象或人物。
- 活动:活动图中的步骤或行动。表示系统或演员采取的行动。
- 活动图:一个美化的流程图,显示了流程中的步骤和决定以及并行操作,如算法或业务流程。
- 聚合:是另一类的一部分。图中的包含类旁边有一个空心钻石。
- 工件:描述设计过程中某个步骤输出的文档。描述是图形,文字或其他组合。
- 关联:一个模型的两个元素之间的联系。这可能代表代码中的成员变量,或者人员记录与其所代表的人之间的关联,或者两类工作人员之间的关系,或者任何类似的关系。默认情况下,一个关联中的两个元素是相等的,并且通过该关联知道对方。一个协会也可以是一个可导航的协会,这意味着协会的来源端知道目标端,但反之亦然。
- 关联类:表示两个其他类之间的关联信息的类。
- 属性:可用于引用其他对象或保存对象状态信息的对象的特征。
- 基类:定义由子类通过泛化关系继承的属性和操作的类。
- 分支:活动图中的决策点。分支出现多个转变,每个都有一个保护条件。当控制到达分支时,恰好一个保护条件必须为真; 并且控制遵循相应的转换。
- 类:类似对象的类别,全部由相同的属性和操作描述,并且所有的赋值兼容。
- 类图:显示系统类和它们之间的关系。
- 分类器 :具有属性和操作的UML元素。具体来说,Actor,Classes和Interfaces。
- 协作:通信图中两个对象之间的关系,指示消息可以在对象之间来回传递。
- 通信图:显示如何在强调对象角色的同时完成操作的图表。
- 组件:系统中可部署的代码单元。
- 组件图:显示各种组件和接口之间关系的图表。
- 概念:要包含在域模型中的名词或抽象概念。
- 构建阶段:Rational统一过程的第三阶段,在这个阶段中,正在构建的系统中内置了多个功能迭代。这是主要工作完成的地方。
- 依赖关系:指示一个分类器的关系知道另一个分类器的属性和操作,但不直接连接到第二个分类器的任何实例。
- 部署图:显示各种处理器之间关系的图表。
- 域:系统所涉及的宇宙的一部分。
- 精化阶段:Rational统一过程的第二阶段,允许额外的项目计划,包括构建阶段的迭代。
- 元素:出现在模型中的任何项目。
- 封装:对象中的数据是私有的。
- 泛化:指示一个类是另一个类(超类)的子类。一个空心箭头指向超类。
- 事件:在状态图中,这表示导致系统采取行动或切换状态的信号或事件或输入。
- 最终状态 :在状态图或活动图中,这表示图完成的点。
- 叉:活动图中的一个点,多个并行控制线程开始。
- 泛化:继承关系,其中一个子类继承并添加到基类的属性和操作。
- GoF:四人帮设计模式。
- 高凝聚力:GRASP评估模式,确保课程不是太复杂,做不相关的功能。
- 低耦合:GRASP评估模式,衡量一个类别依赖于另一个类别或与另一个类别相关联。
- 启动阶段:Rational统一过程的第一阶段,处理原始概念化和项目开始阶段。
- 继承:子类继承父类(超类)类的属性或特性。这些属性可以在子类中重写。
- 初始状态:在状态图或活动图中,这表示图开始的点。
- 实例:一个类像模板一样用来创建一个对象。这个对象被称为类的一个实例。可以创建任何数量的该类的实例。
- 接口:定义形成行为契约的属性和操作的分类器。提供者类或组件可以选择实现接口(即实现其属性和操作)。客户端类或组件可以依赖于接口,并因此使用提供者而不提供提供者的真实类别的任何细节。
- 迭代:一个小项目部分,在这个小项目中,一小部分功能被添加到项目中。包括分析,设计和编码的开发循环。
- 加入:活动图中的一个点,多个并行控制线程同步并重新加入。
- 成员:分类器中的属性或操作。
- 合并:活动图中的一个点,不同的控制路径汇集在一起。
- 消息:从一个对象到另一个对象的请求,要求接收消息的对象执行某些操作。这基本上是对接收对象中的方法的调用。
- 方法:对象中的函数或过程。
- 模型:中央UML神器。由各个元素组成的层次结构,以及元素之间的关系。
- 多重性:显示在领域模型中,表示外部概念框,表示与其他对象的分位数的对象数量关系。
- 可导航性:指示关系的哪一端知道另一端。关系可以具有双向可导航性(每一端意识到另一端)或单向导航(一端意识到另一端,但反之亦然)。
- 符号:创建分析和设计方法的图形化文档。
- 注意:文字注释已添加到图表中以更详细地解释图表。
- 对象:对象:在活动图中,从活动接收信息或向活动提供信息的对象。在“协作图”或“序列图”中,参与图中所示场景的对象。通常:给定分类器(Actor,Class或Interface)的一个实例或示例。
- 包:逻辑上应该组合在一起的一组UML元素。
- 包图:所有元素都是包和依赖关系的类图。
- 模式:用于确定交互对象责任分配的解决方案。这是一个成功解决众所周知的常见问题的名称。
- 参数:一个操作的参数。
- 多态性:相同的消息,不同的方法。也用作模式。
- 私有:应用于属性或操作的可见性级别,指示只有包含该成员的分类器的代码才可以访问该成员。
- 处理器:在部署图中,代表可以部署代码的计算机或其他可编程设备。
- 受保护:应用于属性或操作的可见性级别,指示只有包含该成员或其子类的分类器的代码才能访问该成员。
- 公开:应用于属性或操作的可见性级别,指示任何代码都可以访问该成员。
- 读取方向箭头:指示领域模型中关系的方向。
- 实现:表示组件或类提供给定的接口。
- 角色:用于域模型,是关于角色角色的可选描述。
- 顺序图:一个图表,显示随着时间的推移对象的存在,以及随着时间的推移在这些对象之间传递的消息来执行一些行为。状态图图 - 显示所有可能的对象状态的图。
- 状态:在状态图中,这表示系统或子系统的一种状态:它在某个时间点所做的事情,以及其数据的值。
- 状态图:显示系统或子系统的状态,状态之间的转换以及导致转换的事件的图表。
- 静态:一个属性的修饰符,用于指示分类器的所有实例之间共享的属性只有一个副本。“操作”的修饰符,用于指示“操作”独立运行并且不在分类器的一个特定实例上操作。
- 刻板印象(Stereotype):一个应用于Model元素的修饰符,用于指示它通常不能用UML表示的东西。从本质上讲,定型允许你定义你自己的UML“方言”。
- 子类:继承由子类通过泛化关系定义的属性和操作的类。
- 互動區:活动图的一个元素,指示系统或域的哪些部分执行特定的活动。泳道内的所有活动都由泳道所代表的对象,组件或者演员负责。
- 时间拳击:每次迭代都会有特定目标的时间限制。
- 过渡:在活动图中,表示从一个活动或分支或合并或分叉或连接到另一个的控制流程。在国家图中,代表着一个国家向另一个国家的转变。
- 过渡阶段 - Rational 统一过程的最后一个阶段,在这个阶段,用户接受使用新系统和系统的培训,用户可以使用这个阶段。
- 统一建模语言( UML):统一建模语言( UML)利用文本和图形文档,通过在对象之间建立更紧密的关系,来增强软件项目的分析和设计
- 用例:在用例图中,表示系统响应来自Actor的某个请求所采取的操作。
- 用例图:显示参与者和用例之间关系的图表。
- 可见性:对属性或操作的修饰符,指示哪些代码可以访问成员。可见性级别包括公共,受保护和私有。
- 工作流程:一组产生特定结果的活动。
参考文档
- 30分钟学会UML类图. 肖继潮(IT教育)[知乎]
- UML科普文,一篇文章掌握14种UML图. 码农小光[简书]
- 什么是统一建模语言(UML)?. Visual Paradigm[Visual Paradigm]
- 掌握14种UML图,清晰图示. Aiky哇[CSDN]
- UML快速入门. 知春秋[CSDN]