UML 中类图的关系及表示方法

来源:互联网 发布:重大资产置换 知乎 编辑:程序博客网 时间:2024/04/30 22:54

类图(Class Diagram)是显示出类、接口以及他们之间的静态结构与关系的图。其中最基本的单元是类或接口。类图不但可以表示类(或者接口)之间的关系,也可以表示对象之间的关系。下面是一个典型的类图:

image

类图一般分为几个部分:类名、属性、方法


常见的关系有:继承(Generalization),关联关系(Association),聚合关系(Aggregation),复合关系(Composition),依赖关系(Dependency)。

(1)继承关系:泛化、一般化

Generalization表示的是类与类之间的继承关系、接口与接口之间的继承关系、类与接口之间的实现关系。如果体现到Java语言中,那就是反应extends和implements关键字。其典型类图如下所示:

·uml类图的各种关系表示法 - dinstone - Dinstone 的技术博客空心箭头加实线,表示泛化generalization(继承inheritance)关系;

  • uml类图的各种关系表示法 - dinstone - Dinstone 的技术博客表示实现。

image

                    图1                                                                                     图2

图1 继承   ,图2 实现


(2)Association:关联关系

关联关系描述的是类与类之间的连接,他表示一个类知道另一个类的属性和方法。关联关系可以是单向的或者双向的。在Java语言中,单向的关联关系是通过以实例变量的方式持有被关联对象的引用来实现的。一般来说是不建议使用双向的关联关系的。下面举例介绍单向的关联关系。

·uml类图的各种关系表示法 - dinstone - Dinstone 的技术博客

image

上面的类图表现的是骑手和马之间的关系。Rider中有一个实例变量类型是Horse。

每个连接都会有两个端点,上面的Rider和Horse就是端点,且每个端点都可以有(optional)一个基数(multiplicity),表示这个类可以有几个实例。这个类似于数据库中的1:n、m:n这些关系。我们可以给上面的例子加上基数:

image

上面表示的是骑手与马之间的1对n关系。

(3)Aggregation:聚合关系

聚合关系是关联关系的一部分,是非常强的关联关系。聚合关系表现的更多的是整体与部分的关系。例如汽车和车门、发动机之间的关系。如图所示:

·uml类图的各种关系表示法 - dinstone - Dinstone 的技术博客

image

                                                      图3

与关联关系一样,聚合关系也是通过实例变量实现的。单纯从语法的角度基本上无法判断出关联关系和聚合关系。



(4) 合成关系:是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期,合成关系不能共享

表示方法:实心菱形+实线+箭头

将图3中的空心方块变为实心方块就可以,个人理解认为是一种类中定义类的关系,一旦代表整体的对象消失,代表部分的对象就消失。也就是而且如果组合对象销毁的话,被组合的对象也会同时被销毁;

·uml类图的各种关系表示法 - dinstone - Dinstone 的技术博客



(5)依赖关系:是类与类之间的连接,表示一个类依赖于另一个类的定义。例如如果A依赖于B,则B体现为局部变量,方法的参数、或静态方法的调用。

表示方法:虚线+箭头

·uml类图的各种关系表示法 - dinstone - Dinstone 的技术博客


资料整理与网络

参考http://blog.163.com/haizai219@126/blog/static/444125552007112582734207/ 等图。


·




原创粉丝点击