1

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

最全面的UML教程

写在最前面的话

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

UML概述

UML.png

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

UML 的核心是图表,大致可以将这些图归类为结构图和行为图。

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

一个系统的静态和动态特性是通过使用这些图的可视化。

UML 类图:

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

类图是唯一可以直接映射到面向对象的语言UML图。因此,它被广泛应用于开发者社区。

UML 对象图:

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

UML 用例图:

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

UML 交互图:

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

UML 状态图:

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

UML 活动图:

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

以上就是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教程,大家可以去点个赞哦!

请赏个小红心!因为你的鼓励是我写作的最大动力!

更多精彩文章请关注

darryrzhong
779 声望124 粉丝

时光,不会辜负每一个平静努力的人


引用和评论

0 条评论