摘自https://zhuanlan.zhihu.com/p/29874146

写在前面

当你老大扔给你这样的图,或者你需要完成某些功能而去看文档的时候发现以下类似这样的图会不会不(一)知(脸)所(懵)措(逼):

(图片来至wikipedia

(图片来至微信内网页支付时序图

(图片来至wikipedia

如果你看了都不会一脸懵逼,那么可以出门左转啦,这篇文章就是来说明这些图的意思,让你在工作交流中,或者在看一些文档,或者看我的一些关于设计模式的文章,甚至架构建模中,都能轻松理解,毫无压力!

用例图

刚刚我们看到的第一张图片就是用例图,用例图有以下几个东东:

  • 用例
  • 参与者
  • 关联
  • 系统边界

用例使用椭圆来表示,椭圆里边写上用例的名称:

参与者用一个小人儿,在小人儿下面写上参与者名称,例如学生:

关联用一条线儿表示:

把用例围起来,系统边界就用个矩形啦:

举个例子:

我们可以看到这个

系统叫做 「购物系统」 ; 有注册账号、登录系统、生成订单的用例(这里只列举几个用例,其它用例省略); 参与者有顾客和管理员; 顾客关联到了注册账号和登录系统的用例; 管理员关联到了登录系统和生成订单的用例!

时序图

时序图就是我们刚刚看到的第二个图,时序图有以下几个东东:

  • 对象
  • 生命线
  • 活动条
  • 消息
  • 控制流
    • 顺序
    • 分支
    • 循环

对象在矩形里边,左边是对象名称,右边是对象类型,下方还有一条线:

用虚线代表的是对象的生命线:

活动条是一个竖着的矩形,当接收到消息的时候,这个对象就会有活动条:

消息用一根箭头,箭头上面写上消息信息,例如一个登录方法 login(userName,passWord):

控制流有三种,普通就是按顺序的一个流程,还有分支就相当于if else:

矩形里边有一条虚线,左上角用ALT表示,当C为true的时候,就执行虚线上方的内容,当C为false的时候就执行虚线下方的内容。

循环控制流:

左上角有LOOP表示循环,当C为true的时候,就循环执行方框里边的内容!

举个时序图例子:

可以看到,每个对象都有它们的生命线(虚线);

  1. 一开始用户给类型为GUI(界面)的Login对象发送一个登录信息 「 login(userName,passWord)」 ;
  2. Login这个对象接收到了就会产生活动条,这时候Login这个界面会给类型为Controller的loginController发送登录信息「 login(userName,passWord)」 ;
  3. 此时loginController接收到信息产生活动条,这时候loginController去找类型为DB的UserDao,给它发送了一个获取用户密码的信息「getUserPassword(userName)」;
  4. UserDao接收到信息后产生活动条,返回用户的密码;
  5. 此时loginController接收到信息(用户的密码 userPassword),loginController此刻将信息发送给自己,通过verify去校验密码并且用result接收结果;
  6. 校验就产生了分支控制流,当resul为true的时候loginController会发送success给Login,当result为false的时候,loginController会发送failure给Login;
  7. 最后Login最后给用户发送messag信息。

好了,当你看到这里的时候,你就会发现,以后关于这类的时序图对你来说已经不在话下了。例如本文一开始的第二张图。

类图

类图有以下几个东东:

  • 类名
  • 属性
  • 方法
  • 可见性
  • 数据类型
  • 关联关系
  • 依赖关系
  • 继承/实现关系
  • 组合/聚合关系

类名、属性、方法在一个矩形中,分为上中下:

可见性:

  • private的时候在前方用 - 表示
  • public的时候在前方用 + 表示
  • protected的时候在前方用 # 表示

数据类型表示形式:

名字 : 类型

例如:

userName 和 passWord 这两个属性是protected修饰的,数据类型都是String; login() 和 register() 这两个方法是public修饰的,数据类型都是boolean;

关联关系,用实线表示,例如A关联B:

依赖关系,用虚线表示,例如A依赖B:

继承关系,用一个△ + 一条实线表示,例如A继承B:

依赖关系,用过一个△ + 一条虚线表示,例如A实现B:

组合关系,用一个 + 一条虚线表示,例如A组合B:

聚合关系,用一个 ◇ + 一条虚线表示,例如A组合B:

聚合:表示两个对象之间是整体和部分的弱关系,部分的生命周期可以超越整体。如电脑和鼠标。
组合:表示两个对象之间是整体和部分的强关系,部分的生命周期不能超越整体,或者说不能脱离整体而存在。组合关系的“部分”,是不能在整体之间进行共享的。

类图举例子:

可以看到,有User类,Customer类,Address类,Role类,Payment类,aliPay类,wechatPay类。

其中Customer 继承 User,User类的userName 和 passWord 这两个属性是protected修饰的,数据类型都是String; login() 和 register() 这两个方法是public修饰的,数据类型都是boolean;

Address和Role聚合User;

Customer依赖Payment;

aliPay 和 wechatPay 实现了 Payment!

以上,就是关于UML的用例图,时序图,类图!当然可以自己手动画几个试试,感觉挺不错哦,相信你在工作交流中,或者在看一些文档,或者看我的一些关于设计模式的文章,甚至架构建模中,都能轻松理解,毫无压力!

轻松理解UML用例图时序图类图的教程的更多相关文章

  1. 【UML】基本介绍与类图(依赖、泛化、实现、关联、聚合、组合关系)

    文章目录 UML基本介绍 UML图 UML类图 类图-依赖关系(Dependence) 类图-泛化关系(generalization) 类图-实现关系(Implementation) 类图-关联关系( ...

  2. UML从需求到实现---类图(2)

    上节写到了UML中的类图:UML从需求到实现---类图(1) 写完以后总觉得写的不够详细.里面很多细节没有说到.一篇文章就把强大的面向对象的类说完.当然是不可能的.这次我再补充一些关于UML中类图和类 ...

  3. UML从需求到实现---类图(1)

    上次写到了UML的包图,用例等:接上:UML从需求到实现---包图 按照UML中图的出现顺序.当做完包图以后.我们下一步要做的当然是类图,类图也是UML中的三大核心图之一. 看到很多文章在描述类图的时 ...

  4. uml系列(四)——类图

    类图是uml的核心.学习类图,总共须要掌握三个部分:类:类之间的关系:类图怎么画. 首先,类.老规矩,先来张图. 类是什么:举个简单的样例:猫.狗.猪三个都是动物.这里面的"动物" ...

  5. UML学习(二)-----类图

    UML学习(二)-----类图 http://www.cnblogs.com/silent2012/archive/2011/09/07/2169946.html http://www.cnblogs ...

  6. ****** 五十 ******、软设笔记【UML分析和意义】-类图、对象图、状态图、活动图、顺序图、协作图、构件图、部署图,动静态模式

    一.类图(Class Diagram) 描述一组类.接口.协作已经它们之间的图,用来显示系统中各个类的静态结构图. 类之间的关系(relationship) *依赖(dependency) *泛化(g ...

  7. UML建模—EA创建Class(类图)

    1.新建类图 2.添加类或接口 在类图可以捕获系统-类-和模型组件的逻辑结构.它是一个静态模型,描述存在什么,有哪些属性和行为,而不管如何去做. 说明关系之间的类和接口; 泛化. 聚合和关联是在分别反 ...

  8. UML学习(一)类图和对象图

    对象是一个概念,一种抽象或者事物.对象能够是具有现实意义的事物,也能够是抽象的一个概念.比方,一家公司或者一个进程. 类是一组对象的集合或者抽象的概念.类具有同样的属性和方法. 介绍完基本对象和类的基 ...

  9. 浅谈UML中常用的几种图——类图

    在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composit ...

随机推荐

  1. Python正则表达式re.findall一个有趣的现象

    下面通过几个案例来分析一下, 注意:本节的parsematch函数请参考<妙用re.sub分析正则表达式解析匹配过程> 案例一: >>> re.findall(r&quo ...

  2. [BJDCTF 2nd]duangShell

    [BJDCTF 2nd]duangShell 点击进去之后提示我们swp源代码泄露,访问http://xxx/.index.php.swp下载该文件 该文件产生的原因是:​使用vi编辑器打开文件时,会 ...

  3. [BJDCTF 2nd]简单注入

    [BJDCTF 2nd]简单注入 hint.txt出现了内容. 大概意思和国赛一道题相同. username处注入\来转义单引号,password处使用sql语句整数型注入. 例如: 传入admin\ ...

  4. apache、nginx、Tomcat、IIS引擎解析漏洞

                                            引擎解析漏洞 常见的web容器有IIS.Apache.Nginx.Tomcat等,以下是详细讲解 IIS IIS简介 是 ...

  5. js- for in 循环 只有一个目的,遍历 对象,通过对象属性的个数 控制循环圈数

    for in 循环会返回 原型 以及原型链上面的属性,不会打印系统自带的属性 var obj ={  name:'suan',  sex :'male',  age:150,  height:185, ...

  6. java中的反射(三)

    目录 一.反射 1.class类 2.访问字段 3.调用方法 4.调用构造方法 5.获取继承对象 6.动态代理 二.sping中的反射 本篇转自:https://depp.wang/2020/05/0 ...

  7. 巨经典论文!推荐系统经典模型Wide & Deep

    今天我们剖析的也是推荐领域的经典论文,叫做Wide & Deep Learning for Recommender Systems.它发表于2016年,作者是Google App Store的 ...

  8. mock.js 和easy-mock使用

    mock.js 1.项目中引入mock.js <script src="../static/js/mock.js" type="text/javascript&qu ...

  9. 【题解】The Last Hole! [CF274C]

    [题解]The Last Hole! [CF274C] 传送门:\(\text{The Last Hole!}\) \(\text{[CF274C]}\) [题目描述] 给出平面上 \(n\) 个圆的 ...

  10. OpenWrt下基于OLSR的Ad-Hoc组网实现网络摄像头多节点访问

    文章目录 Ad-Hoc组网配置 摄像头端口映射 PC连接设置 结果 Ad-Hoc组网配置 参照博客 链接: link. 摄像头端口映射 这里使用到了海康网络摄像头,先将网络摄像头的网口连接到任意一个节 ...