Unified Modeling Language (UML)又称统一建模语言或标准建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。

  • UML分类
    (1)静态模型(系统结构): 用例图、类图、对象图、构件图、部署图
    (2)动态模型(系统行为):状态图、活动图、顺序图、协作图
  • UML中有4种事务:
    (1)结构事务:名词、静态部分、物理元素。

  • (2)行为事务:动词、动态部分、行为。

  • (3)分组事务:包。

  • (4)注释事务:注解。

用例图:

用例图是指由参与者(Actor)、用例(Use Case),边界以及它们之间的关系构成的用于描述系统功能的视图。用例图(User Case)是外部用户(被称为参与者)所能观察到的系统功能的模型图。用例图是系统的蓝图,用于需求分析阶段。用例图呈现了一些参与者,一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模。

用例之间的关系
(1)包含 (include) 关系
父用例包含子用例,父用例执行,子用例必然被执行
当两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例所共享。因为子用例被抽出,基用例并非一个完整的用例,所以include关系中的基用例必须和子用例一起使用才够完整,子用例也必然被执行。include关系在用例图中使用带箭头的虚线表示(在线上标注<>),箭头从基用例指向子用例。

(2)扩展(extend)关系
子用例扩展父用例,复用执行,子用例不一定执行
是对基用例的扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能。 extend关系在用例图中使用带箭头的虚线表示(在线上标注<>),箭头从子用例指向基用例。

图例:用户如果如期还书,则还书业务就结束了,如果超期了,才会有罚款的业务,罚款不是必须,所以是扩展关系。

类图

类图(Class diagram)展现了一组对象、接口、协作和它们之间的关系。类图是静态视图。
类图中包括:
(1)类
(2)接口
(3)协作
(4)依赖、泛化和关联关系

使用类图的场景:
(1)对系统的静态设计建模
(2)对简单的协作建模
(3)对逻辑数据库模式建模

类的分类:

(1) 实体类:实体类对应系统需求中的每个实体,它们通常需要保存在永久存储体中,一般使用数据库表或文件来记录,实体类既包括存储和传递数据的类,还包括操作数据的类。实体类来源于需求说明中的名词,如学生、商品等。

(2) 控制类:控制类用于体现应用程序的执行逻辑,提供相应的业务操作,将控制类抽象出来可以降低界面和数据库之间的耦合度。控制类用于对一个或几个用例所特有的控制行为进行建模。控制对象(控制类的实例)通常控制其他对象,因此它们的行为具有协调性质。控制类将用例的特有行为进行封装

(3) 边界类:边界类用于对外部用户与系统之间的交互对象进行抽象,主要包括界面类,如对话框、窗口、菜单等。

类图中的关系:

  • 依赖(Dependency)


是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖。可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。

  • 泛化(Generalization)

也就是继承关系的反关系,用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。在UML中,泛化关系用带空心三角形的直线来表示。
子类继承自父类,父类是子类的泛化。

  • 关联(Association)

是一种拥有的关系, 它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子。
关联是类之间的结构关系,它描述了一组链,链是对象之间的连接。两个类之间可以有多个由不同角色标识的关联。关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

(1) 双向关联。默认情况下,关联是双向的。

(2) 单向关联
(3)自关联
(4)多重关联

  • 聚合(Aggregation)


    聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享在UML中,聚合关系用带空心菱形的直线表示。例如:汽车发动机(Engine)是汽车(Car)的组成部分,但是汽车发动机可以独立存在,因此,汽车和发动机是聚合关系,如图所示

  • 组合(Composition)

组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。在UML中,组合关系用带实心菱形的直线表示。

  • 实现(Realization)

是用来规定接口和实现接口的类或者构建结构的关系,接口是操作的集合,而这些操作就用于规定类或者构建的一种服务。
接口之间也可以有与类之间关系类似的继承关系和依赖关系,但是接口和类之间还存在一种实现关系(Realization),在这种关系中,类实现了接口,类中的操作实现了接口中所 声明的操作。在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。例如:定义了一个交通工具接口Vehicle,包含一个抽象操作move(),在类Ship和类Car中都实现了该move()操作,不过具体的实现细节将会不一样,如图所示:

