当前位置: 首页 > article >正文

一:UML类图

一、类的设计

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
学习设计模式的第一步是看懂UML类图,类图能直观的表达类、对象之间的关系,这将有助于后续对代码的编写。
类图在软件设计及应用框架前期设计中是不可缺少的一部分,它的主要成分包括:类名类方法(成员函数)、成员变量
部分符号含义如下:
+ :公有成员(Public)
- :私有成员(Private)
# :保护成员(Protected)
下划线 :静态成员(如+staticVar: int)
类符号示意图
常见的类之间的关系包括:继承(泛化)、实现、关联、聚合、组合、依赖。根据耦合度由强到弱又分为接口实现关系、继承泛化关系、不可分离组合的关系、可分离组合的关系、关联关系和依赖关系。

文章目录

  • 一、类的设计
  • 二、关系定义及示例
    • 1.继承(泛化)
      • 1.1、示例
    • 2.实现
      • 2.1、示例
    • 3.关联
      • 3.1、示例
    • 4.聚合
      • 4.1、示例
    • 5.组合
      • 5.1、示例
      • 5.2、聚合与组合关系的区别
    • 6.依赖
      • 6.1、示例
      • 6.2、依赖场景
      • 6.3、复杂依赖示例
  • 总结

二、关系定义及示例

1.继承(泛化)

语义:子类继承父类的属性和方法(is-a关系)
画法:空心三角形箭头(子类指向父类)
派生类继承基类,基类被看作是“一般设计”,派生类被看作“特殊设计”,继承泛化关系关系也被称为一般与特殊的关系。

1.1、示例

class Animal {};
class Dog : public Animal {};  // C++

继承画法示例
多重继承如下:

class Bird : public Animal {
public:void fly() const {std::cout << "Flying..." << std::endl;}
};class Parrot : public Bird {
public:void speak() const override {std::cout << "Hello!" << std::endl;}
};

多重继承

2.实现

语义:类实现接口的方法
画法:空心三角形+虚线箭头,箭头指向基类
接口实现关系是派生类必须重写接口中所有的方法。

2.1、示例

class Flyable { virtual void fly() = 0; };
class Bird : public Flyable {};  // C++

实现关系示例

