UML中类图的四种关系及其代码实现

在uml图中 最复杂的也就是泛化,实现,依赖,关联,这四种关系了,如果弄清了这几种关系那么在理解UML图的时候就会变得轻车熟路了!

如果你对着几种关系一点都不熟悉的话可以看一下uml中的四种关系,这篇博客简单的介绍了一下这几种关系,本文将重点的介绍一下,这几种关系在代码里如何实现的!

泛化关系

我想这个也可能是最简单的关系了,泛化就是特殊到一半的过程,也就是继承的相反的过程,子类继承自父类,而父类是从子类泛化而来!

泛化(generalization)关系是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在c#中用:来表示。在设计时一般没有争议性。

<span style="font-size:18px;">namespace DEMO
{
    //类继承类
    class ClassB: ClassA { }
    //接口继承接口
    interface InterfaceB: InterfaceA { }
}</span>

实现关系

实现(realization)关系指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在c#中用“:”表示在设计时一般没有争议性;

<span style="font-size:18px;">namespace DEMO
{
    //类实现接口
    class ClassC:InterfaceC{ }
}</span>

依赖关系

依赖(dependency)关系: 也是类与类之间的连接. 表示一个类依赖于另一个类的定义. 依赖关系总是单向的 。可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用。或者在方法体重声明该类的变量,或者直接引用该类!

public class Boat {
    /// <summary>
    /// 过河
    /// </summary>
    public voidriverCrossing(){
        //启动
        //过河
    }
    public staticvoid riverCrossingByShip(){
        //用大 船过河
    }

}//end Boat

public class Person {
    //通过参数的形式用Bote 类
    //Bote类被Person类的一个方法所持有,生命周期随着方法执行结束而结束。
   /// <summary>
   /// 过河
   /// </summary>
   /// <paramname="bote">船的实例</param>
    public voidriverCrossing(Boat bote){
       bote.riverCrossing();
    }
    //在方法体重生命该类的变量
    //注意Bote类的生命周期,当riverCrossing方法被调用的时候,才被实例化。
    //持有Bote类的是Person类的一个方法,而不是Person类,这点是最重要的。
    public voidriverCrossing() {
        Boatbote = new Boat();
       bote.riverCrossing();
    }
    //直接应用该类
    public voidriverCrossing() {
        Boat.riverCrossingByShip();
    }

}//end Person

关联关系

关联关系是实线加箭头表示。表示类之间的关系比依赖要强。

例如,水和气候是关联的,表示如下:

在代码中的表现如下:

<span style="font-size:18px;">namespace DEMO
{
    /// <summary>
    /// 水
    /// </summary>
    class Water
    {
        //吧气候类 的实例作为该类的一个变量!
        public Climateclimate;
        publicWater() {
        }
    }
    /// <summary>
    /// 气候
    /// </summary>
    class Climate
    {
        publicClimate()
        {
        }
    }
}</span>

可见,在Water类属性中增加了Climate类。

关联关系有单向关联、双向关联、自身关联、多维关联等等。其中后三个可以不加箭头。

单向关联:

双向关联:

自身关联:

多维关联:

关联和依赖的区别:

从类的属性是否增加的角度看:

发生依赖关系的两个类都不会增加属性。其中的一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量而已。

发生关联关系的两个类,其中的一个类成为另一个类的属性,而属性是一种更为紧密的耦合,更为长久的持有关系。

从关系的生命周期来看:

依赖关系是仅当类的方法被调用时而产生,伴随着方法的结束而结束了。

关联关系是当类实例化的时候即产生,当类销毁的时候,关系结束。相比依赖讲,关联关系的生存期更长。

关联关系按关系强弱右分为聚合 和组合 ,下边用大雁和雁群的例子讲解一下!

大雁喜欢热闹害怕孤独,所以它们一直过着群居的生活,这样就有了雁群,每一只大雁都有自己的雁群,每个雁群都有好多大雁,大雁与雁群的这种关系就可以称之为聚合。

另外每只大雁都有两只翅膀,大雁与雁翅的关系就叫做组合。

由此可见:

聚合的关系明显没有组合紧密,大雁不会因为它们的群主将雁群解散而无法生存;

而雁翅就无法脱离大雁而单独生存——组合关系的类具有相同的生命周期。

聚合关系图:

组合关系图:

在代码中表现如下:

<span style="font-size:18px;">namespace DEMO
{
    /// <summary>
    /// 雁群
    /// </summary>
    class GooseGroup
    {
        public Goosegoose;
        publicGooseGroup(Goose goose) {
            this.goose= goose;
        }
    }
    /// <summary>
    /// 大雁
    /// </summary>
    class Goose
    {
        publicWing wing;
        publicGoose() {
           wing = new Wing();
        }
    }
}</span>

