引言

UML图有很多种,但是并非必须掌握所有的UML图,才能完整系统分析和设计工作。一般说来,在UML图中,只要掌握类图、用例图、时序图的使用,就能完成大部分的工作。也就是说,掌握UML的20%,就能做80%的事情。对于程序员来说,最频繁使用的莫过于类图

这里也不会将UML的所有元素都提到,我会在学习过程中逐步整理更新用到的UML图形

文章目录

  • 一、UML基础
    • UML介绍
    • UML分类
  • 二、UML类图学习
    • 在UML类图中表示一个具体类
    • 在UML类图中表示抽象类
    • 在UML类图中表示接口
    • 在UML类图中表示包
    • 在类图中表示关系
      • 实现关系
      • 泛化关系
      • 关联关系
      • 依赖关系
      • 聚合关系与组合关系

一、UML基础

UML介绍

  • UML这三个字母的全称是Unified Modeling Language,翻译就是统一建模语言,是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果

  • UML 本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等

UML分类

结构型UML

  • 类图(常用):用来分析业务概念
  • 对象图(基本不用)
  • 构件图
  • 部署图

构件图、部署图用来分析IT基础架构、软件架构等方面的需求。

  • 包图(基本不用)

行为型UML

活动图、状态机图、顺序图,使用至少其中一种图来分析业务流程,大部分情况下至少会用到其中两种图

  • 活动图

  • 状态机图

  • 顺序图

  • 通信图(基本不用)

  • 用例图(常用)

  • 时序图

类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。类图中最基本的元素是类、接口。软件设计师设计出类图后,程序员就可以用代码实现类图中包含的内容

二、UML类图学习

我只想讲讲类图中各个类之间的关系; 能看懂类图中各个类之间的线条、箭头代表什么意思后,也就足够应对日常的工作和交流;同时,我们应该能将类图所表达的含义和最终的代码对应起来;

在UML类图中表示一个具体类

具体类在类图中用矩形框表示,矩形框分为三层:第一层是类名字。第二层是类的成员变量;第三层是类的方法。成员变量以及方法前的访问修饰符用符号来表示:

  • + 表示 public
  • - 表示 private
  • # 表示 protected
  • 不带符号表示 default

在UML类图中表示抽象类

抽象类在UML类图中同样用矩形框表示,但是抽象类的类名以及抽象方法的名字都用斜体字表示

在UML类图中表示接口

接口在类图中也是用矩形框表示,但是与类的表示法不同的是,接口在类图中的第一层顶端用构造型 <>表示,下面是接口的名字,第二层是方法,如图3所示。此外,接口还有另一种表示法,俗称棒棒糖表示法,就是类上面的一根棒棒糖(圆圈+实线)。圆圈旁为接口名称,接口方法在实现类中出现

在UML类图中表示包

在类图中表示关系

接口与类的关系

  • 实现关系

类与类的关系

  • 泛化关系
  • 关联关系
    • 聚合关系
    • 依赖关系
    • 组合关系

实现关系

实现关系是指接口及其实现类之间的关系。在UML类图中,实现关系用空心三角和虚线组成的箭头来表示,从实现类指向接口。

在Java代码中,实现关系可以直接翻译为关键字 implements

泛化关系

在UML类图中,泛化关系用空心三角和实线组成的箭头表示,从子类指向父类,如图8所示。在Java代码中,对象之间的泛化关系可以直接翻译为关键字 extends

关联关系

关联关系(Association)是指对象和对象之间的连接,它使一个对象知道另一个对象的属性和方法。在Java中,关联关系的代码表现形式为一个对象含有另一个对象的引用。也就是说,如果一个对象的类代码中,包含有另一个对象的引用,那么这两个对象之间就是关联关系

关联关系有单向关联和双向关联。如果两个对象都知道(即可以调用)对方的公共属性和操作,那么二者就是双向关联。如果只有一个对象知道(即可以调用)另一个对象的公共属性和操作,那么就是单向关联。大多数关联都是单向关联,单向关联关系更容易建立和维护,有助于寻找可重用的类

在UML图中,双向关联关系用带双箭头的实线或者无箭头的实线双线表示。单向关联用一个带箭头的实线表示,箭头指向被关联的对象,这就是导航性(Navigatity)

