重温UML六大关系

     在软件系统中,类不是孤立存在的,类与类之间存在各种关系。根据类与类之间的耦合度从弱到强排列,UML 中的类图有以下几种关系:继承(泛化)关系、实现关系、关联关系、聚合关系、组合关系和依赖关系。其中泛化和实现的耦合度相等,它们是最强的。

1、继承(泛化)。

说明:这种关系就是面向对象语言中的继承关系,逻辑上可以用"is a"表示。

代码体现:子类继承父类。

UML符号:一条实线+空心箭头。

例子:鸟继承了动物。

class Bird:Animal  //继承动物类

{

}

2、实现关系。

说明:和泛化关系相似,逻辑上也是用"is a"表示。区别在于实现关系继承一个抽象类(abstract、interface),而泛化关系继承一个具体类。

代码体现:实现接口或继承某个抽象类。

UML符号:一条虚线+空心箭头。

例子:大雁实现飞翔接口

class WideGoose : IFly

{

}

 

3、关联关系。

  说明:是整体与部分的关系。逻辑上能用"has a"表示。

 代码体现:成员变量。

 UML符号:双向关联,一条实线或一条实线+两个箭头;单向关联,一条实线+一个箭头。

例子:企鹅需要“知道”气候的变化

class Penguin :Bird

{

        private Climate climate;  //在企鹅中,引用到气候对象

}

4、聚合关系。

说明:是整体与部分的关系,部分能脱离整体而独立存在。逻辑上能用"has a"表示。

代码体现:成员变量

 UML符号:空心菱形+实线箭头

例子:每只大雁都是属于一个雁群,一个雁群可以有多只大雁

class WideGooseAggregate

{

        private WideGoose [ ] arrayWideGoose; 

        //在雁群WideGooseAggregate类中,有大雁数组对象arrayWideGoose

}

5、合成关系(组合)。

说明:是整体与部分的关系,但部分不能脱离整体而独立存在。逻辑上能用"has a"表示。

代码体现:成员变量。

UML符号:实心菱形+实线箭头。

例子:鸟拥有两对翅膀

class Bird

{

        private Wing wing;

        public Bird()

        {

                wing=new Wing();

                //在鸟Bird类中,初始化时,实例化翅膀Wing,他们之间同时生成。

        }

}

6、依赖关系。

说明:是一种使用关系,即一个类的实现需要另一个类的协助。逻辑上能用"use a"表示。

尽量不要使用双向依赖。

代码体现:局部变量、方法的参数和静态方法的调用。

UML符号:一条虚线+箭头。

例子:动物依赖水和氧气

abstract class Animal

{

public Netabolism (Oxygen oxygen , Water water)

{

}

}

Guess you like

Origin blog.csdn.net/yangsimo/article/details/121453263