zoukankan      html  css  js  c++  java
  • 设计模式 uml元素

    uml的构造包含3种

    • 事物4种:结构,行为,分组,注释事物
    • 关系4种:泛化,实现,依赖,关联,
    • 图10种,用例图,类图,对象,包,组件,部署,状态,活动,序列,协作

    事物是对模型中最具代表性的成分的抽象,关系把事物结合到一起,图聚集了相关的事物

    下面说最常见的关系:类与类,类与接口,接口与接口之间,

    • generalization泛化generalization,  是一个类(成为子类,子接口)继承自另外的一个类(父类,父接口)的功能,就是继承的关系,c++或java的继承关系就是表示这个概念,是最常见的关系.在设计的时候很明确,没有争议.java中通过extends关键字

      

    • 实现realization,,实现关系指的是一个class类显得interface接口(可以是多个)的功能. 实现是类和接口之间最常见的额关系;在java此类关系由关键字implements标识
    • -
    • -
    • -
    • 依赖dependency, 

      • 类与类之间的关系,表示一个类依赖于另一个类的定义. 依赖关系总是单向的.
      • 可以简单的理解:A依赖于B,  就是一个类A使用了另一个类B,而这种使用关系具有偶然性,临时性,非常弱. 但是B的变换会影响到A.
      • 比如某人需要过河,此时人与船之间的关系就是依赖,
      • 表现在代码平面:就是类B作为参数被类A在某个method方法中使用.
      • -
      • -
      • -
    • 关联association(关联,聚合,合成)
      • 表示类与类之间的关系,它使得一个类知道另一个类的属性和方法
      • 关联可以使用单箭头表示单向关联,使用双箭头或不用箭头表示双向关联,不建议使用双向关联.
      • 关联有两个端点,在每个端点可以有一个基数,表示这个关联的类可以有几个实例
        • 常见的基数及含义:
        • 0..1:  
        • 0..*:  
        • 1:  
        • 1..*:  
      • 关联体现的是两个类,或者类与接口之间语义级别的一种强依赖关系,
      • 比如我和我的朋友,这种关系比依赖更强,不存在依赖关系的偶然性,关系也不是临时的,一般是长期性的,双方的关系一般是平等的
      • 标在代码上,被关联类B以类属性的形式出现在关联类A中,,,,也可能是关联类A引用了一个类型为被关联类B的全局变量
      • 在java语言中关联关系是使用实例变量实现的.
      • -
      • -
      • 聚合aggregation关系,关联关系是一种特例,是强的关联关系.
        • 聚合是整体与个体之间点关系,即has-a关系
        • 此时整体与部分之间是可分离的,他们可以具有各自的生命周期,
        • 部分可以属于多个整体对象,也可以为多个整体对象共享
        • 比如计算机与cpu,公司与员工的关系
        • 在代码上,和关联关系是一致的,只能从语义级别来区分
      • -
      • 组合(合成)composition,也是关联的一种特例,体现的是contains-a的关系
        • 这种关系比聚合更强,叫强聚合
        • 它同样体现整体与部分的关系,但此时整体与部分是不可分的.
        • 整体的生命周期结束就意味着部分的生命周期的,比如人和大脑(看自己理解)
        • 合成关系是不能共享的(什么意思?)
        • 在代码上,和关联关系是一致的,只能从语义级别来区分
      • -
      • 组合和聚合几乎相同,唯一的区别就是部分 不能脱离  整体 单独存在.就是说,部分的生命周期 不能比整体 还要长.
      • -

    -总结:对于继承,实现(实例化)没有多少疑问,体现的是类与类,类与接口简单纵向关系

    其他的四种关系,体现的是类与类,类与接口见的引用,横向关系,需要仔细讨论.有时候在代码层面也不是很好区分.但是总体来说,强弱关系为:  组合>聚合>关联>依赖

    http://www.uml.org.cn/oobject/201006114.asp

  • 相关阅读:
    Linux利器strace
    记一次MongoDB性能问题
    mongodb慢查询记录
    PHP操作MongoDB学习笔记
    字典NSDictionary的常见用法
    字典与自定义对象的相互转换
    URLString中文字符转义
    常见序列化与反序列化方法
    Swift处理异常的三种方式-try
    客户端Socket使用步骤
  • 原文地址:https://www.cnblogs.com/li-daphne/p/5561348.html
Copyright © 2011-2022 走看看