✨博客主页:何曾参静谧的博客
📌文章专栏:「C/C++」C/C++学习
相关术语
🎯
依赖关系(Dependency):
表示一个类的实现需要另一个类的协助,虚线+箭头,箭头指向被依赖的类。
🎯关联关系(Association):
表示两个类之间具有某种联系,实线+实心箭头,箭头指向被关联的类。
🎯聚合关系(Aggregation):
表示整体与部分之间的关系,空心菱形+实线,箭头指向整体。
🎯组合关系(Composition):
表示整体与部分之间的强关系,实心菱形+实线,箭头指向整体。
🎯泛化关系(Generalization):
表示一般与特殊之间的关系,实线+空心三角箭头,箭头指向父类。
🎯实现关系(Implementation):
表示接口与实现类之间的关系,虚线+空心三角箭头的虚线,箭头指向接口。
类的结构
类元素主要由类名、属性和方法三部分构成,如下所示:
- 表示private
+ 表示public
# 表示protected
其中,属性表示为:
属性名:类型
方法表示为:
方法名(参数类型):返回值类型
依赖关系(Dependency)
在C++中,一个类可以依赖于另一个类,这意味着它使用了另一个类的成员函数或数据成员。在这种情况下,被依赖的类通常被称为“依赖类”,而依赖于它的类则被称为“客户类”。
UML类图
代码示例
class Point {
public:Point(int x, int y);int getX() const;int getY() const;
private:int m_x;int m_y;
};class Line {
public:Line(Point start, Point end) : m_start(start), m_end(end) {}//构造函数初始化Point getStart() const {return m_start;}Point getEnd() const {return m_end;}
private:Point m_start;Point m_end;
};
关联关系(Association)
关联关系是一种表示类与类之间关系的方式,它表示两个类之间有相互关联的关系。在C++中,关联关系通常通过成员变量来实现。
UML类图
代码示例
在这个例子中,Class类包含一个成员变量students,它是一个存储Student对象指针的vector容器。
通过addStudent()方法,我们可以向班级中添加学生,而通过getStudents()方法,我们可以获取班级中的所有学生。
//例如,我们定义一个类Student和一个类Class,它们之间有一个关联关系,即一个班级包含多个学生:
class Student {
private:string m_name;
public:Student(string name) : m_name(name) {}string getName() {return m_name;}
};class Class {
private:vector<Student> m_students;
public:void addStudent(Student& student) {m_students.push_back(student);}vector<Student> getStudents() {return m_students;}
};
聚合关系(Aggregation)
聚合关系是一种表示类与类之间关系的方式,它表示整体和部分之间的关系。在C++中,聚合关系通常通过成员变量来实现。(部分可以离开整体,可以独立存在)
UML类图
代码示例
//定义一个类Car和一个类Engine,它们之间有一个聚合关系,即汽车包含一个引擎:
class Engine {
public:void start() {cout << "Engine is starting" << endl;}
};class Car {
private:Engine* engine;
public:Car(Engine* engine) : engine(engine) {}void start() {engine->start();cout << "Car is starting" << endl;}
};
//在这个例子中,Car类包含一个成员变量engine,它是一个指向Engine对象的指针。
//通过Car类的start()方法,我们可以启动汽车,其中会调用Engine类的start()方法来启动引擎。
组合关系(Composition)
组合关系是一种表示类与类之间关系的方式,它和聚合关系类似,但更加强调整体和部分之间的依赖关系。在C++中,组合关系通常通过成员变量来实现。(部分不能单独存在)
UML类图
代码示例
House类包含一个成员变量rooms,它是一个Room对象的数组。通过House类的openWindow()方法,我们可以打开房间中的窗户。
//定义一个Room类
class Room {
public:void openWindow() {cout << "Window is opened" << endl;}
};
//我们定义一个类House,类内包含三个Room属性
class House {
private:Room rooms[3];
public:void openWindow(int i) {rooms[i].openWindow();}
};
//它们之间有一个组合关系,即一个房屋由多个房间组成:
泛化关系(Generalization)
泛化关系是一种继承关系,表示一个类是另一个类的一般化描述。在C++中,使用关键字"public"来表示泛化关系。例如,我们有一个基类Animal,它有两个子类Dog和Cat。我们可以将Dog和Cat类声明为公共继承Animal类,如下所示:
UML类图
代码示例
class Animal {
public:void eat();void sleep();
};class Dog : public Animal {
public:void bark();
};class Cat : public Animal {
public:void meow();
};
实现关系(Realization)
实现关系是一种表示类与类之间关系的方式,它表示一个类实现了一个或多个接口。接口定义了一组规范,实现类必须按照这些规范来实现自己的方法。
UML类图
代码示例
//定义一个类Runnable,并定义了一个方法run():
class Runnable {
public:virtual void run() = 0;//纯虚函数
};
//然后定义一个类Person,它实现了Runnable里面的run()接口:
class Person : public Runnable {
public:void run() {cout << "Person is running" << endl;}
};
//在这个例子中,Person类实现了Runnable接口,并实现了其中的方法run()。
//这样,我们就可以通过Person类来实现对Runnable接口的使用。