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

UML-类图和类图转化为代码

提示:文章详细的讲解了类图的四种关系,以及每种关系如何转化为对应的代码。

UML-类图和类图转化为代码

  • 一、类于类之间的关系
    • 1.依赖关系
    • 2.关联关系
      • (1) 单向关联
      • (2) 双向关联
      • (3) 自关联
      • (4) 聚合关联(has-a)
      • (5) 组合关联(contains-a)
    • 3.泛化关系(is-a)
    • 4.实现关系
  • 二、UML类图转化为代码
    • 1.依赖关系(Dependency)
    • 2.泛化关系(Generalization)
    • 3.关联关系(Association)
      • (1)单向关联
      • (2)双向关联
      • (3)自关联
    • 4.聚合关系(Aggregation)
    • 5.组合关系(Composition)
    • 6.实现关系(Implementation)
  • 三、类图转化为代码例题练习
  • 四、总结


一、类于类之间的关系

1.依赖关系

  • 依赖关系 是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。
  • 依赖关系使用一个带箭头的虚线表示,箭头指向被依赖的对象(或被使用的对象)
    在这里插入图片描述

2.关联关系

  • 关联关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系。
  • 关联的多重性:
    • 关联的多重性是指有多少对象可以参与关联,它可以用来表达一个取值范围、特定值、无限定的范围或者一组离散值。
    • UML 中关联的多重性用数字标识的范围来表示,其格式为 “minimum…maximum” ,其中 minimum 和 maximum 都表示 int 类型。
    • 多重性也可以使用符号 “*” 来表示一个没有上限或者说上限为无穷大的范围。
    • 赋给一个端点的多重性表示该端点可以有多个对象与另一个端点的一个对象关联。
      在这里插入图片描述

(1) 单向关联

  • 单向关联使用一个带箭头的实线来表示,箭头指向关联的一方
    在这里插入图片描述

(2) 双向关联

  • 双向关联使用实线表示,将两个类连接起来。
    在这里插入图片描述

(3) 自关联

  • 一个类可以与自己关联,这是可以将其称为自关联或者自身关联。
    在这里插入图片描述

(4) 聚合关联(has-a)

  • 简单理解:部分类可以脱离整体而存在。
  • 部分类的生命周期独立于整体类的生命周期,即部分类能够脱离整体而单独存在,称为聚合关系。
  • 聚合关系使用一个带空心菱形的实线来表示,空心菱形指向整体
    在这里插入图片描述

(5) 组合关联(contains-a)

  • 简单理解:部分类不能够独立存在。
  • 部分类的生命周期不独立于整体类的生命周期,即部分类不能够脱离整体而单独存在,称为组合关系。
  • 组合关系使用一个带实心菱形的实线来表示,实心菱形指向整体
    在这里插入图片描述

3.泛化关系(is-a)

  • 简单理解:继承关系
  • 泛化关系使用一个带三角箭头的实线来表示,箭头指向父类,即被继承的元素。
    在这里插入图片描述

4.实现关系

  • 简单理解:实现接口
  • 实现关系使用一个带三角箭头的虚线来表示,箭头指向接口,即被实现元素。
    在这里插入图片描述

二、UML类图转化为代码

1.依赖关系(Dependency)

  • 大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。
    在这里插入图片描述
public class TV{private int color;public void change(Channel c){}public void turn_on(){}public void turn_off(){}
}
public class Channel{}

2.泛化关系(Generalization)

  • 通过 extends 关键字实现继承结构。
    在这里插入图片描述
public Tank{public void ram(){}public void radion(){}
}
public SpecialTank extends tank{}

3.关联关系(Association)

  • 关联关系表示为某个类以成员变量的形式包含其他类的对象。

(1)单向关联

在这里插入图片描述

public class ClassA{private ClassB classB;
}
public class ClassB{}

(2)双向关联

在这里插入图片描述

public class Company{private Person[] persons;
}
public class Person{private Company company;
}

(3)自关联

在这里插入图片描述

public class WorkerPerson{private WorkerPerson workerPerson;
}

4.聚合关系(Aggregation)

  • 作为成员变量利用构造方法赋值。
    在这里插入图片描述
public class Car{private Engien engien;private Wheel wheel;public Car(Engien engien, Wheel wheel){this.engien = engien;this.wheel = wheel;}
}

5.组合关系(Composition)

  • 作为成员变量在构造函数中实例化另一个对象。
    在这里插入图片描述
public OnePerson{private Head head;public OnePerson(){head = new Head();}
}
public class Head{}
...

6.实现关系(Implementation)

通过 implements 关键字实现。
在这里插入图片描述

