最全面的UML教程
你想要的干货,都在这里哟
最全面的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
一个类有三个区域
- 最上面是类名称
- 中间部分包含类的属性
- 底部部分包含类的方法
先从一个示例开始
请看下面这张类图,主要看类之间的关系:
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教程,大家可以去点个赞哦!
请赏个小红心!因为你的鼓励是我写作的最大动力!
更多精彩文章请关注