zoukankan      html  css  js  c++  java
  • UML中的类图关系总结

          类图以前上课也学过,看博客也看过,对于继承实现的含义和画法早已掌握,但不知怎么回事对于依赖、组合、关联这几种关系总搞不清楚箭头应该应该指向那个类,对于他们间的具体差异有时候也会有些混淆。在此进行一个总结。

    一、各种关系的总结

    1.依赖

    可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;表现在代码层面,为类B作为参数被类A在某个method方法中使用:比如在用户登录时用户类(User)调用系统中的加解密类的加密静态方法(EncryptAndDecryptUtil.encrypt)对用户输入的密码就行加密,而后与数据库存储的密文密码就行比对。此时User与EncryptAndDecryptUtil之间的关系就是依赖;

    2.关联

    它体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;如J2EE开发中的Action和Service的关系,Action和Service的关系是长期性的,必然的

    3.聚合

    聚合是关联关系的一种特例,体现的是整体与部分、拥有的关系,即has-a的关系,但此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分

    4.组合

    组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;

    对于继承和实现这两种比较简单,在这就不再做介绍。

    小结:从代码层面看只要一个类中包含了另一个类那么它们间就存在关系,因为这个类的行为需要另一个类的某个属性或某个属性才可以实现。但是人为的对此进行了区分,就像把按照年龄这个维度将“人”区分为“婴儿、小孩、少年、青年、中年、老年”等。通过“关系紧密程度”的维度将其又区分为了“依赖、关联、组合、聚合”等。

    按照关系紧密程度有强到弱分别为:组合>聚合>关联>依赖

    二、箭头指向的总结

    1. 组合、聚合关系:A由B组成,指向A
    2. 依赖关系:A使用B的方法,指向B
    3. 关联关系:A与B关联,指向B

    参考资料:

    1. http://www.uml.org.cn/oobject/201006114.asp
    2. http://liuchuxiong2003.blog.sohu.com/168088327.html
  • 相关阅读:
    HBASE数据模型&扩展和负载均衡理论
    JVM Safepoint 安全点
    JVM垃圾回收算法 及 垃圾收集器
    JVM运行时数据区域
    Java IO、BIO、NIO、BIO
    Java反射
    Zookeeper
    二叉树深度
    二叉树层次遍历
    KMP算法
  • 原文地址:https://www.cnblogs.com/sunzhenchao/p/2826934.html
Copyright © 2011-2022 走看看