前言

现在,很少有人和90年代一样,自己去实现一个软件的各个方面,也就是说,在工作中,和人沟通是必备的技能。那么,作为一枚码农,如何和他人沟通呢?这就要依靠本文的主题了——UML。

简介

UML——Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果。UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等。

UML分类

1.用例图

2.静态结构图:

  • 类图(最重要)
  • 对象图
  • 包图
  • 组件图
  • 部署图

    3.动态结构图

  • 交互图(时序图与协作图)
  • 状态图
  • 活动图

UML软件

UML的绘制软件有很多,可以参见: https://www.zhihu.com/question/20144020 。笔者使用过两种UML插件:AmaterasUML 和 PlantUML,个人推荐使用PlantUML,能够以编码的方式来绘制UML。官方教程:http://plantuml.com/zh/

UML类图

在本文中,我们只要讲述类图的相关知识。

定义

用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系

类之间的关系

依赖、泛化(继承)、实现、关联、聚合与组合

类图——依赖关系(Dependence)

所谓依赖,比如A类中用到了B类,那么我们就说A类依赖B类。

再来一个详细一点的例子:

总结

  • 类中用到了对方
  • 是类的成员变量
  • 是类的方法的返回值
  • 是类的方法的参数
  • 方法中用到

    类图——泛化关系(generalization)

    泛化关系就是继承关系,是依赖关系的一种。绘图的时候注意:子类指向基类。

小结

泛化关系实际上就是继承关系。
如果A类继承了B类,我们就说A和B存在泛化关系。
----------------------------------------------------------------------

类图——实现关系(Implementation)

实现关系实际上就是A类实现B接口, 他是依赖关系的特例

----------------------------------------------------------------------

类图——关联关系(Association)

关联关系就是依赖关系的一种特例,讲的主要是类和类的联系。

关联关系具有导航性:即单向关系还是双向关系。

关联关系具有多重性:如“1”(表示有且仅有一个),“0...”(表示0个或者多个),“0, 1”(表示0个或者一个),“n...m”(表示n到 m个都可以),“m...*”(表示至少m个)。

----------------------------------------------------------------------

类图——聚合关系(Aggregation)

聚合关系表示的是整体和部分的关系, 整体与部分可以分开。 聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。如:一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成;组成电脑的各个配件是可以从电脑上分离出来的, 使用带空心菱形的实线来表示:

---------------------------------------------------------------------

类图——组合关系(Composition)

组合关系同样是表示整体和部分的关系,不过,和聚合关系不同的是:整体和局部不可分开。比如一个人Person和他的头Head以及身份证IDCard的关系:Person和Head的关系就是组合,Person和IDCard的关系就是聚合。

但是,当我们删除一个人Person的时候要求同时删除对应的IDCard(级联删除),我们就可以把他们看作是组合关系了。

DesignPattern系列__08UML相关知识的更多相关文章

  1. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  2. 【转】java NIO 相关知识

    原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...

  3. [转帖]xserver相关知识汇总

    xserver相关知识汇总 https://blog.csdn.net/QTVLC/article/details/81739984   本文主要是从以下几个方面介绍xorg-xserver 相关的知 ...

  4. repaint和reflow的相关知识

    一个页面由两部分组成: DOM:描述该页面的结构 render渲染:描述 DOM 节点 (nodes) 在页面上如何呈现 repaint重绘: 当 DOM 元素的属性发生变化 (如 color) 时, ...

  5. Golang(十)TLS 相关知识(一)基本概念原理

    0. 前言 最近参与一个基于 BitTorrent 协议的 Docker 镜像分发加速插件的开发,主要参与补充 https 协议 学习了 TLS 相关知识,下面对之前的学习做一下简单总结 参考文献:T ...

  6. 移动WEB像素相关知识

    了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...

  7. listener监听器的相关知识

    从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...

  8. UIViewController相关知识

    title: UIViewController 相关知识date: 2015-12-13 11:50categories: IOS tags: UIViewController 小小程序猿我的博客:h ...

  9. NSString使用stringWithFormat拼接的相关知识

    NSString使用stringWithFormat拼接的相关知识 保留2位小数点 1 2 3 4 //.2代表小数点后面保留2位(2代表保留的数量) NSString *string = [NSSt ...

随机推荐

  1. ABP开发框架前后端开发系列---(14)基于Winform的ABP快速开发框架

    前面介绍了很多ABP系列的文章,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机构.用户.角色.权限.菜单等内 ...

  2. WPF TreeView 虚拟化-设置滚动到选中项

    前言 列表滚动到具体的数据项? ListBox提供了简易快捷的滚动定位函数ScrollIntoView. TreeView树状结构列表,则没有此类方法,无法与ListBox一样,直接设置滚动到具体的数 ...

  3. 用两种以上的 方式实现一个方法或者对象,调用时打印"你好xx",已定义的代码不能做修改,自己编译的不能出现"你好"? (Javasctript)

    先上代码 const obj = { say(){ Array.from(arguments).forEach(item=>{ console.log(`${this.str} ${item}` ...

  4. 30-学容器必须懂 bridge 网络

    Docker 安装时会创建一个 命名为 docker0 的 linux bridge.如果不指定--network,创建的容器默认都会挂到 docker0 上. apt-get install bri ...

  5. 使用 vs code 创建 Django 项目

    操作流程: 1.前期准备工作 2.vs code配置Python环境 3.新建 Django 项目 4.vs code 配置 Debug Django 环境 5.浏览器查看效果 1.前期准备工作 安装 ...

  6. 如何通过RMAN使用传输表空间迁移到不同的Endian平台 (Doc ID 371556.1)

    How to Migrate to different Endian Platform Using Transportable Tablespaces With RMAN (Doc ID 371556 ...

  7. Checklist for an RMAN Restore (Doc ID 1554636.1)

    Checklist for an RMAN Restore (Doc ID 1554636.1) APPLIES TO: Oracle Database - Enterprise Edition - ...

  8. Java基础之IO技术(一)

    ---恢复内容开始--- Java基础中的IO技术可谓是非常重要,俗话说的好,万丈高楼起于垒土之间.所以学习Java一定要把基础学好,今天我们来学习IO技术的基础. IO无非就是输入与输出,而其中处理 ...

  9. 【转载】C++:switch红色下划线,Error:控制传输跳过的实例化解决办法

    转载链接:https://blog.csdn.net/figoleon/article/details/50072029

  10. 201871010113-刘兴瑞《面向对象程序设计(java)》第十四周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...