c++ 六大类关系

1 UML中类如何表示

  • + 表示public
  • - 表示private
  • # 表示protected

2 UML中类关系符号

3 六大关系

3.1 泛化(继承)关系

泛化是类与类之间的关系表达

class Cat {
public:
    Cat();
    ~Cat();

private:
    uint32_t age;
    uint32_t height;
};

class Choumi : Cat {
public:
    Choumi();
    ~Choumi();

private:
    string belongto;
};

3.2 实现关系

实现是类与接口着之间的关系表达

class Animal {
    virtual void Move() = 0; // 纯虚函数
};

class Cat {
public:
    void Move()
    {
        // cat move
    }
};

class Dog {
public:
    void Move()
    {
        // dog move
    }
};

class Bird {
public:
    void Move()
    {
        // bird move
    }
};

3.3 聚合关系

聚合通常是被写为一个对象指针

聚合是类与类之间的关系,通常表达整体与组成部分的关系,但这两个类都可以独立存在,没有依附关系(与组合关系的区别),比如汽车类与发动机类的关系

class Engine {
public:
    uint16_t hoursePower;
};

class Car {
public:
    Engine engine;

private:
    string brand;
};

3.4 组合关系

聚合通常是被写为一个对象指针

组合是类与类之间的关系,通常表达整体与组成部分的关系,但这两个类存在依附关系(与聚合关系的区别),其中一个类的生命周期结束另一个的也随着结束,比如头和眼睛的关系

class Eye {

};

class Head {
public:
    Eye eye;
};

3.5 依赖关系

聚合通常以指针的方式用在方法参数中

依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。例如:驾驶员开车,在Driver类的drive()方法中将Car类型的对象car作为一个参数传递,以便在drive()方法中能够调用car的move()方法,且驾驶员的drive()方法依赖车的move()方法,因此类Driver依赖类Car

class Car {
public:
    void Move();
};

class Driver {
public:
    void Drive(Car car) {
        car.Move();
    }
};

3.6 关联关系

关联是两个相对独立的类与类之间的关系,当一个类的对象与另一个类的对象存在固定的对应关系时,这俩类存在关联关系。比如:顾客与商品,老师和学生,员工与公司
关联关系分为以下三种

  • 单向关联
  • 双向关联
  • 自关联
    一般在代码中,一个类包含另一个类的指针或引用

3.6.1 单向关联

3.6.2 双向关联

class Employee {
private:
    Company *company;
};

class Company {
private:
    Employee *employee;
};

3.6.3 自关联

class Node {
public:
    Node *next;
};

4 参考资料

深入浅出UML类图 http://www.uml.org.cn/oobject/201211231.asp
C++接口定义及实现举 https://www.cnblogs.com/xiaocaocao/p/8451838.html
C++ UML小结 http://www.cppblog.com/lynch/archive/2012/12/21/196518.html

posted @   今天学点啥?  阅读(262)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示