来源:http://blog.csdn.net/shift_wwx/article/details/79205187

请转载的朋友标明出处,请支持原创!

0. 前言

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

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

1. UML简介

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

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

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

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

2. UML类图

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

2.1 类图的表示

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

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

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

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

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

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

可见性:

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

2.2 继承的表示

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

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

2.3 接口的表示

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

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

2.4 关联的表示

关联(Association)分两种表示方式:

(1)双向关联

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

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

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

(2)单向关联

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

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

2.5 聚合的表示

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

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

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

2.6 组合的表示

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

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

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

同样用View 为例:

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

2.7 依赖的表示

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

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

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

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

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

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

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

后话:

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

绘制UML各种图详解相关推荐

  1. java uml类图教程_Java利器之UML类图详解

    原标题:Java利器之UML类图详解 (点击上方公众号,可快速关注) 来源:伯乐在线专栏作者- Code4Android 如需转载,发送「转载」二字查看说明 前言 UML(Unified Modeli ...

  2. Java利器之UML类图详解

    前言 UML(Unified Modeling Language)中文统一建模语言,是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法.UML展现了 ...

  3. UML类图详解_泛化关系

    泛化其实就是继承关系,还是比较简单的,那么我们就把之前有些问题的博客UML类图重新来实现一次. 依旧是这个图 下面我们来看一个例子 Account.h 1 #include <cstdlib&g ...

  4. 软件设计-UML类图详解说明

    一. UML类图思维导图 二. 详细分析和介绍 下面就从上面的思维导图开始,详细的介绍UML类图! 1. 什么是UML,概念是什么? UML(Unified Modeling Language)中文统 ...

  5. Pyecharts一文速学-绘制桑基图详解+Python代码

    目录 前言 一.桑基图 二.Pyecharts绘制 1.数据处理 2.桑基图参数 1.class Sankey() 2.class SankeyLevelsOpts() 三.add()方法参数 1.s ...

  6. 00 C++ UML类图详解

    一.基本概念: 类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础.类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静态模型. 类 ...

  7. C++ UML类图详解

    文章目录 基本概念: 1. 泛化(Generalization) 2. 实现(Realization) 3. 关联(Association) 4. 聚合(Aggregation) 5. 组合(Comp ...

  8. 【Java】UML类图详解-详细易懂

    基本介绍 统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言.它的特点是简单.统一.图形化.能表达软件设计中的动态与静态信息. UML 从目标系统 ...

  9. UML概述及UML类图详解

    引言 UML图有很多种,但是并非必须掌握所有的UML图,才能完整系统分析和设计工作.一般说来,在UML图中,只要掌握类图.用例图.时序图的使用,就能完成大部分的工作.也就是说,掌握UML的20%,就能 ...

最新文章

  1. linux 常用命令:
  2. MySQL 5.6.26 Release Note解读
  3. Hibernate4一对一关系映射(共享主键方式)
  4. php 判定pc端與移動端
  5. python通讯录综合_Python通讯录作业
  6. [转载] Python的生成器
  7. 博纳影业IPO即将过会 阿里、腾讯均为股东
  8. prim算法 + 最小生成树的打印 C语言
  9. hql中获取前一天的数据_如何使用DNS和SQLi从数据库中获取数据样本
  10. Matter 协议,IoT 智能家居混乱时代的终结者
  11. MAC 设计师必备的设计绘图软件 推荐与下载
  12. Win7+vmware+xpsp3+vs2010驱动开发环境搭建及调试方法
  13. 卡西欧手机计算机软件,卡西欧5800计算器手机版app
  14. 裁剪好的视频如何去除黑边?
  15. 什么是VMWare虚拟机
  16. 注册表(安全 活动桌面)
  17. 2015年第四届C/C++ A组蓝桥杯省赛真题
  18. SAP UI5 应用开发教程之一百 - 如何修改 SAP UI5 框架的源代码实现,以及使用本地部署的 SAP UI5 SDK 试读版
  19. Android开发——实现数字时钟
  20. 弘辽科技:拼多多怎么提升访客量?有哪些方法?

热门文章

  1. 洛谷 - 一些好玩的问题 2
  2. 5G时代,App最重要的竞争力应该是什么?
  3. 永恒之蓝漏洞(EternalBlue)
  4. Metasploit-MS17-010(永恒之蓝 EternalBlue )复现
  5. latex画流程图例子详解,如何画转折线,运行不出来?
  6. 机器学习之时间序列模型
  7. 古筝的音律为什么没有4和7?
  8. DTO VO ENTITY概念以及应用的地方
  9. 本日14时《格子仙侠行》公测 仙界舆图年夜料想--国民网游戏
  10. Android设备管理器漏洞2--阻止用户取消激活设备管理器