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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 页式虚拟存储管理_页式虚拟存储管理的主要特点

    页式虚拟存储管理_页式虚拟存储管理的主要特点页式存储的基本原理    将程序的逻辑地址空间划分为固定大小的页(page),而物理内存划分为同样大小的页框(pageframe)。程序加载时,可将任意一页放人内存中任意一个页框,这些页框不必连续,从而实现了离散分配。也就是把内存等分成N份,存放运行的程序时,按分成的快放置即可。但放置时要考虑主存里哪些块已经被占用,这个用主存分配表(位示图)来表示。     分页式存储器的逻辑

    2022年9月26日
    8
  • 2020年公认最快的dns(国内好用的dns)

    简介:2020国内速度最快的dns推荐原版周公解梦分析梦见儿子死了的吉凶境遇安全,推荐长辈惠泽,推荐承受父祖之余德,前辈之提拔,而得大成功及发展,原命若喜水木者更佳。若凶数者:成又转败,陷于离乱变动,至晚年终归孤独失败,又早年有落水灾遇,生涯九死一生之命格。国内又须戒色变及刀杀之危。梦到蛇和蛇一头,速度暗示你可能会受到别人的欺骗,或受到别人欺骗。最快梦见蛇的心理学解梦从做梦内容的本义来说:推荐动物…

    2022年4月13日
    202
  • c3p0连接池的配置方式

    c3p0连接池的配置方式c3p0的配置方式分为三种,分别是1.setters一个个地设置各个配置项2.类路径下提供一个c3p0.properties文件3.类路径下提供一个c3p0-config.xml文件1.setters一个个地设置各个配置项这种方式最繁琐,形式一般是这样:01Propertiesprops= new Properties();

    2022年6月2日
    47
  • 欧拉角pitch、yaw,roll的理解_彻底搞懂四元数

    欧拉角pitch、yaw,roll的理解_彻底搞懂四元数目录0、简介一、四元数的定义二、欧拉角到四元数的转换2.1公式:2.2code:三、四元数到欧拉角的转换3.1公式3.2code:3.3四元素到旋转矩阵转换四.奇点五.矢量旋转证明:六.其他参考0、简介四元数与欧拉角之间的转换百度百科四元素在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具……

    2022年9月22日
    5
  • QQ微信都是腾讯的吗_腾讯为什么放弃qq

    QQ微信都是腾讯的吗_腾讯为什么放弃qq中国第一大APP是哪一个?当然是微信。那么第二大APP是哪一个呢?答案是已经21岁的互联网“化石级”产品——QQ!QQ的今天月活用户居然高达7.35亿,稍微观察一下就会发现一个奇怪的现象…

    2025年12月7日
    7
  • vue.js与jquery的区别_说出两者之间的区别

    vue.js与jquery的区别_说出两者之间的区别jQuery:曾经是前端最流行的js库。Vue:是一个兴起的js库,是一个精简的MVVM。从技术角度讲。Vue.js专注于MVVM模型的ViewModel层,它通过双向数据绑定把view和Model层连接起来,通过对数据的操作完成对页面视图的渲染。二者的区别是:一、Vue和jQuery对比jquery是使用选择器()选取DOM对象,对其进行赋值、取值、事件绑定等操作,和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起的。二、Vue则是通过Vue对.

    2022年10月16日
    4

发表回复

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

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