zoukankan      html  css  js  c++  java
  • UML类图关系模式(C++代码说明)

    在UML类图中的关系模式主要有以下几种: 泛化(Generalization),  实现(Realization), 关联(Association), 聚合(Aggregation), 依赖(Dependency) 等。

    1. 泛化(Generalization)

    泛化关系: 是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为. 老虎是动物的一种, 即有老虎的特性也有动物的共性.  见下图:

    用代码表示如下:

    // Animal.h  
    class CAnimal  
    {  
    public:  
        // implement  
        virtual HRESULT EatSomething()  
        {  
            // Do something  
        }  
    };  
      
    // Tiger.h  
    #include "Animal.h"  
    class CTiger : public CAnimal  
    {  
        // Do something  
    };  
    

    2. 实现(Realization)

    实现关系: 是一种类与接口的关系, 表示类是接口所有特征和行为的实现. 见下图:

    用代码表示如下:

    // Animal.h  
    class CAnimal  
    {  
    public:  
        // interface  
        virtual HRESULT EatSomething() = 0;  
    };  
      
    // Tiger.h  
    #include "Animal.h"  
    class CTiger : public CAnimal  
    {  
        // Do something  
    };  
    

        注: 泛化和实现的区别就在于子类是否继承了父类的实现, 如有继承则关系为泛化, 反之为实现.

    3. 关联(Association)

    关联关系: 是一种拥有的关系, 可以分为双向关联, 单向关联和自身关联.
    双向关联是指双方都拥有对方的引用, 都可以调用对方的公共属性和方法. 见下图:

    用代码表示如下:
    // Husband.h  
    #include "wife.h"  
    class CHusband  
    {  
    public:  
        CWife* pWife;  
    };  
      
    // Wife.h  
    #include "Husband.h"  
    class CWife  
    {  
    public:  
        CHusband* pHuband;  
    };  
    

    上图中丈夫和妻子是比较公平的关系, 都可以使用对方公共的属性.

      单向关联是指只有某一方拥有另一方的引用, 这样只有拥有对方者可以调用对方的公共属性和方法. 如下图:

    UML类图关系模式及C++代码说明 - lei - lei
      用代码表示如下:
    // Husband.h  
    class CHusband  
    {  
    public:  
        int nMoney;  
        void GoShopping();   
    };  
      
    // Wife.h  
    #include "Husband.h"  
    class CWife  
    {  
    public:  
        CHusband* pHuband;  
    };  
    

      上图中妻子拥有丈夫, 可以使用对方的属性, 比如钱, 可以让对方做能做的事, 比如去买东西.
      自身关联是指拥有一个自身的引用. 如下图

    UML类图关系模式及C++代码说明 - lei - lei

      用代码表示如下:

    // SingleMan.h  
    class CSingleMan  
    {  
    public:  
        CSingleMan *pSingleMan;  
    };  

    4. 聚合(Aggregation)和组合(Composition)

    聚合关系: 是整体与部分的关系, 且部分可以离开整体而单独存在. 如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.
    组合关系: 是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门.

    UML类图关系模式及C++代码说明 - lei - lei

    用代码表示如下:

    // Car.h  
    #include "Tyre.h"  
    class CCar  
    {  
    public:  
        CTyre cTyre;  
    };  
      
    // Tyre.h  
    #include "Car.h"  
    class CTyre  
    {  
        // Do something  
    };  
    
    // Company.h  
    #include "Department.h"  
    class CCompany  
    {  
    public:  
        CDepartment cDepartment;  
    };  
      
    // Department.h  
    #include "Company.h"  
    class CDepartment  
    {  
        // Do something  
    };  
    

    5. 依赖(Dependency)

    依赖关系: 是一种使用的关系,  即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖. 如下图:

    UML类图关系模式及C++代码说明 - lei - lei

     用代码表示如下:

    // Car.h  
    class CCar  
    {  
        // Do something  
    };  
      
    // Person.h  
    #include "Car.h"  
    class CPerson  
    {  
        void MoveFast(CCar &pCar);  
    };  
    

      上图中人的快速移动需要有车的协助, 但是这种依赖是比较弱的, 就是人也可以不用车而用其他工具, 与关联不同的是人不必拥有这辆车只要使用就行.

  • 相关阅读:
    Mybatis核心
    正则表达式(二)Java中正则表达式的使用
    Elasticsearch(ES)分词器的那些事儿
    并发编程之:JUC并发控制工具
    scrollTo()和scrollBy()的区别
    SpringBoot 的@Value注解太强大了,用了都说爽!
    SQL 查询并不是从 SELECT 开始的
    jsoup 教程
    爬虫
    case when以及集合聚合函数的用法
  • 原文地址:https://www.cnblogs.com/ThatsMyTiger/p/6739578.html
Copyright © 2011-2022 走看看