绘制UML各种图详解「建议收藏」

绘制UML各种图详解「建议收藏」来源:http://blog.csdn.net/shift_wwx/article/details/79205187一、前言在软件开发过程中会经常整理文档,不是所有的信息都可以通过文字来表达,而换成图之后会更加的直观、有效,其中频繁使用的就是UML图。结合自己实践总结一下,希望对大家都能有所帮助。本文中的UML图都是用visio绘制,sourcecode展示是Ja…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

来源:绘制UML各种图详解_私房菜-CSDN博客_uml图

一、前言

在软件开发过程中会经常整理文档,不是所有的信息都可以通过文字来表达,而换成图之后会更加的直观、有效,其中频繁使用的就是UML图。结合自己实践总结一下,希望对大家都能有所帮助。

本文中的UML图都是用visio 绘制,source code展示是Java 语言。

二、UML简介

Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。 面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。

UML图包括两个范畴:结构图和行为图。

结构图的目的是显示建模系统的静态结构。它包括类、组件和对象。例如UML静态结构图。

行为图的目的是显示系统中对象的动态行为。它包括对象的方法、协作和活动之类的内容。例如UML示例图、UML活动图、UML序列图。

三、UML类图

通过UML类图可以将类之间的所有关系(泛化、实现、关联、聚合、组合、依赖)都能具体的体现出来。

1、类图的表示

类的 UML 表示是一个长方形,垂直地分为三个区,如下图所示。顶部区域显示类的名字。中间的区域列出类的属性。底部的区域列出类的操作。在一个类图上画一个类元素时,你必须要有顶端的区域,下面的二个区域是可选择的(当图描述仅仅用于显示分类器间关系的高层细节时,下面的两个区域是不必要的)。

绘制UML各种图详解「建议收藏」

顶端是类名,中间列出的是类的属性。底部列出的是类的操作。在绘制类图的时候,顶端部分是必须的,其他两个部分可选。

类名:如果是抽象类,采用斜体

类属性列表:可见性 + 属性名 + 冒号 + 属性类型 + (等号 + 默认值)

属性的可见性下面会说明;属性的类型看属性而定,可以是int,可以是boolean;有的属性可能会有默认值,在类型之后加等号和默认值。

类方法列表:可见性 + 函数名 + (参数列表) + 冒号 + 返回值类型

可见性:

标志 可见性类型
+ public
private
# protected
~ package

2、继承的表示

为了在一个类图上建模继承,从子类(要继承行为的类)拉出一条闭合的单键头(或三角形)的实线指向超类。

绘制UML各种图详解「建议收藏」

ViewGroup 和 方法onLayout 用的是斜体,说明ViewGroup 是抽象类,方法onLayout 是抽象的。

3、接口的表示

一个类和一个接口不同:一个类可以有它形态的真实实例,然而一个接口必须至少有一个类来实现它。在 UML 中,一个接口被认为是类建模元素的特殊化。因此,接口就象类那样绘制,但是长方形的顶部区域也有文本“interface”。

绘制UML各种图详解「建议收藏」

对于接口,如果用<< 和 >>将字符串interface包起来,表示这是个接口类。并且用虚线带三角形的箭头从实现类指向Interface 类。

4、关联的表示

(1)双向关联

在两个类之间用实线连接,表示两个类彼此都知道它们之间的联系。

绘制UML各种图详解「建议收藏」

在实线的上端写上关联关系,例如 has;在实线的下端写上可能的多重值,多重值表示如下:

表示 含义
0..1 0个或者1个
1 只能1个
0..* 0个或者多个
* 0个或者多个
1..* 1个或者多个
3 只能3个
0..3 0至3个
3..13 3至13个

(2)单向关联

单向关联是用一个实线带一个开放的箭头,表示一端知道箭头指向的另一端。

绘制UML各种图详解「建议收藏」

上图中View 中包含Canvas 类,而Canvas 中不需要包含View。

5、聚合的表示

聚合是一种特别类型的关联,用于描述“总体到局部”的关系。在基本的聚合关系中,部分类的生命周期独立于整体类的生命周期。用一个带空心的菱形的实线表示,菱形指向的是整体的类。

例如,汽车和轮子的关系:

绘制UML各种图详解「建议收藏」

聚合与单向关联的区别在于:单项的关联可能只是一个简单的“包含、引用”关系,关联和被关联类之间在逻辑概念上不一定有紧密的联系,而聚合则不同,它表示的是一种内在关系紧密,相互依存,相互包含的概念,其中的一部分是构成另外一部分的不可或缺的成分。

