今天我们来看UML基本构造块的还有一个要素——关系。

UML中有表示基本图示符号之间的关系,它们是:依赖(dependency)、泛化(generalization,也有的称继承)、实

现(realization)和关联(association),而关联又分为普通关联(common association)、聚合(aggregation,也有的称聚

集)和组合(composition)。

依赖(dependency)

依赖关系表示为一个类A使用还有一个类B。这样的使用关系是具有偶然性的、暂时性的、很弱的,可是类B的变化

会影响到类A,是use a关系。

表如今生活中,比方某人要过河,须要借用一条船。此时人与船之间的关系就是依赖。表如今代码层面假设类A

依赖于类B,那么类B能够是类A的局部变量,或类A方法的參数,或静态方法的调用。

图示:虚线加箭头(箭头指向的是被依赖的那一方)

举例:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

说明:动物有几大特征,比方有新陈代谢。能生殖。而动物要有生命力,须要氧气、水以及食物等。也就是说,

动物依赖氧气和水。

他们之间是依赖关系(dependency)。用虚线加箭头来表示。

我们再来看一个代码层面上的样例:

说明:假设两个类有结构关系(关联关系),那么就不用依赖关系(两个事物一般都有这个关系)。

泛化(generalization)

泛化即继承关系。泛化是一种特殊/一般关系,特殊元素(子元素)的对象可替代一般元素(父元素)的对象。用这样的

方法。子元素共享了父元素的结构和行为。是is-a关系,详细表现为类与类的继承,接口与接口的继承。

泛化指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并能够添加它自己的新功

能的能力,继承是类与类或者接口与接口之间最常见的关系。在Java中此类关系通过keywordextends明白标识,在设

计时一般没有争议性。

图示:实线+空心三角

举例:

实现(realization)

实现是类元之前的语义关系,在该关系中一个类元描写叙述了还有一个类元保证实现的契约。

实现指的是一个class类实

现interface接口(能够是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过keywordimplements

明白标识,在设计时一般没有争议性。

图示:虚线+空心箭头

举例:

关联(association)

关联描写叙述了两个或多个类之间的结构性关系。表示类与类之间的联接。它使一个类知道另一个类的属性和方法。

关联体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比方我和我的朋友;这样的关系比依赖更强、不

存在依赖关系的偶然性、关系也不是暂时性的,通常是长期性的。并且两方的关系通常是平等的、关联能够是单向、

双向的;表如今代码层面,假如类A关联了类B,则类B是类A的全局变量(注意是全局变量,再看看上面的依赖关系)。

大多数关联都是单向关联。这比較easy维护,关于关联,在生活中我们常会说,类A持有类B的引用。为被关联类B以

类属性的形式出如今关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。

(1)普通关联(common association)

1)Association name名称:用以描写叙述该关系的性质。

2)Role角色:当一个类处于关联的某一端时,该类就在这个关系中扮演了一个特定的角色;角色是关联中靠近它

的一端的类对另外一端的类呈现的职责。

3)Multiplicity多重性:关联角色的多重性是说明一个关联的实例中有多少个相互连接的对象。

图示:直线

举例:

(2)聚合(aggregation)

聚合关系是特殊的关联关系。是一种强的关联关系,他体现的是总体与部分关系,即has-a的关系。可是总体和

部分是能够分离的。注意。是能够分离的。他们能够具有各自的生命周期,部分能够属于多个总体对象,也能够为多

个总体对象共享;比方计算机CPU、公司与员工的关系等;表如今代码层面,和关联关系是一致的,仅仅能从语义级别

来区分。

普通关联关系的两个类处于同一层次上。是平级的,而聚合关系的两个类处于不同的层次,一个是总体,一个是

部分。

同一时候。是一种弱的“拥有”关系。体现的是A对象能够包括B对象,但B对象不是A对象的组成部分。详细表现为,

假设A由B聚合成,表现为A包括有B的全局对象,可是B对象能够不在A创建的时刻创建,这句话很有意义。它在代

码中通常体现成依赖注入的setter方法,即A对象能够随时创建B对象,再想想这不就体现了总体和部分是能够分离了

吗?创建总体的时候能够不创建部分。

图示:空心菱形+实线+箭头

举例:

(3)组合(Composition)

组合也是关联关系的一种特例,他体现的是一种contains-a(拥有)的关系,这样的关系比聚合更强,也称为强聚

合。它相同体现总体与部分间的关系,但此时总体与部分是不可分的,总体的生命周期结束也就意味着部分的生命周

期结束;比方你和你的大脑;表如今代码层面,和关联关系是一致的,仅仅能从语义级别来区分;表如今代码层面上,

假设A由B组成,那么A就包括B的全局变量,并在创建A的同一时候创建B,在代码上我们一般是使用构造函数进行实现。

也是依赖注入中构造函数的实现。

图示:实心菱形+实线+箭头

举例:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

总结

最后,我们来总结一下。泛化和实现就不用多少了,大家都懂的,就是继承和实现接口。重点说下其他的吧,依

赖,ClassB体现为ClassA的局部变量,我想用就用,用了就有关系。不用就没关系。关联,ClassB体现为ClassA的

全局变量,无论你用不用。反正你知道我的存在了,持有了我的引用。聚合,是特殊的关联关系,用了就加强了关

系,不用还是我仅仅知道你的存在。聚合能够方便的持有多个类的引用。如使用List<>,所以当你发现有List<>等集合

是能够使用聚合来表示,比方观察者模式的结构。组合,体现最强关系,比方人出身了。必然也有头部吧,不然我真

