美文网首页UML
UML六种关系

UML六种关系

作者: 小灰灰的青青草原 | 来源:发表于2019-07-15 00:26 被阅读0次
  1. 泛化:(Generalization):

    • 表示继承关系, 表示类/接口对父类/接口的功能扩展.
    • java语法中的extends, 用来扩展父类或父接口的功能.
    • 图形表示: 带三角箭头的实线, 箭头指向父类或父接口.


      泛化关系.png
    • 代码表示
      class Child extends Parent {}
      
  2. 实现(Realization):

    • 表示类实现接口定义的行为或功能.
    • java语法中的implements.
    • 图形表示:带三角箭头的虚线, 箭头指向接口.


      实现关系.png
    • 代码表示
      class Plane implements Flyable{
            public void fly() {}
      }
      
  3. 依赖(Dependency):

    • 表示使用关系, A需要B的协助来完成工作形成的关系, 但是这种使用关系具有临时性的特点. 比如, 厨师在烹饪的时候看了一眼菜谱, 厨师"使用"了菜谱, 照着它炒完菜后,这种使用关系就结束了(临时性).

    • java的语法中, 被依赖的对象/类, 以方法参数, 局部变量和静态方法调用的形式出现.

    • 图形表示: 因为依赖和被依赖关系比较弱, 所以使用虚线+箭头表示. 箭头指向被依赖者.而且一般是单向关系.


      依赖关系.png
    • 代码表示

        class Chef {
             public void check(Recipe r) {
                  r.showProcedure();
             }
        }  
      
  4. 关联(Association):

    • 关联关系,表示"拥有", 相比依赖关系的临时性和单向性, 关联关系具有长期性, 平等性(可双向),所以关联表示的关系比依赖更强. 比如现实生活中的夫妻, 师生等关系. 长期存在并且是相互的关系. 此外关联可以表示一对一,一对多, 多对一, 多对多等各种关系.

    • java语法中, 被拥有者作为拥有者的成员变量存在.

    • 图形表示: 因为比依赖关系更强, 所以是实线+箭头.双向关联可以省略箭头


      关联关系.PNG
    • 代码表示:

        class Husband {
            private Wife wife;
            private Address address;
        }
        class Wife {
            private Husband husband;
        }
      

后面两种关系 "聚合" 和 "组合", 都属于关联关系, 用来表示关联关系中整体与部分的关系, 虽然各有特点, 但既然都属于关联关系, 它们在语法上是没有区别的, 都是用成员变量表达.

  1. 聚合(Aggregation):

    • 表示"has-a"关系, 整体与部分的关系, 这种关系相对于组合弱一些, 整体与部分是可分离的. 比如, 部门与员工, 部门有许多员工, 员工离职了, 部门仍然存在,并不会受到影响, 部门解散了,员工可以去其他部门(整体与部分可分离)
    • 图形表示: 空心菱形+实线+箭头, 箭头指向部分, 菱形指向整体.


      聚合关系.png
  2. 组合(Composition):

    • 表示"contains-a"的关系. 是一种组装的关系. 并且整体与部分是不可分离的. 比起聚合限制更强了. 这种关系中,整体与部分的生命周期是一致的, 这个限制是非常这严苛的, 以至于在现实中很难找到符合的示例.
               但是在程序中,反而很好实现, 因为我们可以完全掌控对象的生命周期. 所以这种关系并不是对现实世界中某类关系的抽象, 而是具体的, 战术性的逻辑工具, 设计者使用它来表达类之间的这种强限制.
               例如, 在现实中, 人体和器官(整体和部分)的生命周期并不一致. 但设计的系统中并不支持器官移植之类的功能, 所以器官单独出现在系统中就没有意义, 使用组合可以明确表达这种目的.
               这也是组合唯一的目的,表示给整体与部分的关系加一层限制,而不是直接对问题域中的关系建模. 操作上可以先识别聚合(整体与部分)关系. 然后判断如果部分在整体的概念之外没有存在的意义, 就可以确定为组合.
               而在具体实现上, 可以将部分完全作为整体的内部状态, 比如私有的内部类. 这种强限制关系使用比较少.

    • 图形表示: 实心菱形+ 实线+ 箭头, 菱形指向整体, 箭头指向部分


      组合关系.png

总结

继承 实现 依赖 关联 聚合 组合
关系含义 功能扩展 功能实现 使用 拥有 整体-部分(has-a) 整体-部分(contains-a)
关系特性 - - 临时性,单向性 长期性,可双向(平等性) 整体与部分可分离 整体与部分不可分离,生命周期一致
java语法 extends implements 方法参数,局部变量,静态方法调用 成员变量 成员变量 成员变量
关系强弱 较强 较强 非常强
现实事例 父子 飞机/鸟可以飞 厨师使用菜谱,裁判使用秒表 夫妻,师生 部门-员工 -
图形表示
图形指向 箭头指向父类 箭头指向接口 箭头指向被使用者 指向被拥有者,可双向 箭头指向部分, 菱形指向整体 箭头指向部分,菱形指向整体

相关文章

  • 总结24种设计模式思想

    UML建模 常看UML建模,但是里面的关系经常很难记忆,此处记录一下。UML的六种关系:泛化、实现、关联、聚合、组...

  • UML类图中的关系

    UML中类图之间的关系有六种,依次(关系强弱)为实现(Realization)、泛化(Generalization...

  • UML关系

    UML定义的关系主要有六种:依赖、类属、关联、实现、聚合和组合。这些类间关系的理解和使用是掌握和应用UML的关键,...

  • UML六种关系

    泛化:(Generalization):表示继承关系, 表示类/接口对父类/接口的功能扩展.java语法中的ext...

  • 图说设计模式(1) 六种关系

    参考 图说设计模式 概要 本文主要介绍类之间的6种关系,UML类图,时序图 正文 一 类之间六种关系 关系1:泛...

  • UML六种依赖关系

    在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),...

  • UML的六种关系

    UML定义的关系主要有:泛化、实现、依赖、关联、聚合、组合,这六种关系紧密程度依次加强,分别看一下 泛化 概念:泛...

  • 看懂UML类图和时序图

    参考:图说设计模式 类之间的六种关系 类的继承结构表现在UML中为:泛化(generalize)与实现(reali...

  • UML中类与类间的关系及实现

    UML中类与类间的关系及实现 在面向对象的程序设计中,类之间主要有六种关系:继承, 组合, 聚合,关联, 依赖,实...

  • UML图六种箭头含义

    UML图六种箭头含义 导语 在平时的开发中,难免会遇到画UML图的时候,也就是我们所说的类图,但是UML图中的箭头...

网友评论

    本文标题:UML六种关系

    本文链接:https://www.haomeiwen.com/subject/jmbwkctx.html