UML类图五种关系的代码实现[通俗易懂]

UML类图五种关系的代码实现[通俗易懂]UML类图五种关系的代码实现

大家好,又见面了,我是你们的朋友全栈君。

    初次接触UML的时候,就对比过类图中的几种关系(UML——类图),当时侧重的是对这些关系的通俗理解,忽略了图和代码的对应关系。现在在软考中设计模式也是很重要的一部分,基本考点就是将UML图转化成代码实现,前两天听了王聚师哥的讲解,有一种茅塞顿开的感觉。

c#版UML类图中五大关系和代码的对应:

1.实现

    实现通常描述的是类和接口的关系,一般都说什么类实现了什么接口。比如说下图中大雁类实现了飞翔接口。

UML类图五种关系的代码实现[通俗易懂]

代码实现:

//将图转换成代码:“类名:接口名”
class WideGoose: IFly
{

}

2.继承

    在UML图中,准确的说继承应该是泛化,我们都知道继承和泛化都表示的是子类的父类的关系,但是也有微弱的区别,只是看问题的角度不同,一般都是子类继承父类,父类泛化子类。比如说下图中动物和鸟的关系:鸟类继承了动物类,而动物类泛化出鸟类。

UML类图五种关系的代码实现[通俗易懂]

代码实现

//图和代码的对应关系:“子类:父类”
class Bird : Animal
{

}

    可以看出继承和实现在代码中都是通过“:”来表示,我们也很容易理解。

3.关联

    我们都知道关联又可以分为聚合,组合,他们的主要区别体现在类和类之间关联的强度。首先从最简单的关联关系说起:

UML类图五种关系的代码实现[通俗易懂]

    当一个类知道另一个类时,可以用关联关系。现在企鹅需要知道气候的变化,了解气候的变化规律。在图中我们用实线+箭头来表示,企鹅类和气候对象是一种一对一的关系,所以在代码中的体现为:在企鹅类中引用箭头指向的气候对象

class Penguin 
{   
      //在企鹅类中,引用气候对象。
      private Climate climate;
}

3.1 聚合

UML类图五种关系的代码实现[通俗易懂]

    聚合表示了一种弱的拥有关系,一个雁群可以拥有多个大雁,所以在雁群类中,就需要引用大雁的数组对象。

class WideGooseAggregate
{
       //在雁群类中,引用大雁数组对象
       private WideGoose() arrayWideGoose;
}

3.2 组合


UML类图五种关系的代码实现[通俗易懂]


    组合是一种强的拥有关系,部分和整体必须同生死共存亡,也就是具有同样的生命周期。翅膀脱离了鸟不可能单独存在,鸟也不能没有翅膀。

class Bird
{ 
       //1.在鸟类中引用翅膀对象
       Private Wing wing;
       //2.在鸟类的构造函数中,初始化鸟类的同时也要实例化翅膀,
       //因为他们同时生成,也就是翅膀的变化会影响鸟的变化,
        Public Bird( )
        {
              wing = new Wing( );
        }
       
}

    对比关联,聚合和组合的代码实现过程:关联只需要引用一个单独的对象,而聚合需要引用一个数组对象,组合除了需要引用对象外,还需要在一个类中初始化箭头指向的类。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105722.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PyTorch 学习笔记(九):自动编码器(AutoEncoder)「建议收藏」

    PyTorch 学习笔记(九):自动编码器(AutoEncoder)「建议收藏」一.生成模型生成模型(GenerativeModel)这一概念属于概率统计与机器学习,是指一系列用于随机生成可观测预测数据得模型。简而言之,就是“生成”的样本和“真实”的样本尽可能地相似。生成模型的两个主要功能就是学习一个概率分布Pmodel(X)P_{model}(X)Pmodel​(X)和生成数据,这是非常重要的,不仅可以用在无监督学习中,还可以用在监督学习中。无监督学习的发展…

    2022年6月10日
    52
  • linux vlc乱码,一劳永逸解决VLC播放中文字幕乱码问题

    linux vlc乱码,一劳永逸解决VLC播放中文字幕乱码问题VLC对于Mac/Ubuntu用户来说算得上是必备软件。其相当于PC机上的“暴风影音”,但Mac/Ubuntu的新手使用VLC播放avi时都会碰到字幕乱码的问题。avi字幕的格式有多种,这里假设你使用常见的.srt字幕。VLC默认支持的字幕内码为utf-8,而网上提供的.srt字幕基本上都是GBK码,所以在初装VLC后的默认状态下,加载.srt字幕都会出现乱码。本教程以当前最新的VLC1.1…

    2022年7月11日
    35
  • c语言学生管理系统(上)

    大一上c语言学生管理系统*你好!这是你第一次使用c语言做完整的一个小程序,如果你想学习c语言不那么枯燥,可以仔细阅读这篇文章,了解一下c语言的基本语法知识。主要函数功能1.打印功能菜单2.录入学生信息。3.计算所以学生总分和平均分。4.根据学生分数由高到低输出学生信息。5.根据学生学号由小到大输出学生信息。6.输入学生学号查找该学生对应的信息。7.优秀、合…

    2022年4月9日
    42
  • Django(61)认证组件源码分析「建议收藏」

    Django(61)认证组件源码分析「建议收藏」认证组件源码入口APIView下的dispatch下的self.initial(request,*args,**kwargs),源码如下:definitial(self,request,

    2022年7月30日
    3
  • Page.RegisterStartupScript的使用方法

    Page.RegisterStartupScript的使用方法用于后台输出Javascript执行段打开一个新窗口:Page.RegisterStartupScript(“starup”,”<scriptlanguage=’javascript’>window.open(‘”+url+”‘,”,’toolbar=no,resizable=yes,scrollbars=yes’)</script>”)警告…

    2022年7月20日
    14
  • 群晖|半洗白后moments正常显示人像、主题、预览「建议收藏」

    群晖|半洗白后moments正常显示人像、主题、预览「建议收藏」Moments不工作群晖重装6.2.3之后,发现moments不能正常工作了,不管是人物还是主题都是空白,还会显示有XXX张照片待发现,但会停在这儿。这如何能忍,网络上找到替换文件大法,没啥用,这台虚拟机内黑群晖只能暂时放下。想到自己还有台裸机安装的黑群晖,尝试后moments正常工作。替换ffmpeg为第三方替换的目的是为了能够正确的生成预览图、视频等。dsm版本及内核uname-a#LinuxvmDSM3.10.105#25426SMPTueMay1204:53:1

    2022年5月6日
    1.6K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号