这两种关系的区别是:

1.构造函数不同

聚合类的构造函数中包含另一个类的实例作为参数

因为构造函数中传递另一个类的实例,因此大雁类可以脱离雁群类独立存在。

组合类的构造函数包含另一个类的实例化

因为在构造函数中进行实例化,因此两者紧密耦合在一起,同生同灭,翅膀类不能脱离大雁类存在。

2.信息的封装性不同

在聚合关系中,客户端可以同时了解GooseGroup类和Goose类,因为他们是独立的。

在组合关系中,客户端只认识大雁类,根本不知道翅膀类的存在,因为翅膀类被严密地封装在大雁类中。

总结:

对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>依赖。

时间: 2024-12-14 05:17:21

UML中类图的四种关系及其代码实现的相关文章

[UML] UML中类之间的几种关系

类之间可能存在以下几种关系:关联(association).依赖(dependency).聚合(Aggregation,也有的称聚集).组合(Composition).泛化(generalization,也有的称继承).实现(Realization). 1:  关联是指两个类之间存在某种特定的对应关系,例如客户和订单,一个订单只能属于某个客户,一个客户可能会有多张订单.根据方向,分为单向和双向.根据对应的数量分为一对一.一对多.多对多等.对应的UML图如下所示:     关联关系用实线+箭头表示

UML类图的几种关系总结【转】

在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1. 泛化(Generalization) [泛化关系]:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为.例如:老虎是动物的一种,即有老虎的特性也有动物的共性. [箭头指向]:带三角箭头的实线,箭头指向父类         2.

UML类图的几种关系

转自 http://www.open-open.com/lib/view/open1328059700311.html UML类图的几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1.泛化 2.实现 3. 关联

UML中类之间的几种关系

类之间可能存在以下几种关系:关联(association).依赖(dependency).聚合(Aggregation,也有的称聚集).组合(Composition).泛化(generalization,也有的称继承).实现(Realization). 关联是指两个类之间存在某种特定的对应关系,例如客户和订单,一个订单只能属于某个客户,一个客户可能会有多张订单.根据方向,分为单向和双向.根据对应的数量分为一对一.一对多.多对多等.对应的UML图如下所示:     关联关系用实线+箭头表示.上图显

UML类图的五种关系小结

UML类图中的五种关系的耦合强弱比较:依赖<关联<聚合<组合<继承 一.依赖关系: (一)说明 虚线+箭头 可描述为:Uses a 依赖是类的五种关系中耦合最小的一种关系,是一种协助关系. 因为在生成代码的时候,这两个关系类都不会增加属性. (二)依赖关系图与代码的对应关系 动物类与水类的关系就是依赖关系,两者的存在关系有以下几种: 1 Water是Animal的全局变量,animal可以随处调用对象 2 Water是Animal的某个方法的局部变量 void Animal::Dr

再说UML类图的几种关系

在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1. 泛化(Generalization) [泛化关系]:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为. 例如:老虎是动物的一种,即有老虎的特性也有动物的共性. [箭头指向]:带三角箭头的实线,箭头指向父类 2. 实现(Rea

UML——四种关系

         在画类图之前,首先要理清UML中的四种关系,常见的有以下四种关系: 泛化(Generalization),  实现(Realization),关联(Association),依赖(Dependency),而在关联中又包括:聚合(Aggregation),组合(Composition),在这几种关系中他们又有剪不断的联系. 一.概念 [泛化]:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为.箭头指向:带三角箭头的实线,箭头指向父类. [实现]:是一

【菜鸟也疯狂UML系列】——浅析UML四种关系

在UML中.关系是很重要的.它抽象出对象之间的联系,让对象构成某个联系起来的结构.以下将简要分析一下UML中的四种关系:关联.依赖,泛化,实现. 一.举例罗列 1.关联(Association) 关联是用来连接有结构关系的对象,能够连接同样类或者不同类.也能够是双向关联和单向关联. 举例说明: 单向关联:人打开电视机.是一个单向关联. 双向关联:人和公司的关系,人是公司的雇员,公司是人的雇主.(1个公司有0或者n个雇员) watermark/2/text/aHR0cDovL2Jsb2cuY3Nk

UML中类图与类图之间的关系

一.基本概念 类 ??定义:类是指具有相同属性.方法和关系的对象的抽象,它封装了数据和行为,是面向对象程序设计(OOP)的基础.在 UML 中,类使用包含类名.属性和操作且带有分隔线的矩形来表示. 名称 格式 例子 说明 类名 字符串 Student 无 属性 [可见性]属性名:类型[=默认值] -name:String 类的成员变量 操作 [可见性]名称(参数列表)[:返回类型] +display():void 任意一个类实例对象都可以使用的行为 ??注:"可见性"表示该属性对类外的