参考文章:
(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; // 组合关系
};
类图