zoukankan      html  css  js  c++  java
  • 0.UML图入门——学习《大话设计模式》笔记

    《大话设计模式》中讲述了UML类图的基本用法,做此笔记加深理解。

    注:上图来源于《大话设计模式》

    上图中设计的关键术语为:继承、实现、聚合、组合、关联、依赖。

    要想弄清楚UML图的原理,必须深入理解上述六大术语的基本含义。

    • 继承表示:

    //鸟类
    class Bird
    {
    public:
        void layeggs() {
    
        }
    
    private:
        string color;
    };
    
    //大雁类继承自鸟类
    class wildGoose : public Bird
    {
    public:
        void layeggs() {
    
        }
        void fly() {
    
        }
    };
    
    //鸭子类继承自鸟类
    class duck : public Bird
    {
        void layeggs() {
    
        }
        void swimming() {
    
        }
    };

    继承关系为is-a关系,上述关系中,大雁、鸭子、企鹅均属于鸟类,则其继承自鸟类,其中,箭头方向所指动物类。

    • 实现表示:(在C++中继承自抽象类也选用此种表示方式)

    //动物类
    class Animal
    {
    public:
        //声明了纯虚函数的类,都成为抽象类。
        virtual void live() = 0;
    
    private:
        string food;
    };
    
    //鸟类继承自动物类
    class Bird : public Animal
    {
    public:
        void layeggs() {
    
        }
        void fly() {
    
        }
    private:
        string teeth;
    };

    在Java中有接口的概念,上图中大雁实现了飞翔接口;在C++中,动物类为抽象类,鸟类继承自抽象类,同样适用虚线进行表示。

    • 聚合表示:

    //大雁类继承自鸟类
    class wildGoose : public Bird
    {
    public:
        void layeggs() {
    
        }
        void fly() {
    
        }
    };
    
    //雁群类
    class wildGooseGroup
    {
    public:
        wildGoose *wildgoose;
    public:
        wildGooseGroup(wildGoose *wildgoose) {
            this->wildgoose = wildgoose;
        }
        wildGooseGroup() {
    
        }
    };

    聚合表示个体与整体的关系,可以表示为 has-a ,但是需要注意的是个体与整体属于外在的构成,即一个对象参与构成了一个整体,如同学生组成班级的关系,即使整体不存在的情况下,个体还是可以存在的,即两者之间生命周期不同步。

    • 组合表示:

    //翅膀类
    class Wings
    {
    public:
        Wings(){}
        ~Wings(){}
    };
    
    //大雁类继承自鸟类
    class wildGoose : public Bird
    {
    public:
        void layeggs() {
    
        }
        void fly() {
    
        }
    private:
        //大雁类中包含翅膀类
        Wings wings;
    };

    组合表示部分与整体的关系,可以表示为  contains-a 关系,部分与整体属于内在的组成,即一个对象称为了整体的一部分,如同大脑与身体的关系,若整体不存在的情况下,部分是不会存在的。

    注:

    聚合表示  class A {…}  class B { A* a; …..}    用到指针,从而表示两者生命周期不同步。

    组合表示   class A{…} class B{ A a; …}

    • 关联表示:

    //企鹅类继承自鸟类
    class penguin : public Bird
    {
    public:
        void layeggs() {
    
        }
    private:
        Climate climate;
    };

    关联表示不同类之间的结构关系,其中一个类可以“知道”另外一个类,其中箭头指向被关联的类。继承、组合、聚合、依赖均为关联关系的一种表现形式

    关联关系作用时间持久。一个对象保存了对另外一个对象的引用,并在需要的时候调用这个对象的方法。

    上述企鹅类中保存了气候对象,相对于组合等表现形式,关联所体现的为企鹅类与气候类之间一种很弱的联系。

    • 依赖表示:

     

    //鸟类
    class Bird
    {
    public:
        Bird(Oxygen oxygen, Water water) {
    
        }
        ~Bird(){}
        void layeggs() {
    
        }
    
    private:
        string color;
    };

    依赖关系表明一个类会使用到另一个类的情况,主要体现在“临时”情况下,比如可以体现在构造函数使用、传参使用。箭头指向被依赖的类。

    补充例子:

    你与你的手之间是组合关系(手是你身体的一部分,不可归其他所有);

    你与你你的班级之间是聚合关系(班级没有你仍然存在);

    你与你朋友之间是关联关系;

    你与水之间是依赖关系;

  • 相关阅读:
    MySQL数据库学习【第三篇】增删改查操作
    MySQL数据库学习【第二篇】基本操作和存储引擎
    MySQL数据库学习【第一篇】数据库安装
    python全栈开发基础【第二十七篇】IO模型
    python全栈开发基础【第二十六篇】(concurrent.futures模块、协程、Greenlet、Gevent)
    python基础之带参数装饰器和迭代器
    python基础之闭包函数与装饰器
    逻辑回归
    朴素贝叶斯
    决策树
  • 原文地址:https://www.cnblogs.com/chenleideblog/p/11645864.html
Copyright © 2011-2022 走看看