C++UML类图
- 手机
- 2025-07-22 20:24:01

参考文章: (1)C++ UML类图详解 (2)C++基础——用C++实例理解UML类图 (3)C++设计模式——UML类图 (4)[UML] 类图介绍 —— 程序员(灵魂画手)必备画图技能之一
UML类图绘制网站:https://app.creately.com/d/3mN279zFJQu/edit/s/DK6myET1aVb
1 UML类图基本概念 UML类图是面向对象建模中最重要、最常用的图。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。
3个基本组件:类名、属性、方法 示例
class Circle { private: double radius_; Point center_; public: void setRadius(double _radius); void setCenter(Point _center); double getArea() const; double getCircumfrence() const; }符号与访问权限
public:+protected:#private:-关系的表示 (1)关联(Association) 类中的对象与对象之间的引用关系
(2)聚合(Aggregation) 即使整体不存在了,部分仍然存在
(3)组合(Composition) 整体不存在了,部分也不复存在
(4)继承(Inheritance)或泛化(Generalization) Mac继承了电脑,是电脑的子类
(5)依赖(Dependency) 通常描述一个对象在运行期间会用到另一个对象的关系 (6)实现(Realization) 继承抽象类和实现接口都属于实现关系
2 从代码到类图示例代码如下,将代码建模成UML类图
#include <string> #include <vector> // 基类(父类)Person class Person { public: Person(std::string name): name(name) {} virtual void showName() { /*...*/ } // 虚函数 private: std::string name; }; // 子类 Student class Student : public Person { public: Student(std::string name, int studentID): Person(name), studentID(studentID) {} void enrollCourse(class Course*); // 单项关联 virtual void showName() override { /*...*/ } // 覆写虚函数 private: int studentID; std::vector<class Course*> courses; // 自关联 }; // 子类 Teacher class Teacher : public Person { public: Teacher(std::string name, int teacherID): Person(name), teacherID(teacherID) {} void assignCourse(class Course*); private: int teacherID; }; // Course 类 class Course { public: Course(std::string name): name(name) {} void setTeacher(Teacher*); // 单项关联 private: std::string name; Teacher* teacher; // 双向关联 std::vector<Student*> students; // 双向关联 }; // Library 类 class Library { public: Library(std::vector<class Book*> books): books(books) {} private: std::vector<class Book*> books; // 聚合关系 }; // Book 类 class Book { public: Book(std::string title): title(title) {} }; // School 类 class School { public: School(std::vector<Student*> students, Library* library): students(students), library(library) {} private: std::vector<Student*> students; // 组合关系 Library* library; // 组合关系 };类图