当前位置: 首页 > 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;
http://www.lryc.cn/news/2396825.html

相关文章:

  • 数据库三范式的理解
  • Java 中 MySQL 索引深度解析:面试核心知识点与实战
  • DeepSeek 部署中的常见问题及解决方案
  • Nvidia Intern 笔试回忆
  • 鸿蒙OS基于UniApp的WebRTC视频会议系统实践:从0到1的HarmonyOS适配之路#三方框架 #Uniapp
  • 设计模式之结构型:装饰器模式
  • mysql分布式教程
  • MySQL安装及启用详细教程(Windows版)
  • Vue3.5 企业级管理系统实战(二十一):菜单权限
  • kafka幂等生产者和事务生产者区别
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(二十九) -> 开发云数据库
  • 批量导出CAD属性块信息生成到excel——CAD C#二次开发(插件实现)
  • 可视化大屏如何制作
  • Goreplay最新版本的安装和简单使用
  • Android Studio 解决报错 not support JCEF 记录
  • SMT高速贴片机核心技术深度剖析
  • sigmastar实现SD卡升级
  • kafka学习笔记(三、消费者Consumer使用教程——配置参数大全及性能调优)
  • yarn、pnpm、npm
  • JVM——Truffle:语言实现框架
  • C++ STL vector容器详解:从原理到实践
  • 视频压制(Video Encoding/Compression)
  • 【论文笔记】Transcoders Find Interpretable LLM Feature Circuits
  • 音视频融合中的语音分离技术实现
  • 每天总结一个html标签——a标签
  • 在Babylon.js中创建3D文字:简单而强大的方法
  • CSS 渐变完全指南:从基础概念到实战案例(线性渐变/径向渐变/重复渐变)
  • 初识Docker:容器化技术的入门指南
  • android binder(1)基本原理
  • 行业分析---小米汽车2025第一季度财报