首页 > 其他分享 >UML中的五种关系

UML中的五种关系

时间:2022-12-23 18:32:48浏览次数:41  
标签:关系 大雁 关联 Water 五种 Animal UML public

在实现设计模式之前,首先来复习以下UML中的五种关系图

依赖<关联<聚合<组合 

<1>依赖

依赖关系用虚线加箭头表示,如图所示:

上图表示:Animal类依赖于Water类(动物依赖于水)。

 依赖是类的五种关系中耦合最小的一种关系。因为依赖关系在生成代码的时候,这两个关系类都不会增加属性。这种微弱的关系可以用类之间的相互了解的程度来说明。

public class Water{
public Water(){

}
}

public class Animail{
public Animail(){

}
}

 

由上图可见生成的代码中Animal类的属性中没有增加Water类。那么Animal类如何使用Water类呢,有三种方式:

依赖关系的三种表现形式:

①     Water类是全局的,则Animal类可以调用它
 

②     Water类是Animal类的某个方法中的变量,则Animal类可以调用它。代码演示如下:

public class Animail{
public void GrownUp(){
Water water=null;
}
}

 

  PS:Animal有一个长大(GrownUp)方法,Water类作为该方法的变量来使用。
          请注意Water类的生命期,它是当Animal类的GrounUp方法被调用的时候,才被实例化。
         持有Water类的是Animal的一个方法而不是Animal类,这点是最重要的。

③     Water类是作为Animal类中某个方法的参数或者返回值时。代码演示如下

public class Animail{
public Water GrownUp(Water water){
return null;
}
}

无用多说,Water类被Animal类的一个方法持有。生命期随着方法的执行结束而结束。

 

在依赖关系中,必须采用这三种方法之一。

 

<2>关联

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

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

 

生成代码如下:



 


 

可见生成的代码中,Water类的属性中增加了Climate类。

 

关联既有单向关联又有双向关联。

单向关联:Water类和Climate类单向关联(如下图),则Water类称为源类,Climate类称为目标类。源类了解目标类的所有的属性和方法,但目标类并不了解源类的信息。

双向关联:源类和目标类相互了解彼此的信息。如将Water类和Climate类之间改为双向关联,如下图


 

 

依赖和关联的区别:

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

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

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

②     从关系的生命期角度看:

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

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

 

关联关系的细化

关联关系又可以细化为聚合关系和组合关系

聚合关系图:


 

组合关系图:

 


 

l       聚合和组合的区别:

由于聚合和组合都是特殊的关联关系,在生成的代码上看不出区别,都是关联的形式。那到底这两种关系如何来区分呢。

 

区分的关键有两点:

①     构造函数不同

聚合关系下:雁群类(GooseGroup)和大雁类(Goose)代码如下:

 


 

组合关系下:大雁类(Goose)和翅膀类(Wings)代码如下:

 


 

这两种关系的区别在于:

①构造函数不同

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

雁群类(GooseGroup)的构造函数中要用到大雁(Goose)作为参数传递进来。大雁类(Goose)可以脱离雁群类而独立存在。

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

表明大雁类在实例化之前,一定要先实例化翅膀类(Wings),这两个类紧密的耦合在一起,同生共灭。翅膀类(Wings)是不可以脱离大雁类(Goose)而独立存在

②     信息的封装性不同

在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的

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

 

<3>泛化

泛化就是一个类继承另一个类所有的描述,并且可以根据需要对父类进行拓展,是面向对象的重要特征之一。

泛化使用一根实线加箭头,泛化关系图

 


 

泛化的用处:①实现了代码的复用

                        ②实现了多态

           

<4>实现

 主要针对接口和抽象类而言,实现接口和抽象类的类必须要实现他们的方法。

实现关系表示为:虚线加箭头,关系图如下:

 

接口只包含方法、委托或事件的签名。方法的实现是在实现接口的类中完成的。

关于泛化关系和实现关系比较简单,这里就不一一展开了。了解清楚了这几种关系以及他们的代码特点,才能更好的学习设计模式!



标签:关系,大雁,关联,Water,五种,Animal,UML,public
From: https://blog.51cto.com/u_15116285/5966276

相关文章

  • 微服务与SOA的关系
    SOA是一种设计方法,它通过提供服务向外提供一系列功能,服务之间通过网络调用,而非采用进程内调用的方式进行通信。SOA可软件的复用性,如多个终端共享一个以应用于庞大的单块应......
  • 微服务与 SOA的关系
    SOA是一种设计方法,它通过提供服务向外提供一系列功能,服务之间通过网络调用,而非采用进程内调用的方式进行通信。SOA可软件的复用性,如多个终端共享一个以应用于庞大的单块应......
  • Day11_01_Redis教程之非关系型数据库
    非关系型数据库简介一.非关系型数据库1.NoSQL简介NoSQL,泛指非关系型的数据库,NoSQL即Not-OnlySQL,它可以作为关系型数据库的良好补充.随着互联网Web2.0网站的兴起,非关系型......
  • SpringBoot2.x系列教程49--NoSQL非关系型数据库简介
    SpringBoot2.x系列教程49--NoSQL非关系型数据库简介作者:一一哥一.非关系型数据库1.NoSQL简介NoSQL,泛指非关系型的数据库,NoSQL即Not-OnlySQL,它可以作为关系型数据库的良......
  • UML总结----六种关系和九种图的作用
    已经学习了UML,应该对UML有一个大概的认识,下面一张图是我画的一个思维导图。从图上可以看出UML可以大致分为视图、事物、关系以及它的9种图。视图在逻辑视图中:逻辑视图通常由......
  • UML视频观看方法
    对于完成上一个阶段的学习,到了UML又该看视频了,但是打开视频的时候,相信大家都是遇到了这种情况,知识看到一个老师在讲,没有学习内容,项PPT之类的东西,那么这么学习肯定是学不好的......
  • UML概述
    刚接触到UML,可能都不太了解什么是UML,下面这张图可能会帮助你对UML有一个大概的认识。什么是UML? UML统一建模语言是用来设计软件蓝图的可视化建模语言。支持面向对象系统的......
  • UML六大关系总结
    UML六大关系有:继承、关系、聚合、组合、实现、依赖。分为通过图和代码总结这些关系。1、继承classBird:Animal{}说明:一段都是子类继承父类,在子类的后面用一个冒号表示,冒号后......
  • 数据、信息、知识、智慧的关系与区别
    关于数据、信息、知识,常听到这样的牢骚:“数据是爆炸了,信息却很贫乏”,“在信息的海洋里遨游,却因为缺乏知识而渴死”。那么,数据、信息、知识,它们之间有什么区别?知识和智慧又......
  • 004k8s pods volumes和pod的对应关系查询
    一、背景如二、描述所示pods频繁地重启,导致听云的探针收集规则文件占用大量的空间,需要查询"063915dd-c5b8-4137-9e9c-119488992b56"对应的是哪个pod听云data下存储的......