一个对象可以持有其它对象的数组或者集合。在UML中,通过放置多重性(multipicity)表达式在关联线的末端来表示。多重性表达式可以是一个数字、一段范围或者是它们的组合。多重性允许的表达式示例如下:

  • 数字:精确的数量
  • *或者0..*:表示0到多个
  • 0..1:表示0或者1个,在Java中经常用一个空引用来实现
  • 1..*:表示1到多个

关联关系又分为依赖关联、聚合关联和组合关联三种类型。

依赖关系

依赖(Dependency)关系是一种弱关联关系。如果对象A用到对象B,但是和B的关系不是太明显的时候,就可以把这种关系看作是依赖关系。如果对象A依赖于对象B,则 A “use a” B。比如驾驶员和汽车的关系,驾驶员使用汽车,二者之间就是依赖关系。

在UML类图中,依赖关系用一个带虚线的箭头表示,由使用方指向被使用方,表示使用方对象持有被使用方对象的引用

聚合关系与组合关系

聚合(Aggregation)是关联关系的一种特例,它体现的是整体与部分的拥有关系,即 “has a” 的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,所以聚合关系也常称为共享关系。例如,公司部门与员工的关系,一个员工可以属于多个部门,一个部门撤消了,员工可以转到其它部门。

在UML图中,聚合关系用空心菱形加实线箭头表示,空心菱形在整体一方,箭头指向部分一方

UML概述及UML类图详解相关推荐

  1. UML(Unified Modeling Language)统一建模语言--类图详解

    UML(Unified Modeling Language)统一建模语言--类图详解   2010-05-12 作者:fenglin1985 来源:fenglin1985的blog   类图是面向对象 ...

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

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

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

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

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

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

  5. idea uml图各符号含义_java利器之UML类图详解(IDEA)

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

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

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

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

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

  8. Java利器之UML类图详解

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

  9. 00 C++ UML类图详解

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

最新文章

  1. python保存大列表(list)数据到文件并后续重新加载为列表(list)对象实战
  2. Django连接mysql数据库
  3. mysql55w.x86 64 卸载_Cent6.5 64位yum安装mysql5.5
  4. poj 2288(状态压缩dp + TSP问题)
  5. Python——基于OpenCV获取倾斜子图的一种方法
  6. 如果没有,那么就去创造
  7. ADBannerView 的基本使用方法
  8. VARCHART XGantt 应用程序支持简介
  9. Flutter 添加页面渲染完毕回调
  10. Android仿qq邮箱账号邮件账号输入框交互
  11. 模具设计分型的10大原则
  12. c#语言定义文档pdf,C#如何更改Word的语言设置.pdf
  13. 【Proteus仿真】Arduino+uln2003驱动步进电机+单按键启保停正反转控制
  14. CPT208 人机设计 笔记
  15. Springboot项目搭建有ftpClientPool的Ftp工具类
  16. 神经网络方法研究及应用,神经网络基础与应用
  17. 面试-Java【之】(revers)递归实现字符串倒序排列(详解)
  18. 方法----解决win10笔记本电脑连接电源无法休眠只是黑屏,使用电池可以正常休眠。
  19. 【Web技术】1176- 前端模块依赖关系分析与应用
  20. QT 基于 百度云语音识别, 基于网易API 接口的歌曲查询,的音乐播放器。

热门文章

  1. ios开发怎么接入面容id_Flutter混合开发
  2. 人工鱼群算法python_蚁群算法、免疫优化算法、鱼群算法 Python 库
  3. excel冻结窗口_猴哥讲述:excel工作表的窗口进行拆分与冻结——固定与解冻窗口...
  4. java serializable用法_Serializable序列化用法
  5. 留言板系统的设计与实现_kaic
  6. linex下设置环境变量的命令
  7. 佳能Linux230快门速度怎么调,80d快门速度怎么调
  8. python制作小人,[Python设计模式] 第13章 造小人——建造者模式
  9. cin,cin.get(),cin.getline(),getline(),fget()
  10. suse linux怎么卸载软件,SUSE Linux 10的卸载