无法想象这个世界了。

涵盖上述四种关系的一个类图:

解释:

1)Window类实现了AbstractWindow接口。

2)ConsoleWindow类和DialogBox类都继承(泛化)自Window类。

3)Window类依赖于Event类。也就是Window类会使用到Event类。

4)Dialog类和Control类互相关联。

UML建模学习3:UML基本构造块之关系的更多相关文章

  1. UML建模学习1:UML统一建模语言简单介绍

    一什么是UML? Unified Modeling Language(UML又称为统一建模语言或标准建模语言)是国际对象管理组织OMG制定的一个通 用的.可视化建模语言标准.能够用来描写叙述(spec ...

  2. 【UML 建模】在线UML建模工具 ProcessOn 使用详解

    总结 : -- 推荐理由 : 最近从 Windows 操作系统 转到 MAC 上, 正在看设计模式 和 重构, 找不到好用的 UML 工具, 因此在网上找了一款可以在线使用的 UML 工具, 用起来发 ...

  3. 【UML 建模】在线UML建模工具 ProcessOn 使用具体解释

    总结 : -- 推荐理由 : 近期从 Windows 操作系统 转到 MAC 上, 正在看设计模式 和 重构, 找不到好用的 UML 工具, 因此在网上找了一款能够在线使用的 UML 工具, 用起来发 ...

  4. UML uml建模工具

    UML建模工具 一.UML的概念: 参考百度百科: https://baike.baidu.com/item/%E7%BB%9F%E4%B8%80%E5%BB%BA%E6%A8%A1%E8%AF%AD ...

  5. 三大UML建模工具Visio、Rational Rose、PowerDesign

    UML建模工具Visio .Rational Rose.PowerDesign的比较 应用最广的由两种种1. Rational Rose,它是ibm的 .2.Microsoft的 Microsoft ...

  6. UML(统一建模语言)是通用的可视化标准建模语言。由构造块、公共机制、构架三部分组成。

    UML UML(统一建模语言)是通用的可视化标准建模语言.由构造块.公共机制.构架三部分组成. 1.构造块:包括基本的UML建模元素(类.接口.用例等).关系(关联关系.依赖关系.泛化关系.实现关系) ...

  7. UML建模:学习笔记(1)

    UML:学习笔记(1) 事物 结构事物 类: 接口: 协作:(定义元素之间的相互作用) 用例:(在系统外部和系统交互的人) 组件:(描述物理系统的一部分) 节点:(一个节点可以被定义为运行时存在的物理 ...

  8. 从零开始学架构(三)UML建模

    文章大纲 1.  文章介绍 2.  UML概述 3.  静态模型 4.  动态模型 5.  UML建模的一般过程 一.文章介绍 1.1为什么学习UML (1)UML是一种软件架构的模型表现方法,用于项 ...

  9. UML建模的要点总结

    预备知识: 一.UML的特性与发展现状 UML是一种Language(语言) UML是一种Modeling(建模)Language UML是Unified(统一)Modeling Language 1 ...

随机推荐

  1. SQL Server 2000 ——DBCC命令

    http://blog.163.com/ruifeng_00/blog/static/6904584200971291923462/   一.定义 微软当初从SYBASE将DBCC是作为数据库一致性检 ...

  2. hdu 1532 Drainage Ditches (最大流)

    最大流的第一道题,刚开始学这玩意儿,感觉好难啊!哎····· 希望慢慢地能够理解一点吧! #include<stdio.h> #include<string.h> #inclu ...

  3. [Asp.net]AspNetPager分页组件

    引言 在基于Asp.net的内网系统中,分页功能是最常用的,用的最多的组件就是AspNetPager. AspNetPager 官网:http://www.webdiyer.com/aspnetpag ...

  4. 小程序setData工作原理理解图

    优化建议:1.频繁的去setData--我曾经用这个弄过动画效果,当然后来发现JS动画不适合小程序,CSS3动画才是王道2.每次setData都传递大量新数据--这个大量还真不好理解,暂时定为排行榜类 ...

  5. Android 4.0 x86安装教程 附带联网参数详细设置

    Android 4.0 x86是一个可以支持在电脑上运行的Android 4.0系统.没有手机一样也可以体验Android 4.0.这对玩机爱好者们来说也算得上是一个不大不小的好消息.不过目前的And ...

  6. 宿主机訪问virtualBox中Ubuntu

    斌斌 (给我写信) 原创博文(http://blog.csdn.net/binbinxyz).转载请注明出处! 使用NAT模式.就是让虚拟系统借助NAT(网络地址转换)功能.不须要你进行不论什么其它的 ...

  7. iOS中 imageNamed方法 非常多图片占用大量内存问题

    当我们须要载入非常多图片(相冊)的时候我们通常会用[UIimage  imageNamed:imageName]; 实际上[UIimage  imageNamed:imageName]这种方法在图片使 ...

  8. 《iOS应用逆向工程:分析与实战》

    <iOS应用逆向工程:分析与实战> 基本信息 作者: 沙梓社    吴航    刘瑾 丛书名: 信息安全技术丛书 出版社:机械工业出版社 ISBN:9787111450726 上架时间:2 ...

  9. @ERR Unsupported CONFIG parameter: notify-keyspace-events

    Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR Unsupported CONFIG parameter: noti ...

  10. .net 导出带条码的PDF

    Nuget添加引用:ZXing.Net生成条形码,ZXing.Net.Bindings.ImageSharp生成图片 将图片流插入单元格 举个栗子: BarcodeWriter writer = ne ...