6、组合的表示

组合聚合关系是聚合关系的另一种形式,但是子类实例的生命周期依赖于父类实例的生命周期。

用一个带实心的菱形的实线表示,菱形指向的是整体的类。

组合跟聚合有很大的不同,聚合的部分的生命周期独立于整体,整体结束那不影响部分。而组合是部分的生命周期依赖与整体,整体结束,部分没有必要存在。就想公司和部分,公司都不存在了,那部门就没有存在的必要了,解散了算。

同样用View 为例:

绘制UML各种图详解「建议收藏」

其中的DeclaredOnclickListener 类是View的一部分,而且是依赖View的生命周期。

7、依赖的表示

依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系,大多数情况下依赖关系体现在某个类的方法使用另一个类的对象作为参数。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。

依赖关系通常通过三种方式来实现:

  • 将一个类的对象作为另一个类中方法的参数
  • 在一个类的方法中将另一个类的对象作为其对象的局部变量
  • 在一个类的方法中调用另一个类的静态方法

关联关系、聚合、组合之间的区别:

关联关系跟突出的是has,只是has的关系,可以通过这一层关系调用到另一个对象中的某个方法。

聚合、组合更突出“整体-部分”的关系,不单单是“拥有”,部分类是构成整体类的一部分。

对于聚合、组合,区别就在于部分类的生命周期如何,如果部分类还可以独立存在,那属于聚合关系;如果部分类不能独立存在,那属于组合的关系。

 后话:

今天看到@fix_bugs 朋友的热心留言,还是很有感触了,技术是没有界限的,大家只有将好的东西分享出来,我们效率才会更高,技术才能更强大,祖国才会更强大。 因为viso license 的问题,我目前大部分用drawio,Flowchart Maker & Online Diagram Softwareicon-default.png?t=L892https://app.diagrams.net/ 推荐大家使用!! 大家有什么好的,也请不吝分享出来,感谢!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170296.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • maven私库nexus2.14.1迁移到nexus3.1

    maven私库nexus2.14.1迁移到nexus3.1maven私库nexus2.14.1迁移到nexus3.1(含安装教程),亲测可用

  • 线性代数行列式方程求解(正交矩阵的行列式)

    线性代数行列式求值算的可真是让人CPU疼,但计算机是不累的,所以用一个c++程序帮助你验证求解行列式的值吧。本文介绍了三种算法,虽然还没有完成–.–

  • linux使用ps命令查看和控制进程_ps grep 进程

    linux使用ps命令查看和控制进程_ps grep 进程ps命令Linuxps(英文全拼:processstatus)命令用于显示当前进程的状态,类似于windows的任务管理器查看所有进程ps-A显示所有进程信息,连同命令行ps-

  • 流水线设计方案_与流水线的形式相对的叫什么

    流水线设计方案_与流水线的形式相对的叫什么流水线设计是一种典型的面积换性能的设计。一方面通过对长功能路径的合理划分,在同一时间内同时并行多个该功能请求,大大提高了某个功能的吞吐率;另一方面由于长功能路径被切割成短路径,可以达到更高的工作频率,如果不需要提高工作频率,多出来的提频空间可以用于降压降功耗。流水线设计是完美的时间并行。因为流水线上每一级的处理都是一个时钟周期的延时,并且一动则全动,每一级的延时可以完美的掩盖起来,最高实现与流水级数相同数量的请求并行度。流水线实际上是将组合逻辑系统分割,然后在间隙插入寄存器,暂存中间数据。其思想就是要将

  • golang 2021最新激活码_通用破解码[通俗易懂]

    golang 2021最新激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • kafka零拷贝原理_kafka常用命令

    kafka零拷贝原理_kafka常用命令Kafka除了具备消息队列MQ的特性和使用场景外,它还有一个重要用途,就是做存储层。用kafka做存储层,为什么呢?一大堆可以做数据存储的MySQL、MongoDB、HDFS……因为kafka数据是持久化磁盘的,还速度快;还可靠、支持分布式……啥!用了磁盘,还速度快!!!没错,kafka就是速度无敌,本文将探究kafka无敌性能背后的秘密。首先要有个概念,kafka高性能的背后,是多方面协同后、最终的结果,kafka从宏观架构、分布式partition存储、ISR数据同步、以及“无孔不

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号