对象图

对象图(ObjectDiagram) 展现了某一时刻一组对象以及它们之间的关系,描述了在类图中所建立的事物的实例的静态快照。

交互图

交互图表现为序列图、通信图、交互概览图和计时图。用于动态建模。

序列图

序列图强调消息时间顺序的交互

通信图

通信图(协作图)强调接收和发送信息的对象的结构组织的交互
对象:图中的矩形元素即为对象,其中冒号前面部分为对象名,后面为类名,表示类的一个实例。
链接:用两个对象之间的单一线条表示,用来在通信图中关联对象,目的是让消息在不同系统对象之间传递。可以理解链接是公路,消息是车。
消息:通信图中对象之间通信的方式。


交互概览图

交互概览图强调控制流的交互图

计时图

计时图适合嵌入式系统建模的交互图

状态图

用来描述一个特定的对象所有可能的状态,以及由于各种事件的发生而引起的状态之间的转移和变化。用于对系统的动态方面建模。

活动图

将进程或其他计算的结构展示为计算内部一步步的控制流和数据流,主要用来描述系统的动态视图。活动图在本质上是一种流程图。活动图着重表现从一个活动到另一个活动的控制流,是内部处理驱动的流程。
活动图主要描述行为的动作,
状态图主要描述行为的结果。


构件图

使用构件图的思想是复用。就像是我们盖房子,当房子的大体框架建好之后,剩下的门和窗户家具之类的直接拿来安装上即可,不需要再从新制作,直接拿来复用的思想。这些门和窗户就相当于一个个的构件。
构件有一下几种类型:
(1)部署构件:dll文件、exe文件、com+对象、CORBA对象、EJB、动态Web页和数据库表等。
(2)工作产品构件:源代码文件、数据文件等
(3)执行构件:系统执行后得到的构件。

部署图

表示系统中软件和硬件的物理架构。
从部署图中,可以了解到软件和硬件组件之间的物理关系以及处理节点的组件分布情况。使用部署图可以显示运行时系统的结构,同时还传达构成应用程序的硬件和软件元素的配置和部署方式。

包图

在 UML 中用类似于文件夹的符号表示的模型元素的组合。包图是一种维护和描述系统总体结构的模型的重要建模工具,通过对包中各个包以及包之间关系的描述,展现出系统的模块与模块之间的依赖关系。
包图的作用:包图可以描述需求,设计的高阶概况;包图通过合理规划自身功能反应系统的高层架构,在逻辑上将系统进行模块化分解;包图最终是组织源码的方式。
一个包图可以由任何一种UML图组成,通常是UML用例图或是UML类图。
包被描述成文件夹,可以用于UML任何一种的图上。
包图只是把某些类放在一个包中,因此可以看做是类图的一种。