public interface IMyInterface{public String g;public int i;public int charge();
}
public class MyClass implements IMyInterface{}

三、类图转化为代码例题练习

  • 在购物车例子中,Product 类表示一个商品,包含3个属性:id、名称和价格。Cart 类表示一个购物车,包含1个属性:产品列表,同时具有添加商品和计算商品总价的方法。User类表示一个客户,包含4个属性:姓名、邮件、密码和购物车列表。请根据描述画出类图、并用简单的代码实现用户添加商品计算价格功能
    在这里插入图片描述
public class User{private String name;private String email;private String password;private List<Cart> carts;public User(List<Cart> carts, String name, String email, String password){this.carts = carts;this.name = name;this.email = email;this.password = password;}
}
public class Product{private int id;public String name;public Float price;
}
public class Cart{public List<Product> products;public int add_product(int product){}public Float get_total_price(){float = 0.0;for(Product product : products){float += product.price;}}
}

四、总结

  • 这些关系之间的强弱程度不同,从强到弱的结果是:
    • 泛化关系=实现关系>组合关系(组合关联)>聚合关系(聚合关联)>关联关系(普通关联)>依赖关系
  • 代码转换小妙招:
    • 依赖关系和关联关系箭头指向的类都是“被动”的,写在另外一个类当中。
    • 泛化关系和实现关系三角箭头指向的都是父类或者接口。
  • 关于多重性记忆的小妙招:
    • 赋给一个端点的多重性表示该端点可以有多个对象与另一个端点的一个对象关联。

相关文章:

UML-类图和类图转化为代码

提示&#xff1a;文章详细的讲解了类图的四种关系&#xff0c;以及每种关系如何转化为对应的代码。 UML-类图和类图转化为代码 一、类于类之间的关系1.依赖关系2.关联关系(1) 单向关联(2) 双向关联(3) 自关联(4) 聚合关联(has-a)(5) 组合关联&#xff08;contains-a&#xff09…...

数据科学与大数据导论期末复习笔记(大数据)

来自于深圳技术大学&#xff0c;此笔记涵盖了期末老师画的重点知识&#xff0c;分享给大家。 等深分箱和等宽分箱的区别&#xff1a;等宽分箱基于数据的范围来划分箱子&#xff0c;每个箱子的宽度相等。等深分箱基于数据的观测值数量来划分箱子&#xff0c;每个箱子包含相同数量…...

【保姆级教程|YOLOv8添加注意力机制】【2】在C2f结构中添加ShuffleAttention注意力机制并训练

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…...

Hive聚合函数详细讲解

Hive中的聚合函数用于在数据上进行计算并返回单个值,这些值通常是基于一组行或列的汇总。以下是您提到的聚合函数的详细讲解,包括案例和使用注意事项: SUM() 功能:计算某列的总和。语法:SUM(column)案例:SELECT SUM(salary) FROM employees;注意事项:通常用于数值型列。…...

方案:如何列出 Jira 中授予用户的所有权限

文章目录 概述解决方案REST API数据库 概述 为了进行故障排除或某些管理任务&#xff0c;我们可能想知道给定用户拥有的所有权限。 Jira 通过其 UI 提供权限助手和类似工具&#xff0c;但对于所有权限的列表&#xff0c;我们只能通过作为用户本身进行身份验证的 REST API 请求…...

Flutter-Web从0到部署上线(实践+埋坑)

本文字数&#xff1a;7743字 预计阅读时间&#xff1a;60分钟 01 前言 首先说明一下&#xff0c;这篇文章是给具备Flutter开发经验的客户端同学看的。Flutter 的诞生虽然来自 Google 的 Chrome 团队&#xff0c;但大家都知道 Flutter 最先支持的平台是 Android 和 iOS&#xff…...

Redis键值设计

文章目录 1.优雅的key2.拒绝BigKey2.1.什么是BigKey2.2.BigKey的危害2.3.如何发现BigKey2.4.如何删除BigKey 3.恰当的数据类型 1.优雅的key 2.拒绝BigKey 2.1.什么是BigKey 2.2.BigKey的危害 2.3.如何发现BigKey scan扫描示例代码 final static int STR_MAX_LEN 10 * 1024;fi…...

CSS 下载进度条

