• 1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识


    要看懂设计模式,你需要懂类图(Class Diagram),也需要懂一点对象图(Object Diagram),下面介绍一些UML的必要知识,以便你学习设计模式。


    属性、操作


    下图简单介绍类的属性和操作。 类有属性(attributes)、操作(operations),属性和操作统称特性(features)。
    1.jpg 

    下图进一步详细介绍类图细节,包括:属性和操作的作用域、属性类型、参数类型、方法返回值类型等。
    2.jpg

    接口、枚举


    3.jpg

    抽象类
    4.jpg

    继承关系


    类B继承类A,如下图:
    5.jpg

    抽象类被继承,如下图:
    6.jpg

    实现关系


    实现是指某接口被实现,而不是某类被实例化。 实现如下图:


    7.jpg

    依赖关系


    先看图:
    8.jpg

    B依赖A,表示如果A的接口发生变化,B也需要相应地改变。

    依赖的常见情况有:

    1. B调用了A的方法。

    2. B的方法中,使用了A为参数。

    3. B的方法返回值类型为A。


    引用关系


    先看图:
    9.jpg

    Class1有箭头指向Class2,表示Class1中含有Class2的引用。 而上图进一步明确了具体的引用方式,就是:Class1中的私有变量m_Class2的类型是Class2。


    你可能会问:某类保持另外一个类的引用,一般都会调用另外一个类的方法,那么它们的关系不应该是依赖关系吗?引用关系与依赖关系有什么区别?

    这个问题很好!某些情况下,某类保持另外一个类的引用,但该类不调用另外一个类的方法,而是将另外一个类的引用暴露出来,供外部调用。

    例如Class1有某一属性Class2,访问该属性可获得Class2的实例:

    class1 = new Class1( );

    class2 = class1.Class2;

    Class1虽然有Class2的引用,但它自身不调用Class2的方法,而是让外部通过熟悉获得Class2的实例。


    不过很多资料及书籍对“依赖关系”及“引用关系”的解释并不到位,不同资料之间的解释甚至是互斥的。而我见到的大部分设计模式的类图都不会区分“依赖关系”和“引用关系”,大部分设计模式的类图都会画成“引用关系”,本书后面的类图也将会不区别这两者,全部画成“引用关系”。


    “包含”关系


    我将“包含”关系分为“弱包含”和“强包含”,下图上面的是“弱包含”,下图下面的是“强包含”,此图说明了两种包含的区别。
    10.jpg

    “弱包含”和“强包含”只是我的一种俗称,学术的叫法是“聚合”和“组合”,一般资料可能会搞到你很晕,下图希望可以进一步解释清楚。
    11.jpg

    设计模式的类图中不少地方会用到“包含”关系,一些资料画成“强包含”,一些资料画成“弱包含”。我个人将“强包含”看成是“弱包含”的一种特例,大部分情况下我先画成“弱包含”,有需要才转化为“强包含”。本书中的包含关系,全部都画成“弱包含”。


    对象图


    类实例化后就是对象(Object),表示这些对象及对象之间关系的图就是对象图。有时候需要用对象图来表示设计模式。


    对象图的例子:
    12.jpg

    请看下一文……

    作者:张传波

    创新工场创业课堂(敏捷课程)讲师

    软件研发管理资深顾问

    CMMI首席专家

    《火球——UML大战需求分析》作者

    www.umlonline.org创办人

  • 相关阅读:
    鸟哥的 Linux 私房菜Shell Scripts篇(一)
    证券投资基金会计核算业务指引
    在LINUX上部署SOFA
    bash: sz: command not found
    git常用命令
    git删除指定commit
    dubbo-本地直连
    java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
    设置Chrome忽略网站证书错误
    mybatis-传多个参数
  • 原文地址:https://www.cnblogs.com/umlonline/p/3385843.html
Copyright © 2020-2023  润新知