一张图让你快速学会UML(聚合、组合、依赖、继承、接口、类)
有朋友反映,一上来直接讲设计模式就算理解了,也不知道如何画出类图,那么我们就通过一张图,来图解如何应用UML正确表示类与类之间的关系。

这张图完整讲述了鸟类的生存。
首先是类:在UML中,我们用分成三栏的长方形表示。第一栏是名称,第二栏是属性,第三栏是方法。
继承:唐老鸭属于鸭的一种,或者说是鸭的细化划分,而鸭属于鸟类,鸟类属于动物,这里无论表达成“是”还是属于,就是这样一个直观的关系。用实线一端带空心三角箭头表示。箭头指向父类。
依赖:凡是动物,生存都需要水和空气,这种必须的需求,我们称之为依赖关系。用虚线一端带箭头表示,箭头指向依赖物。
聚合、组合:这两个关系我们放在一起,因为她们看似十分的相似,但是却有着本质的区别。
很多大雁聚合在一起变成雁群,也可以说雁群里有雁,所以是整体和个体之间的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期。即雁群可以不存在了,但是孤雁仍然存在。
一只鸟由两个翅膀组合而成,即一只鸟有两个翅膀。虽然组合和聚合我们都说“有”什么,但是这个“有”是不同的,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,比如这只鸟死了,自然这两个翅膀也就不存在了。
关联:企鹅和气候有关联,关联是最常见的关系,表示类与类之间的联接, 它使一个类知道另一个类的属性和方法。关联有两个端点, 在每个端点可以有一个基数, 表示这个关联的类可以有几个实例.
常见的基数及含义: 0..1:0 或1 个实例.
0..*: 对实例的数目没有限制.
1: 只能有一个实例.
1..*: 至少有一个实例.
接口:最后就是接口了,接口有两栏组成,第一栏的顶端加上《interface》后下方写接口名称,第二栏是接口方法。接口有自己的表示方法“实现”,虚线一端带空心三角形。实际开发中,为了更好的实现"开-闭原则",一般都是定义接口,依赖于接口,依赖于抽象。
还有一个概念是——多态,图中没有出现。多态顾名思义就是有很多种形式。
bush.roar()
orang.roar()
donald.roar()
同样是一个roar消息,却因为不同的对象可产生完全不同的结果。
以上,就是通过一张图快速了解UML啦,图片via《大话设计模式》,如有不足,欢迎斧正!
一张图让你快速学会UML(聚合、组合、依赖、继承、接口、类)的更多相关文章
- UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)
UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ...
- 分分钟弄明白UML中泛化 , 实现 , 关联, 聚合, 组合, 依赖
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Compo ...
- 几分钟几张图教你学会如何使用UML
很多初次接触UML的朋友们可能会感觉它各种各样的线条.关系.描述等晦涩难懂.本篇文章简单介绍了一下其中几个图,用最朴实的语言结合上图片来让你一眼就能理解他们,如果您在阅读的过程种发现错误之处恳请您在评 ...
- (转)一张图学会Dockerfile
原文:http://blog.51cto.com/kusorz/1942816 前言 Dockerfile是非常容易学的,和SHELL相比那简单的太多了. Dockerfile是为快速构建docker ...
- 几张图帮你理解 docker 基本原理及快速入门
写的非常好的一篇文章,不知道为什么被删除了. 利用Google快照,做个存档. 快照地址:地址 作者地址:青牛 什么是docker Docker 是一个开源项目,诞生于 2013 年初,最初是 do ...
- 程序员有什么办法能快速梳理java知识点?有这八张图就够了
一图胜千言,下面图解均来自Program Creek 网站的Java教程,目前它们拥有最多的票选.如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟. 1.字符串不变性 下面这张图展示了这段代码做 ...
- 【python系统学习06】一张图看懂列表并学会操作
点击跳转-原文地址 数据类型 - 列表(list) 「目录:」 一张图了解列表 列表是什么 列表长啥样 语法格式 代码示例 格式特征 列表定义 列表操作 - 提取单个:偏移量 什么是偏移量 偏移量提取 ...
- 【python系统学习07】一张图看懂字典并学会操作
点击跳转 - 原文地址 数据类型 - 字典(dict) 目录: 一张图get字典 字典是什么 js的对象 字典长啥样 语法伪代码 示例demo 语法成像 字典怎么用 字典长度获取--len函数 提取字 ...
- 一张图学dockerfile
Dockerfile是为快速构建docker image而设计的,当你使用dockerbuild 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文 ...
随机推荐
- 关于Office 中的墨迹功能(可作word电子签名)
原文 关于Office 中的墨迹功能 通过使用 Microsoft Office 2003 中的墨迹功能,可使用 Tablet PC 和 Tablet 笔将手写笔记插入到 Microsoft Offi ...
- Python 2.7.3 Time与DateTime格式化
import time import datetime class TimeX: '''时间工具,目前用于格式化时间''' @staticmethod def GetLocalTimeString_T ...
- hdu 4858 项目管理(STL集装箱)
项目管理 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 1.3 LINQ查询
LINQ最具突破性的优势在于将文本查询与对象操作完美集成,它让查询数据和操作对象一样安全和轻松.查询(Query)是LINQ的核心概念之一. 传统意义上的数据查询语言,通常是比较易懂,具有一定语义的文 ...
- 系统预定义委托与Lambda表达式
NET中那些所谓的新语法之三:系统预定义委托与Lambda表达式 开篇:在上一篇中,我们了解了匿名类.匿名方法与扩展方法等所谓的新语法,这一篇我们继续征程,看看系统预定义委托(Action/Fun ...
- php学习之路:php在iconv功能 详细解释
iconv函数库可以完毕各种字符集间的转换,是php编程中必不可少的基础函数库. 使用方法例如以下: $string = "亲爱的朋友欢迎訪问胡文芳的博客.希望给您带来一点点的帮助!&quo ...
- android:由URL载入中ImageView
两种方法: 方法一: Bitmap bimage= getBitmapFromURL(bannerpath); image.setImageBitmap(bimage); public static ...
- [转载]Android中WebView自适应屏幕
webview中右下角的缩放按钮能不能去掉 settings.setDisplayZoomControls(false); //隐藏webview缩放按钮 让Webview加载的页面居中显示有我知道的 ...
- Unity 3.5
ASP.NET Web Forms 的 DI 應用範例 跟 ASP.NET MVC 与 Web API 比起来,在 Web Forms 应用程式中使用 Dependency Injection 要来的 ...
- oracle实例,数据库,服务器区别
实例(instance) 实例是一个非固定的,基于内存的基本进程与内存结构.当服务器关闭时,实例就不存在了. 数据库(DataBase) 数据库指固定的,基于磁盘的数据文件,控制文件,日志文件,参数文 ...