最全面的UML教程

你想要的干货,都在这里哟算法

最全面的UML教程

写在最前面的话

声明,本篇博文部分资料摘自维基百科Calvinsily的UML教程,博文不涉及高深技术,旨在分享相关技术,节省大部分朋友学习的时间成本,望与诸君共同进步!编程

UML概述

UML.png

什么是 UML?
  • UML 是一种为面向对象开发系统的产品进行说明、可视化、和编制文档的标准语言;
  • UML 做为一种模型语言,它使开发人员专一于创建产品的模型和结构,而不是选用什么程序语言和算法实现;
  • UML 是不一样于其余常见的编程语言,如C + +,Java中,COBOL等,它是一种绘画语言,用来作软件蓝图;
  • UML 不是一种编程语言,但工具可用于生成各类语言的代码中使用UML图;
UML 核心

UML 的核心是图表,大体能够将这些图归类为结构图和行为图。segmentfault

  • 结构图是由静态图,如类图,对象图等静态图;
  • 行为图是由像序列图,协做图等动态图;

一个系统的静态和动态特性是经过使用这些图的可视化。编程语言

UML 类图:

类图是使用面向对象的社会最流行的 UML 图。它描述了在一个系统中的对象和他们的关系,可以让咱们在正确编写代码之前对系统有一个全面的认识。
一个单独的类图描述系统的一个具体方面,收集类图表示整个系统。基本上,类图表示系统的静态视图。svg

类图是惟一能够直接映射到面向对象的语言UML图。所以,它被普遍应用于开发者社区。

UML 对象图:

对象图是类图的一个实例。所以,一类图的基本要素是相似的。对象图是由对象和连接。在一个特定的时刻,它捕获该系统的实例。
对象图用于原型设计,逆向工程和实际场景建模。工具

UML 用例图:

用例图是从用户角度描述系统功能,并指出各功能的操做者,用来捕捉系统的动态性质。
一个高层次的设计用例图是用来捕捉系统的要求,所以它表明系统的功能和流向。虽然用例图的正向和反向工程是否是一个很好的选择,但他们仍然在一个稍微不一样的方法来模拟它。学习

UML 交互图:

交互图,用于捕获系统的动态性质。
交互图包括序列图和协做图,其中:序列图显示对象之间的动态合做关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;协做图描述对象间的协做关系,协做图跟时序图类似,显示对象间的动态合做关系。spa

UML 状态图:

状态图是一个用于模拟系统的动态性质的五个图。这些图用来模拟一个对象的整个生命周期。
一个对象的状态被定义为对象所在的条件下,特定的时间和对象移动对其余状态,在某些事件发生时。状态图还用于正向和反向工程。
状态图着重描述从一个状态到另外一个状态的流程,主要有外部事件的参与。设计

UML 活动图:

活动图描述知足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。活动图是一种特殊的状态图,它对于系统的功能建模特别重要,强调对象间的控制流程。code

以上就是UML的相关概念了,其实说白了就说画图,至于怎么画,下面就让咱们一块儿来学习吧

在这里我不会也不太可能将UML的各类元素都介绍一遍,我只介绍类图中各个类之间的关系;能看懂类图中各个类之间的线条、箭头表明什么意思后,也就足够应对 平常的工做和交流了;

类图是面向对象式的建模。他们通常都被用于概念建模(conceptual modelling)的系统分类的应用程序,并可将模型建模转译成代码。

  • UML提供机制,以表明类的成员,如属性和方法,对他们的其余信息。
  • 指定一个类成员(即任何属性或方法)的可见性有下列符号,必须摆在各成员的名字以前:

成员可见性.png

一个类有三个区域

  • 最上面是类名称
  • 中间部分包含类的属性
  • 底部部分包含类的方法

image

先从一个示例开始

请看下面这张类图,主要看类之间的关系:
uml_class_struct.png

  • 车的类图结构为<<abstract>>,表示车是一个抽象类;
  • 它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示;
  • 小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;
  • 小汽车与发动机之间是组合关系,使用带实心箭头的实线表示;
  • 学生与班级之间是聚合关系,使用带空心箭头的实线表示;
  • 学生与身份证之间为关联关系,使用一根实线表示;
  • 学生上学须要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示;
实例层级的关系
  • 泛化

泛化(Generalization),即继承的反方向,指的是一个类(称为父类、父接口)具备另外的一个(或一些)类(称为子类、子接口)的共有功能。子类可视为其父类的特例,并能够增长新功能。用带空心三角形箭头的实线表示。

  • 实现

实现(Realization)指的是一个class类实现interface接口(能够是多个)的功能;在Java中此类关系经过关键字implements明确标识。用带空心三角形箭头的虚线表示。

  • 依赖

依赖关系(Dependency)能够简单的理解为一个类A使用到了另外一个类B," ... uses a ...",被依赖的对象只是做为一种工具在使用,而并不持有对它的引用。而这种使用关系是具备偶然性、临时性的、很是弱的,可是B类的变化会影响到A;表如今代码层面,为类B做为参数被类A在某个method(方法)中使用。用带燕尾箭头的虚线表示。表示一个类依赖于另一个类的定义;依赖关系仅仅描述了类与类之间的一种使用与被使用的关系。

  • 关联

关联关系使一个类知道另一个类的属性和方法;某个对象会长期的持有另外一个对象的引用,关联的两个对象彼此间没有任何强制性的约束,只要两者赞成,能够随时解除关系或是进行关联,它们在生命期问题上没有任何约定。被关联的对象还能够再被别的对象关联,因此关联是能够共享的。 在代码层面上,被关联类以类属性的形式出如今关联类中,也多是关联类引用了一个类型为被关联类的全局变量。目前定义有五种不一样类型的关联。双向(Bi-directional)和单向(uni-directional)的关联是最多见的。

  • 聚合

聚合(Aggregate)是表示总体与部分的一类特殊的关联关系,是“弱”的包含(" ... owns a ..." )关系,成分类能够不依靠聚合类而单独存在,能够具备各自的生命周期,部分能够属于多个总体对象,也能够为多个总体对象共享(sharable)。例如,池塘与(池塘中的)鸭子。再例如教授与课程就是一种聚合关系。又例如图书馆包含(owns a) 学生和书籍。即便没有图书馆,学生亦能够存在,学生和图书馆之间的关系是汇集。汇集可能不涉及两个以上的类。图形以空心的菱形箭尾与实线来表示。

关于UML 的相关介绍和其中最重要的类图就介绍到这里了,相信你此时已经入门UML了,也许你还想再更深刻的了解TA,不要紧, 我已经为你准备了一份很是全面的学习资料,请点击文章末尾连接领取.

最全面的UML教程
PS: 感谢Calvinsily整理分享的UML教程,你们能够去点个赞哦!

请赏个小红心!由于你的鼓励是我写做的最大动力!

更多精彩文章请关注
相关文章
相关标签/搜索