<template><view class=btn>下载中</view></template><script></script><style>/* 设置整个页面的样式 */body {width: 100vw; /* 页面宽度为视口宽度 */background: #000000; /* 背景颜色为白色 */display: flex; /* 使用 flex…...

风力发电防雷监测浪涌保护器的应用解决方案

风力发电是一种利用风能转化为电能的可再生能源技术&#xff0c;具有清洁、环保、低碳的优点&#xff0c;是应对全球气候变化和能源危机的重要途径之一。然而&#xff0c;风力发电也面临着一些技术和经济的挑战&#xff0c;其中之一就是雷电的威胁。由于风力发电机组通常位于高…...

开发安全之:Database access control

Overview 如果没有适当的 access control&#xff0c;就会执行一个包含用户控制主键的 SQL 指令&#xff0c;从而允许攻击者访问未经授权的记录。 Details Database access control 错误在以下情况下发生&#xff1a; 1. 数据从一个不可信赖的数据源进入程序。 2. 这个数据用…...

VMware Vsphere 日志:用户 dcui@127.0.01已以vMware-client/6.5.0 的身份登录

一、事件截图&#xff1a; 二、解决办法 原因&#xff1a; 三、解决办法 1.开启锁定模式 2.操作 1、从清单中选择您的 ESXi 主机&#xff0c;然后转至管理 > 设置 > 安全配置文件&#xff0c;然后单击锁定模式的编辑按钮 2、在打开的锁定模式窗口中&#xff0c;选中启…...

全面了解网络性能监测:从哪些方面进行监测?

目录 摘要 引言 CPU内存监控 磁盘监控 网络监控 GPU监控 帧率监控 总结 摘要 本文介绍了网络性能监测的重要性&#xff0c;并详细介绍了一款名为克魔助手的应用开发工具&#xff0c;该工具提供了丰富的性能监控功能&#xff0c;包括CPU、内存、磁盘、网络等指标的实时监…...

智能分析网关V4基于AI视频智能分析技术的周界安全防范方案

一、背景分析 随着科技的不断进步&#xff0c;AI视频智能检测技术已经成为周界安全防范的一种重要手段。A智能分析网关V4基于深度学习和计算机视觉技术&#xff0c;可以通过多种AI周界防范算法&#xff0c;实时、精准地监测人员入侵行为&#xff0c;及时发现异常情况并发出警报…...

小红书再不赚钱就晚了

2023年12月&#xff0c;小红书COO柯南公开表态&#xff0c;五年前&#xff0c;自己当时还非常坚定地表态小红书不要做电商。“那时候&#xff0c;我是站在社区的视角&#xff0c;但现在&#xff0c;我开始负责电商业务了。”此前&#xff0c;小红书已经整合了电商业务与直播业务…...

思腾云计算三大业务:算力租赁、服务器托管、思腾公有云

1、算力租赁业务 裸金属服务器就是传统物理服务器的升级版&#xff0c;也可以说是介于物理服务器和云主机之间的一种形态。既具备传统物理服务器卓越性能&#xff0c;又具备云主机一样的便捷管理平台&#xff0c;兼具了双方的优点&#xff0c;在满足核心应用场景对高性能及稳定…...

HarmonyOS之sqlite数据库的使用

从API Version 9开始&#xff0c;鸿蒙开发中sqlite使用新接口ohos.data.relationalStore 但是 relationalStore在 getRdbStore操作时&#xff0c;在预览模式运行或者远程模拟器运行都会报错&#xff0c;导致无法使用。查了一圈说只有在真机上可以正常使用&#xff0c;因此这里…...

网络抓包命令tcpdump

网络抓包命令tcpdump "tcpdump -i any -nn -vv tcp port 9095 -s 0 -w dump.cap"命令是一个网络抓包命令&#xff0c;用于捕获流经指定网络接口的TCP协议、端口号为9095的网络数据包&#xff0c;并将这些数据包写入到名为"dump.cap"的文件中。 具体参数解…...

iTMSTransporter上传ipa文件

背景 uni-app云打包之后生成的ipa包需要上传到app store上&#xff0c;applicationloader和香蕉云编都收费&#xff0c;转用iTMSTransporter上传 环境&#xff1a;mac 第1步 选择安装目录 xcode-select --switch /Applications/Xcode.app/Contents/Developer第2步 下载 xcru…...

2024华数杯国际数学建模A题思路模型详解

2024华数杯国际数学建模A题思路论文&#xff1a;1.17上午第一时间持续更新&#xff0c;详细内容见文末名片 建立一个模型来描述放射性废水在海水中的扩散速率和方向&#xff0c;考虑到涉及的物理过程和环境因素的复杂性&#xff0c;我们通常会使用一个简化的扩散模型作为起点…...

JS-定时器-间歇函数(一)

• 定时器函数介绍 定时器函数在开发中的使用场景 网页中经常会需要一种功能&#xff1a;每隔一段时间需要自动执行一段代码&#xff0c;不需要我们手动去触发例如&#xff1a;网页中的倒计时要实现这种需求&#xff0c;需要定时器函数定时器函数有两种&#xff0c;今天我先讲…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...