#include <iostream>
#include <vector>// 接口
class Drawable {
public:virtual void draw() const = 0;virtual ~Drawable() = default;
};// 实现类
class Circle : public Drawable {
public:void draw() const override {std::cout << "⚪ Drawing Circle" << std::endl;}
};class Rectangle : public Drawable {
public:void draw() const override {std::cout << "⬛ Drawing Rectangle" << std::endl;

相关文章:

一:UML类图

一、类的设计 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 学习设计模式的第一步是看懂UML类图,类图能直观的表达类、对象之间的关系,这将有助于后续对代码的编写。 类图在软件设计及应用框架前期设计中是不可缺少的一部分,它的主要成分包括:类名、…...

数据库三范式的理解

最近在学习数据库知识&#xff0c;发现 “数据库三范式” 这个概念特别重要&#xff0c;今天就来和大家分享一下我的理解,欢迎各位指正 一、数据库三范式是什么&#xff1f; 数据库三范式是为了让数据库结构更合理、减少数据冗余、提高数据完整性的设计规则。 第一范式&…...

Java 中 MySQL 索引深度解析:面试核心知识点与实战

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Java 中 MySQL 索引深度解析&#xff1a;面试…...

DeepSeek 部署中的常见问题及解决方案

技术文章大纲&#xff1a;DeepSeek 部署中的常见问题及解决方案 部署环境配置问题 硬件兼容性问题&#xff08;如GPU驱动版本不匹配&#xff09; 操作系统及依赖库版本冲突&#xff08;CUDA/cuDNN版本&#xff09; Python虚拟环境配置错误 模型加载与初始化失败 预训练模型…...

Nvidia Intern 笔试回忆

Nvidia intern compute arch 的笔试回忆&#xff0c;感觉强度拉满&#xff0c;两个半小时6道编程题&#xff0c;难度堪比ACM&#xff0c;需要自己写好输入输出&#xff08;ACM好歹有个签到题 &#xff09;&#xff0c;图论的题比较多&#xff0c;跟大厂面试题不是同一level...…...

鸿蒙OS基于UniApp的WebRTC视频会议系统实践:从0到1的HarmonyOS适配之路#三方框架 #Uniapp

基于UniApp的WebRTC视频会议系统实践&#xff1a;从0到1的HarmonyOS适配之路 引言 在移动互联网时代&#xff0c;实时音视频通讯已成为各类应用的标配功能。本文将结合我在某大型企业协同办公项目中的实战经验&#xff0c;详细讲解如何使用UniApp框架开发一个支持鸿蒙系统的W…...

设计模式之结构型:装饰器模式

装饰器模式(Decorator Pattern) 定义 装饰器模式是一种​​结构型设计模式​​&#xff0c;允许​​动态地为对象添加新功能​​&#xff0c;而无需修改其原始类。它通过将对象包装在装饰器类中&#xff0c;以​​组合代替继承​​&#xff0c;实现功能的灵活扩展(如 Java I/O …...

mysql分布式教程

MySQL 主从复制 主从复制原理&#xff1a;MySQL 主从复制是指数据可以从一个 MySQL 数据库服务器主节点复制到一个或多个从节点。主库将写操作记录在二进制日志文件中&#xff0c;从库的 IO 线程请求读取主库的二进制日志并写入中继日志&#xff0c;然后 SQL 线程执行中继日志中…...

MySQL安装及启用详细教程(Windows版)

MySQL安装及启用详细教程&#xff08;Windows版&#xff09; &#x1f4cb; 概述 本文档将详细介绍MySQL数据库在Windows系统下的下载、安装、配置和启用过程。 &#x1f4e5; MySQL下载 官方下载地址 官方网站: https://dev.mysql.com/downloads/社区版本: https://dev.my…...

Vue3.5 企业级管理系统实战(二十一):菜单权限

有了菜单及角色管理后&#xff0c;我们还需要根据用户访问的token&#xff0c;去获取用户信息&#xff0c;根据用户的角色信息&#xff0c;拉取所有的菜单权限&#xff0c;进而生成左侧菜单树数据。 1 增加获取用户信息 api 在 src/api/user.ts 中&#xff0c;添加获取用户信…...

kafka幂等生产者和事务生产者区别

#作者&#xff1a;张桐瑞 文章目录 消息交付可靠性保障什么是幂等性&#xff08;Idempotence&#xff09;&#xff1f;幂等性Producer事务事务型Producer 消息交付可靠性保障 所谓的消息交付可靠性保障&#xff0c;是指Kafka对Producer和Consumer要处理的消息提供什么样的承诺…...

【HarmonyOS Next之旅】DevEco Studio使用指南(二十九) -> 开发云数据库

目录 1 -> 开发流程 2 -> 创建对象类型 3 -> 添加数据条目 3.1 -> 手动创建数据条目文件 3.2 -> 自动生成数据条目文件 4 -> 部署云数据库 1 -> 开发流程 云数据库是一款端云协同的数据库产品&#xff0c;提供端云数据的协同管理、统一的数据模型和…...

批量导出CAD属性块信息生成到excel——CAD C#二次开发(插件实现)

本插件可实现批量导出文件夹内大量dwg文件的指定块名的属性信息到excel&#xff0c;效果如下&#xff1a; 插件界面&#xff1a; dll插件如下&#xff1a; 使用方法&#xff1a; 1、获取此dll插件。 2、cad命令行输入netload &#xff0c;加载此dll&#xff08;要求AutoCAD&…...

可视化大屏如何制作

超详细&#xff01;手把手教你制作可视化大屏 在当今数字化时代&#xff0c;数据犹如一座蕴藏无尽价值的宝藏&#xff0c;而可视化大屏则是开启这座宝藏大门、让数据价值得以充分展现的关键钥匙。无论是企业运营监控、数据分析展示&#xff0c;还是项目成果汇报&#xff0c;可视…...

Goreplay最新版本的安装和简单使用

一&#xff1a;概述 Gor 是一个开源工具&#xff0c;用于捕获实时 HTTP 流量并将其重放到测试环境中&#xff0c;以便使用真实数据持续测试您的系统。它可用于提高对代码部署、配置更改和基础设施更改的信心。简单易用。 项目地址&#xff1a;buger/goreplay: GoReplay is an …...

Android Studio 解决报错 not support JCEF 记录

问题&#xff1a;Android Studio 安装Markdown插件后&#xff0c;报错not support JCEF不能预览markdown文件。 原因&#xff1a;Android Studio不是新装&#xff0c;之前没留意IDE自带的版本是不支持JCEF的。 解决办法&#xff1a; 在菜单栏选中Help→Find Action&#xff…...

SMT高速贴片机核心技术深度剖析

内容概要 在智能制造升级背景下&#xff0c;SMT高速贴片机的性能直接影响电子产品的生产效率和可靠性。本文将从微米级贴装精度的实现机制出发&#xff0c;探讨高速运动控制与精准定位的协同优化方案&#xff0c;同时分析视觉系统在多类型元件识别中的动态补偿策略。针对消费电…...

sigmastar实现SD卡升级

参考文章:http://wx.comake.online/doc/DD22dk2f3zx-SSD21X-SSD22X/customer/development/software/Px/zh/sys/P3/usb%20&%20sd%20update.html#21-sd 1、构建SD卡升级包 在project下make image完成后使用make_sd_upgrade_sigmastar.sh脚本打包SD卡升级包。 ./make_sd_up…...

kafka学习笔记(三、消费者Consumer使用教程——配置参数大全及性能调优)

本章主要介绍kafka consumer的配置参数及性能调优的点&#xff0c;其kafka的从零开始的安装到生产者&#xff0c;消费者的详解介绍、源码及分析及原理解析请到博主kafka专栏 。 1.消费者Consumer配置参数 配置参数默认值含义bootstrap.servers无&#xff08;必填&#xff09;…...

yarn、pnpm、npm

非常好&#xff0c;这样从“问题驱动 → 工具诞生 → 优化演进”的角度来讲&#xff0c;更清晰易懂。下面我按时间线和动机&#xff0c;把 npm → yarn → pnpm 的演变脉络讲清楚。 &#x1f9e9; 一、npm 为什么一开始不够好&#xff1f; 早期&#xff08;npm v4 及之前&…...

JVM——Truffle:语言实现框架

引入 在编程语言的实现领域&#xff0c;传统的编译器和解释器设计往往面临着复杂性和性能优化的双重挑战。尤其是对于动态语言&#xff0c;解释器的效率问题一直是一个难以突破的瓶颈。而 Truffle 框架的出现&#xff0c;为这一难题提供了全新的解决方案。Truffle 是一个高性能…...

C++ STL vector容器详解:从原理到实践

引言 亲爱的小伙伴们&#xff0c;今天我要和大家分享一个C编程中的"神器"——vector容器&#xff01;作为STL&#xff08;标准模板库&#xff09;中最常用的容器之一&#xff0c;vector就像是一个"超级数组"&#xff0c;既有数组的高效随机访问特性&#…...

视频压制(Video Encoding/Compression)

视频压制(Video Encoding/Compression&#xff09; 视频压制是指通过特定的算法和技术&#xff0c;将原始视频文件转换为更小体积或更适合传播的格式的过程。其核心目的是在尽量保持画质的前提下&#xff0c;减少视频的文件大小&#xff0c;或适配不同播放设备、网络环境的需求…...

【论文笔记】Transcoders Find Interpretable LLM Feature Circuits

Abstract 机制可解释性(mechanistic interpretability)的核心目标是路径分析(circuit analysis)&#xff1a;在模型中找出与特定行为或能力对应的稀疏子图。 然而&#xff0c;MLP 子层使得在基于 Transformer 的语言模型中进行细粒度的路径分析变得困难。具体而言&#xff0c;…...

音视频融合中的语音分离技术实现

音视频融合中的语音分离技术实现 一、任务概述 语音分离是音频信号处理的核心任务,旨在从混合音频中分离出目标语音。音视频融合技术通过结合视觉信息(如嘴唇运动)显著提升分离效果。本方案将实现一个基于深度学习的音视频融合语音分离系统。 二、系统架构 #mermaid-svg-3…...

每天总结一个html标签——a标签

文章目录 一、定义与使用说明二、支持的属性三、支持的事件四、默认样式五、常见用法1. 文本链接2. 图片链接3. 导航栏 在前端开发中&#xff0c;a标签&#xff08;锚点标签&#xff09;是最常用的HTML标签之一&#xff0c;主要用于创建超链接&#xff0c;实现页面间的跳转或下…...

在Babylon.js中创建3D文字:简单而强大的方法

引言 在3D场景中添加文字是许多WebGL项目的常见需求。Babylon.js提供了多种创建3D文字的方法&#xff0c;其中使用TextBlock结合平面网格是一种简单而高效的方式。本文将介绍如何使用Babylon.js的GUI系统在3D空间中创建美观的文字效果。 方法概述 Babylon.js的GUI系统允许我…...

CSS 渐变完全指南:从基础概念到实战案例(线性渐变/径向渐变/重复渐变)

一、什么是 CSS 渐变&#xff1f; 渐变是网页设计中常用的视觉效果&#xff0c;指两种或多种颜色之间的平滑过渡。CSS 提供了强大的渐变功能&#xff0c;无需依赖图片即可创建复杂的色彩过渡效果&#xff0c;主要分为线性渐变和径向渐变两大类。 二、线性渐变&#xff08;Line…...

初识Docker:容器化技术的入门指南

初识Docker&#xff1a;容器化技术的入门指南 一、Docker是什么&#xff1a;容器化技术的核心概念二、Docker的核心优势2.1 环境一致性2.2 高效部署与快速迭代2.3 资源利用率高 三、Docker的安装与基本使用3.1 安装Docker3.2 Docker基本概念3.3 第一个Docker容器体验 四、Docke…...

android binder(1)基本原理

一、IPC 进程间通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;机制&#xff0c;用于解决不同进程间的数据交互问题。 不同进程之间用户地址空间的变量和函数是不能相互访问的&#xff0c;但是不同进程的内核地址空间是相同和共享的&#xff0c;我们可…...