• UML类图的几种关系浅析


    类图中的主要关系有如下几种

    • 关联关系
      – 聚合关系
      – 组合关系
    • 依赖关系
    • 泛化关系
    • 细化关系

    注:以下图片均来自网络,侵删


    1、关联关系

    关联关系是类与类之间的连接,表示一类对象与另一类对象之间有联系,通常将一个类的对象作为另一个类的属性。
    下图为单向关联:
    在这里插入图片描述
    同样的有双向关联,注意双向关联的直线是不带箭头的,而不是两头都带箭头:
    在这里插入图片描述
    以及自关联:
    在这里插入图片描述
    当然还有多重性关联,一般在实线上标注出来即可,常见的标注如下,意思也很好理解:

    1..1
    0..*
    1..*
    0..1
    m..n:表示另一个类的一个对象与最少m、最多n个该类对象有关系(m<=n)
    

    在这里插入图片描述
    上图是一个组合关系(别急,下面马上就讲到了),但同时也标注出了多重性关联,这表示一个公司可以有1个或多个部分(至少一个),而一个部门属于且仅属于一个公司。

    聚合关系、组合关系都属于关联关系。

    聚合关系(又名“共享聚集”),属于强关联关系,聚合是整体和部分的聚合,在形式上表现为这个整体不能脱离部分单独存在,但是部分可以脱离整体而存在。
    严谨一点来说,顺便也解释一下为什么叫“共享聚集”,是因为聚合关系中的那个“部分”,可以被多个“整体”所共享(注意是“可以”,而不是“一定”)。
    比如班级里的同学,汽车和轮胎、引擎等,在UML中用空心菱形加箭头表示,如下图:
    在这里插入图片描述

    组合关系(又叫“组合聚集”)是比聚合关系的关联性更强的一种关系,聚合关系中整体离不开部分、而部分可以离开整体,但是在组合关系里,不仅要求整体离不开部分,同时还要求部分也不可以离开整体单独存在,也就是说这里的“部分”和“整体”是一对一的,一个部分只能属于一个整体(注意这里强调的是“只能”)。比如人的头和嘴等等,在UML中用实心菱形加箭头表示:
    在这里插入图片描述


    2、依赖关系

    依赖关系是一种使用关系,描述两个模型元素(类、用例等)之间的语义连接关系:其中一个模型元素是独立的,另一个模型元素依赖于独立的模型元素。简单点说,就是如果类A中某个方法中需要传一些参数,而其中一个参数是类B的一个实例,那么这就说A依赖于B。依赖关系在UML图中用虚线加箭头表示
    在这里插入图片描述


    3、泛化关系

    泛化关系也叫继承关系,用于描述父类(又名“超类”、“基类”)与子类(又名“派生类”)之间的关系。在图中使用空心三角形加直线表示。
    在这里插入图片描述
    这里需要强调的是,泛化关系还可以细分,分为普通泛化和受限泛化。
    普通泛化就是一般的不加约束的泛化,当然受限泛化自然就是受到一定约束条件的泛化了咯。通俗点说,除了受限泛化,剩下的就都是普通泛化。那么什么是受限泛化呢?

    给泛化关系附加约束条件,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系叫受限泛化。预定义的约束有4种:多重、不相交、完全和不完全。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


    4、细化关系

    细化关系常与依赖关系放在一起讲,其是指对同一个事物在不同抽象层次上的描述,即假设两个模型元素A和B都描述同一个事物,他们的区别是抽象层次不同,如果B是在A的基础上的更详细的描述,则称B细化了A,或称A细化成了B。
    细化的图示符号为由元素B指向元素A的、一段为空心三角形的虚线。
    很多地方会将这种关系叫做接口与实现关系,但我私以为细化关系讲的更加精准,而且包括的范围也稍大些。
    不过这种关系常见的就是接口与实现了,在接口中一般没有属性,且很多操作都是抽象的,只有操作的申明而没有操作的实现。接口对应的类图前面要加一个 在这里插入图片描述
    在这里插入图片描述


    参考资料:
    http://www.uml.org.cn/oobject/201211231.asp
    https://www.cnblogs.com/shindo/p/5579191.html
    https://www.docin.com/p-597421698.html

  • 相关阅读:
    [NS]运行行两年了,碰到一个没遇见的问题!
    [C++][MFC]关于菜单的一些操作
    [C++][MFC]CFile的一些简单使用
    [CSharp]HTML中的模式窗口
    [C++]堆栈与堆的概念
    [RS]关于ReportingServices的开发
    [JS]在程序中使用IE的模式对话框!
    [WWF][STUDY]向Workflow传入参数
    [学习]极限编程与敏捷开发
    [C++]什么是纯虚函数
  • 原文地址:https://www.cnblogs.com/yinyoupoet/p/13287472.html
Copyright © 2020-2023  润新知