一次搞懂建模语言UML的更多相关文章

  1. 2017.12.23 第二章 统一建模语言UML概述

    第二章 统一建模语言UML概述 (1)为什么要建模 模型是某个事物的抽象,其目的是在构建这个事物之前先来理解它,因为模型忽略了那些非本质的细节,这样有利于更好的理解和表示事物: 在软件系统开发之前首先 ...

  2. 建模语言UML

    建模语言UML Unified Modeling Language (UML)又称统一建模语言或标准建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持, ...

  3. 统一建模语言UML

    目录 1. UML定义 2. UML结构 2.1 视图(View) 2.2 图(Diagram) 2.3 模型元素(Model element) 2.4 通用机制(General mechanism) ...

  4. 【转】一文搞懂C语言回调函数

    转:https://segmentfault.com/a/1190000008293902?utm_source=tag-newest 什么是回调函数 我们先来看看百度百科是如何定义回调函数的: 回调 ...

  5. 设计模式——统一建模语言UML

    目录 一.UML的结构 1.1视图 1.2图 1.3模型元素 二.类图 2.1类与类图 2.2类之间的关系 三.序列图 3.1序列图定义 3.2序列图组成元素与绘制 四.状态图 4.1状态图定义 4. ...

  6. 014.统一建模语言UML

    1.UML 的设计目的 UML是为了简化和强化现有的大量面向对象开发方法这一目的而开发的. UML 适用于各种软件开发方法.软件生命周期的各个阶段.各种应用领域以及各种开发工具,是一种总结了以往建模技 ...

  7. Atitit.软件的建模种类and 建模语言选型and UML???

    Atitit.软件的建模种类and  建模语言选型and UML??? 1. 4大的建模种类:ui建模,业务流程建模 , 业务对象建模, 数据库建模 1 2. 文本还是图片化(推荐)的建模 1 3.  ...

  8. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  9. 技术人应该学习的行话--UML统一建模语言

    新生代码农如何在硝烟弥漫的商业丛林中生存和崛起? 洞见,让一部分先遇见未来. 最近公司技术部在组织架构师培训,有幸参与.导师老刘特别推荐了UML语言的学习.回想多年来,自己习惯做一些流程图,框图或者所 ...

随机推荐

  1. java并发编程(四)----(JUC)Lock锁初探

    首先我们来回忆一下上一节讲过的synchronized关键字,该关键字用于给代码段或方法加锁,使得某一时刻它修饰的方法或代码段只能被一个线程访问.那么试想,当我们遇到这样的情况:当synchroniz ...

  2. QT动画时间轴控制 QTimeLine

    QTimeLine类提供用于控制动画的时间轴 比如控制进度条的增长,图片,窗口的旋转,平移等等 QTimeLine有一个frameChanged(int)信号 当调用QTimeLine::start( ...

  3. Powered by .NET Core 进展:第5次发布尝试(Windows部署)

    (图注:Windows 自带的性能监控,红色表示 CPU 占用,绿色表示 QPS) 今天中午 12:30 左右,我们进行了 .NET Core 博客站点的第5次发布(页脚会显示"Powere ...

  4. Java请求Http

    一.工具类,直接粘贴调用即可 package cn.com.service.httpReq; import java.io.BufferedReader;import java.io.IOExcept ...

  5. java 线程池newFixedThreadPool

    工作中遇到一个这样的情况,List中的元素要每个遍历出来,然后作为参数传给后面通过spark做数据处理,元素太多,一个一个的遍历速度太慢,于是考虑使用多线程,代码如下:(已删除部分代码) 想了解更多线 ...

  6. .net测试篇之测试神器Autofixture在几个复杂场景下的使用示例以及与Moq结合

    系列目录 为String指定一个值. 在第三节里我们讲了如何使用自定义配置加上一个自定义算法生成一个自定义字符串,然而有些时候我们仅仅是需要某个字段是有意义的,这个时候随便生成的字符串也满足不了我们的 ...

  7. Ubuntu 18.04 下载地址

    http://mirrors.163.com/ubuntu-releases/18.04/

  8. unity_实用小技巧(const)

    const:声明某个常量字段或常量局部变量. 注意:常量字段和常量局部变量不是变量并且不能修改 利用const管理游戏标签 例如: //管理所有标签    public const string Pl ...

  9. Azure DevOps vsts-agent-linux 安装出错, Must not run with sudo

    在linux安装 vsts-agent-linux 在vsts-agent-linux的解压目录运行./config.sh, 提示"Must not run with sudo", ...

  10. 分清<url-pattern>/</url-pattern>与<url-pattern>/*</url-pattern>的不同

    在写springMVC配置web.xml的时候会碰到下面有时候写/,有的时候又写/: 那么这两者有什么区别呢?我现在进行一些讲解: 1.当配置<url-pattern>/</url- ...