轻松理解UML用例图时序图类图的教程

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

转载于:https://www.cnblogs.com/zhangfengshi/p/10181599.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Winodows Phone 7控件详解]控件拾遗

1.Panorama控件和Pivot控件前面讲过,没有必要再重复一遍了。参见我的博文:http://www.cnblogs.com/DebugLZQ/archive/2012/03/19/2406284.html 2.DeepZoom DeepZoom 是silverlight的特色功能之一,也同样被加到了windows phone 7中来。这个功能…

这个工具替代Notepad++,我很满意

用过notepad的人并且还一直坚持使用它的人一定觉得它是一个非常优秀的软件,这个软件用来看日志,看代码和文档非常方便,而且里面还集成了一个HEX分析的工具,当然还有列模式等等。不吹牛啊,很多软件只做到了功能&#xf…

Kubectl 部署有状态应用(下)

接上文 《Kubectl 部署有状态应用(上)》创建完StatefulSet后,本文继续介绍StatefulSet 扩展、更新、删除等内容。 StatefulSet 中的 Pod 验证序数索引和稳定的网络身份 StatefulSet 中的 Pod 具有唯一的序数索引和稳定的网络身份。 查看 …

收集的50家国产MCU信息

全球MCU市场多为欧美、日本和台湾地区企业占据,仅欧企恩智浦、美企Microchip、美企ST、欧企英飞凌就占据超80%的份额,TI、Nuvoton、罗姆、三星、东芝五家企业占据11.4%,而中国大陆企业所占份额6.5%不到。这意味着,留给中国本土供应…

Silverlight实用窍门系列:63.Silverlight中的Command,自定义简单Command

在Silverlight中的MVVM模式下将前台页面和ViewModel界面交互分离开是通过本节所要讲述的Command实现的。我们自定义一个Command需要继承于ICommand接口并且实现这个接口。它有CanExecute()、Execute()方法和CanExecuteChanged事件组成。 CanExecute():判断是否继续执…

赋值运算符和拷贝构造函数的区别与联系

转载:http://blog.csdn.net/hebbely/article/details/65437510 简述: C中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法。拷贝构造函数使用已有的对象创建一个新的对象,赋值运…

硬件有没有35岁危机?

大家好,我篇文章是我的朋友记得诚写的,分享给大家!35岁危机指的是,很多企业停止招聘35岁及以上的员工,甚至会裁掉年纪大的人。我们经常说程序员,说互联网从业者有35岁危机。这个危机一方面是自己的焦虑&…

强大的独立日期选择器(date picker)插件 - Kalendae

日期:2012-4-16 来源:GBin1.com 在线演示 本地下载 今天分享一个独立的日期选择插件Kalendae,Kalendae是 一个强大健壮的独立日期选择器。如果你不想使用重量的jQuery UI类库的话,这个插件肯定是一个不错的备选。Kalendae包含了…

35家名企嵌入式/软件秋招岗位等你来!

大家好,我是写代码的篮球球痴。前两天一个小伙伴在微信让我帮忙推荐嵌入式招聘岗位。我实话实说,是有认识的人让我推荐简历的,但是相对于专业的招聘网站,我手里能拿出来的岗位实在是少之又少,专业的招聘网站会对不同的…

尝试梳理下ARM处理器的发展历史

大家好,这篇文章是我的朋友Michael Yao写的,我觉得非常不错,分享给大家。1. 前言本文尝试简单梳理下ARM处理器的发展历史、架构的演进,包括不同处理器的应用方向,但我们重点还是围绕Cortex-A系列展开,也会介…

linux下的CPU、内存、IO、网络的压力测试

一、对CPU进行简单测试: 1、通过bc命令计算特别函数 例:计算圆周率 echo "scale5000; 4*a(1)" | bc -l -q MATH LIBRARY If bc is invoked with the -l option, a math library is preloaded and the default scale is set to 20.…

给你这张图,你能搜索到来历吗

如果我们想让搜索引擎帮我们找到这张图的来历,可能吗? 这是目前搜索引擎做不到的。如果能做到呢? 转载于:https://www.cnblogs.com/shangge/archive/2008/07/23/1249767.html

晚上读内核代码

最近因为要解决一个bug,需要在内核的f_hid.c里面做一些适配,需要把这部分代码研究透彻。在这几天之前我是根本不知道什么是In端点,Out端点,以及什么是endpoint 0的,而且最近的一段时间,我一直是在写应用方面…

Linux进程调度与性能优化 | 真货

作者简介:张毅峰,某主机厂架构师。一、eBPF安全可观测性的前景展望本次分享将从监控和可观测性、eBPF安全可观测性分析、内核安全可观测性展望三个方面展开。1.监控(Monitoring)vs可观测性(Observability)从上图可以看到,监控只是可观测性的冰…

教师生涯由此开始

招聘会时间:2012-03-28 09:00 招聘会地址:就业办507 为加强教师队伍建设,建设教育强县,经研究,我县决定面向全国“985”、“211”工程高等师范院校应届毕业生选聘普通高中和初中教师38名。现将有关事项公告如下&#x…

二叉树前序、中序、后序遍历非递归写法的透彻解析

前言 在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的非递归写法最简单,后序…

深夜看代码2

昨天的文章晚上读内核代码有人评论说好像说了一些什么,好像又没有说什么,所以我到底是在说什么呢?因为今天已经把内核修改好了,自己也测试了,所以这次好好说下,我到底是说了什么,又做了什么。—…

F#学习之路(2) 深刻理解函数(上)

函数在函数式编程语言中是一等公民,是函数式语言中最重要的基本组成元素,也是其名称的由来。 F# 中的函数之如C#中的类,是组织程序结构的最基本单元。是命令式编程语言中函数或OO编程语言中方法的超集。超集,有多强大&#xff1f…

C++ 线程安全的单例模式

转载:https://www.cnblogs.com/ccdev/archive/2012/12/19/2825355.html 废话不多说,常用的代码积淀下来。 一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。 需要用锁,来保证其…