C++ UML类图

news2024/11/23 11:29:36

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

类图
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1532003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

npm出现内部错误,重新设置镜像

问题&#xff1a; 报错解释&#xff1a; 这个错误表明你尝试从一个指定的npm镜像源的响应时失败了。可能的原因包括网络问题、镜像源不可用、DNS解析问题或者镜像源的确已经下线或更改。 1.重新设置镜像源 设置淘宝镜像源&#xff1a; npm config set registry https://re…

⾃定义类型:联合和枚举

1.联合体 1.1 联合体类型的声明 像结构体⼀样&#xff0c;联合体也是由⼀个或者多个成员构成&#xff0c;这些成员可以不同的类型。 但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫&#xff1a;共⽤体。 给联合体…

安装MySQL5.7.19 + 解决数据库乱码

文章目录 1.删除mysql服务 sc delete mysql2.解压到D:\mysql5.7下3.配置管理员环境变量4.D:\mysql5.7\mysql-5.7.19-winx64下创建my.ini1.创建文件2.文件内容 5.管理员打开cmd&#xff0c;切换到 D:\mysql5.7\mysql-5.7.19-winx64\bin6.输入 mysqld -install 安装mysql服务7.初…

腾讯云服务器怎么买省钱?先领券,再下单!

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

2024年腾讯云服务器优惠券领取入口和代金券使用教程(收藏)

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

C语言经典算法-6

文章目录 其他经典例题跳转链接31.数字拆解32.得分排行33.选择、插入、气泡排序34.Shell 排序法 - 改良的插入排序35.Shaker 排序法 - 改良的气泡排序 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三角形 4. 三色棋 5. 老鼠走迷官&#xff08;一&…

10分钟带你了解分布式系统的补偿机制

我们知道&#xff0c;应用系统在分布式的情况下&#xff0c;在通信时会有着一个显著的问题&#xff0c;即一个业务流程往往需要组合一组服务&#xff0c;且单单一次通信可能会经过 DNS 服务&#xff0c;网卡、交换机、路由器、负载均衡等设备&#xff0c;而这些服务于设备都不一…

浏览量这么低,还要不要继续坚持?

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 曾经在一个群里聊天&#xff0c;有群友看到我两位数的浏览量&#xff0c;说到&#xff1a;浏览量这么低还坚持什么&#xff1f; 浏览量低是事实&#xff0c;大多数是十几二十的&#xff0c;上百的都是少数&#xff0c…

Day62:WEB攻防-PHP反序列化CLI框架类PHPGGC生成器TPYiiLaravel等利用

目录 反序列化链项目-PHPGGC&NotSoSecure NotSoSecure(综合类) PHPGGC(单项类) 反序列化框架利用-ThinkPHP&Yii&Laravel [安洵杯 2019]iamthinking Thinkphp V6.0.X 反序列化 CTFSHOW 反序列化 267 Yii2反序列化 CTFSHOW 反序列化 271 Laravel反序列化 知识…

JVM学习-类加载

目录 1.类文件结构 2.类加载器 3.类加载的三个阶段 3.1加载 3.2链接 3.2.1验证 3.2.2准备阶段 3.2.3解析阶段 3.3初始化 4.拓展&#xff1a;反射 4.1获取类对象 4.2创建实例 4.3获取方法 4.4方法调用 1.类文件结构 2.类加载器 类加载器用来将类文件的二进制字节码加载到JV…

咨询交流论坛|基于JSP+ Mysql+Java+ B/S结构的东理咨询交流论坛设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

DataFrame转换为Numpy数组

参考&#xff1a;Converting DataFrame to Numpy Array Numpy&#xff08;Numerical Python&#xff09;是一种开源的Python科学计算库&#xff0c;它提供了一个强大的多维数组对象和一系列的工具函数&#xff0c;用于处理这些数组。Pandas则是Python中另一个流行的数据处理库…

Python学习:注释和运算符

python 注释 在Python中&#xff0c;注释用于在代码中添加解释、说明或者提醒&#xff0c;但并不会被解释器执行。Python中的注释以#开头&#xff0c;直到行末为止。下面是关于Python注释的详细解释和举例&#xff1a; 单行注释&#xff1a;使用#符号在行的开头添加注释&…

闭式解,加权最小二乘法

二郎最近在看定位算法&#xff0c;里面大家提到的比较多的就是加权最小二乘法&#xff0c;而也会提到闭式解&#xff0c;所以二郎带大家一起了解一下这些方法&#xff0c;希望大家都能懂得这个方法&#xff0c;而不是一看到就发懵。 1、闭式解解析解 1&#xff09;闭式解等价于…

跟着cherno手搓游戏引擎【29】Batch简单合批

思路&#xff1a; CPU和GPU都开辟同样大小的一大块内存&#xff08;为了存储顶点信息&#xff09; 索引在程序运行时生成对应规则后绑定到索引缓冲中 动态生成顶点信息&#xff08;现在改成Drawquad只是确定图形顶点的位置&#xff09; 然后在Endscene&#xff0c;将CPU的动…

Linux:Prometheus的源码包安装及操作(2)

环境介绍 三台centos 7系统&#xff0c;运行内存都2G 1.prometheus监控服务器&#xff1a;192.168.6.1 主机名&#xff1a;pm 2.grafana展示服务器:192.168.6.2 主机名&#xff1a;gr 3.被监控服务器&#xff1a;192.168.6.3 …

产生三相任意相位差和任意相同占空比的PWM波形

整体思路 将整个PWM周期分为若干个小循环周期。划分的目的就是在任意小循环周期中&#xff0c;任何一相都不会发生0 --> 1 --> 0或1 --> 0 --> 1 电平变化超过两次的情况。 至少需要两个定时器&#xff0c;一个通用/高级定时器具有输出比较功能&#xff0c;另一…

力扣--最小覆盖子串--双端队列+滑动窗口

滑动窗口思路&#xff08;双端队列实现&#xff09;&#xff1a; 可以参考一下&#xff1a;力扣hot8---滑动窗口-CSDN博客以及力扣hot9---滑动窗口-CSDN博客。 使用滑动窗口有以下几个步骤&#xff1a;初始化双端队列&#xff08;将s的前t_len个元素入队&#xff0c;此时检验是…

竞赛 - 基于机器视觉的图像拼接算法

前言 图像拼接在实际的应用场景很广&#xff0c;比如无人机航拍&#xff0c;遥感图像等等&#xff0c;图像拼接是进一步做图像理解基础步骤&#xff0c;拼接效果的好坏直接影响接下来的工作&#xff0c;所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧&#xff0c;…

算法·动态规划Dynamic Programming

很多人听到动态规划或者什么dp数组了&#xff0c;或者是做到一道关于动态规划的题目时&#xff0c;就会有一种他很难且不好解决的恐惧心理&#xff0c;但是如果我们从基础的题目开始深入挖掘动规思想&#xff0c;在后边遇到动态规划的难题时就迎难而解了。  其实不然&#xff…