UML类图中关系的总结

前端之家收集整理的这篇文章主要介绍了UML类图中关系的总结前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

2015年开始在http://sguotao.github.io 上写博客啦...

我们平时在画类图的过程中,遇到的最大的问题,就是不确定类之间应该用什么箭头来连接,说到底就是没搞清楚类之间关系的表示方式,感谢tianhai110 童鞋的分享

在UML类图中,常见的有以下几种关系:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。下面就挨个介绍说明,画图的时候,方便翻阅。

1.泛化(Generalization)

【定义】是一种继承关系,它指定了子类如何特化父类的所有特征和行为。

【示例】老虎是动物的一种。

【箭头】带三角箭头的实线,箭头指向父类.

【图例】

【图例说明】

Student类和Teacher类都是Person类的子类,Student类和Teacher类继承了Person类的属性方法

2.实现(Realization)

【定义】是一种类与接口的关系,表示类是接口所有特征和行为的实现。

【示例】汽车,轮船都是具体的交通工具。

【箭头】带三角箭头的虚线,箭头指向接口。

一个交通工具接口Vehicle,包含一个抽象操作move(),在类Ship和类Car中都实现了该move()操作,不过具体的实现细节将会不一样。

3.关联(Association)

【定义】类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系。表示一种拥有的关系,它使一个类知道另一个类的属性方法

通常将一个类的对象作为另一个类的成员变量。在使用类图表示关联关系时可以在关联线上标注角色名,一般使用一个表示两者之间关系的动词或者名词表示角色名(有时该名词为实例对象名)。

【示例】老师与学生,丈夫与妻子。

【箭头】用实线连接有关联关系的对象所对应的类,关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。带普通箭头的实心线,指向被拥有者。

【图例】

【关联关系】

【双向关联】

顾客(Customer)购买商品(Product)并拥有商品,反之,卖出的商品总有某个顾客与之相关联。因此,Customer类和Product类之间具有双向关联关系。

【单向关联】

顾客(Customer)拥有地址(Address),则Customer类与Address类具有单向关联关系。

【自关联】

在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。例如:一个节点类(Node)的成员又是节点Node类型的对象。

【多重关联】

一个界面(Form)可以拥有零个或多个按钮(Button),但是一个按钮只能属于一个界面,因此,一个Form类的对象可以与零个或多个Button类的对象相关联,但一个Button类的对象只能与一个Form类的对象关联。

4.聚合(Aggregation)

【定义】是整体与部分的关系。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

【示例】车和轮胎是整体和部分的关系。

【箭头】带空心菱形的实心线,菱形指向整体。

汽车发动机(Engine)是汽车(Car)的组成部分,但是汽车发动机可以独立存在,因此,汽车和发动机是聚合关系。

5.组合(Composition)

【定义】是整体与部分的关系。组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。

【示例】公司与部门的关系,没有公司就不存在部门。

【箭头】带实心菱形的实线,菱形指向整体。

人的头(Head)与嘴巴(Mouth),嘴巴是头的组成部分之一,而且如果头没了,嘴巴也就没了,因此头和嘴巴是组合关系。

6.依赖(Dependency)

【定义】是一种使用的关系,所以要尽量不使用双向的互相依赖。

【示例】

【箭头】带箭头的虚线,指向被使用者。

驾驶员开车,在Driver类的drive()方法中将Car类型的对象car作为一个参数传递,以便在drive()方法中能够调用car的move()方法,且驾驶员的drive()方法依赖车的move()方法,因此类Driver依赖类Car。

总结

各种关系的强弱顺序:

泛化= 实现> 组合> 聚合> 关联> 依赖

企鹅和气候两个类,企鹅是很特别的鸟,会游不会飞。更重要的是,它与气候有很大的关联。我们不去讨论为什么北极没有企鹅,为什么它们要每年长途跋涉。总之,企鹅需要‘知道’气候的变化,需要‘了解’气候规律。当一个类‘知道’另一个类时,可以用关联(association)。

参考资料

http://www.jb51.cc/article/p-okbqdsjq-cv.html

http://www.uml.org.cn/oobject/201211231.asp

原文链接:https://www.f2er.com/javaschema/285002.html

猜你在找的设计模式相关文章