UML
一. 事物
1.结构事物
结构事物是UML模型中的名词。它们通常是模型的静态部分,描述概念或物理元素。结构事物包括类(Class)、接口(Interface)、协作(Collaboration)、用例(Use Case)、主动类(Active Class)、构件(Component)、制品( Artifact)和结点(Node)。
各种结构事物的图形化表示:
2.行为事物
行为事物是UML模型的动态部分。它们是模型中的动词,描述了跨越时间和空间的行为。行为事物包括交互(Interaction)、 状态机(State Machine) 和 活动(Activity)。
3.分组事物
分组事物是UML模型的组织部分,是一些由模型分解成的“盒子”。在所有的分组事物中,最主要的分组事物是包( Package)。包是把元素组织成组的机制,这种机制具有多种用途。结构事物、行为事物甚至其他分组事物都可以放进包内。包与构件(仅在运行时存在)不同,它纯粹是概念上的(即它仅在开发时存在)。
4.注释事物
注释事物是UML模型的解释部分。这些注释事物用来描述、说明和标注模型的任何元素。注解(Note) 是一种主要的注释事物。注解是一个依附于一个元素或者一组元素之上,对它进行约束或解释的简
单符号。
二. 联系
1.继承
指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;
泛化(Generalization)。 泛化是一种特殊/一般关系,特殊元素(子元素)的对象可替代一般元素(父元素)的对象。用这种方法,子元素共享了父元素的结构和行为。在图形上,把一个泛化关系画成一条带有空心箭头的实线,它指向父元素
2.实现
3.依赖
可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;
依赖(Dependency)。依赖是两个事物间的语义关系,其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义。在图形上,把一个依赖画成一条可能有方向的虚线
4.关联
他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;
5.聚合
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分
6 组合
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
UML中关联的多重度是指一个类的实例能够与另一个类的多少个实例相关联,这个“多少”被称为关联角色的多重度指定关联一端的多重度。也可以这样理解:在关联另一端的类的每个对象要求在本端的类必须有多 少个对象。(也就是你首先可以假想另一端的对象是1个,那么本段要有多少个。)
三. 类图
四.对象图
对象图(Object Diagram) 展现了某一时刻一组对象以及它们之间的关系,描述了在类图中所建立的事物的实例的静态快照
。对象图一般包括对象和链
和类图一样,对象图给出系统的静态设计视图或静态进程视图,但它们是从真实的或原型实例的角度建立的。这种视图主要支持系统的功能需求,即系统应该提供给最终用户的服务。利用对象图可以对静态数据结构建模。
在对系统的静态设计视图或静态进程视图建模时,主要是使用对象图对对象结构进行建模
。对象结构建模涉及在给定时刻抓取系统中对象的快照。对象图表示了交互图表示的动态场景的一个静态画面,可以使用对象图可视化、详述、构造和文档化系统中存在的实例以及它们之间的相互关系。
五.用例图
用例图(Use Case Diagram)展现了一组用例、参与者(Actor) 以及它们之间的关系。
用例图通常包括以下内容(如图7-13所示)。
- 用例。
- 参与者。
- 用例之间的扩展关系(<
> )和包含关系(< >),参与者和用例之间的关联关系,用例与用例以及参与者与参与者之间的泛化关系。
六.序列图
用于展示一个用例和多个对象的行为
序列图(Sequence Diagram)是场景(Scenario)的图形化表示,描述了以时间顺序组织的对象之间的交互活动
。如图7-14所示,形成序列图时,首先把参加交互的对象放在图的上方,沿水平方向排列。通常把发起交互的对象放在左边,下级对象 依次放在右边。然后,把这些对象发送和接收的消息沿垂直方向按时间顺序从上到下放置。这样,就提供了控制流随时间推移的清晰的可视化轨迹。
序列图有两个不同于通信图的特征。
(1)序列图有对象生命线。对象生命线是一条垂直的虚线,表示- 一个对象在一段时间内存在。在交互图中出现的大多数对象存在于整个交互过程中,所以这些对象全都排列在图的顶部,其生命线从图的顶部画到图的底部。但对象也可以在交互过程中创建,它们的生命线从接收到构造型为create的消息时开始。对象也可以在交互过程中撤销,它们的生命线在接收到构造型为destroy的消息时结束(并且给出一个大X的标记表明生命的结束)。
(2)序列图有控制焦点。控制焦点是一个瘦高的矩形,表示一个对象执行一个动作所经历的时间段,既可以是直接执行,也可以是通过下级过程执行。矩形的顶部表示动作的开始,底部表示动作的结束(可以由一个返回消息来标记)。还可以通过将另一个控制焦点放在它的父控制焦点的右边来显示( 由循环、自身操作调用或从另一个对象的回调所引起的)控制焦点的嵌套(其嵌套深度可以任意)。如果想特别精确地表示控制焦点在哪里,也可以在对象的方法被实际执行(并且控制还没传给另一个对象)期间将那段矩形区域阴影化。
七.通信图
通信图(Communication Diagram)强调收发消息的对象的结构组织
,在早期的版本中也被称作协作图。通信图强调参加交互的对象的组织。产生一张通信图,如图7-15所示,首先要将参加交互的对象作为图的顶点,然后把连接这些对象的链表示为图的弧,最后用对象发送和接收的消息来修饰这些链。这就提供了在协作对象的结构组织的语境中观察控制流的一个清晰的可视化轨迹。
通信图有两个不同于序列图的特性。
(1)通信图有路径。为了指出一个对象如何与另一个对象链接,可以在链的末端附上一个路径构造型(如构造型《local》, 表示指定对象对发送者而言是局部的)。通常只需要显式地表示以下几种链的路径: local (局部)、parameter (参数)、global (全局)以及self (自身),但不必表示association(关联)。
(2)通信图有顺序号。为表示一个消息的时间顺序,可以给消息加一个数字前缀(从1号消息开始),在控制流中,每个新消息的顺序号单调增加(如2、3等)。为了显示嵌套,可使用带小数点的号码(1 表示第一个消息; 1.1 表示嵌套在消息1 中的第一个消息,1.2 表示嵌套在消息1中的第二个消息,等等)。嵌套可为任意深度。还要注意的是,沿同一个链可以显示许多消息(可能发自不同的方向),并且每个消息都有唯一的一个顺序号。
序列图和通信图是同构的,它们之间可以相互转换。
八.状态图
状态图通常是对反应型对象建模
九.活动图
活动图(Activity Diagram)是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程
,如图7-19所示。活动图专注于系统的动态视图,它对于系统的功能建模特别重要,并强调对象间的控制流程。
- 活动图一般包括活动状态和动作状态、转换和对象
- 活动图可以表示分支、合并、分岔和汇合
- 当对一个系统的动态方面建模时,通常有两种使用活动图的方式
对工作流建模
对操作建模
十.构件图(组件图)
构件图(Component Diagram)展现了一组构件之间的组织和依赖。构件图专注于系统的静态实现视图
,如图7-20所示。它与类图相关,通常把构件映射为一个或多个类、接口或协作。
十一.部署图
部署图(Deployment Diagram)是用来对面向对象系统的物理方面建模的方法
,展现了运行时处理结点以及其中构件(制品)的配置。部署图对系统的静态部署视图进行建模,它与构件图相关。通常,一个结点是一个在运行时存在并代表一项计算资源的物理元素,至少拥有一些内容,常常具有处理能力,包含-一个或多个构件。部署图如图7-23所示,其中,<
部署图展现了系统的软件和硬件之间的关系,在实施阶段使用
总结
静态建模:类图、对象图、用例图
动态建模:序列图(顺序图,时序图)、通信图(协作图)、状态图、活动图
物理建模:构件图(组件图)、部署图