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-类图和类图转化为代码
提示:文章详细的讲解了类图的四种关系,以及每种关系如何转化为对应的代码。 UML-类图和类图转化为代码 一、类于类之间的关系1.依赖关系2.关联关系(1) 单向关联(2) 双向关联(3) 自关联(4) 聚合关联(has-a)(5) 组合关联(contains-a)…...

数据科学与大数据导论期末复习笔记(大数据)
来自于深圳技术大学,此笔记涵盖了期末老师画的重点知识,分享给大家。 等深分箱和等宽分箱的区别:等宽分箱基于数据的范围来划分箱子,每个箱子的宽度相等。等深分箱基于数据的观测值数量来划分箱子,每个箱子包含相同数量…...

【保姆级教程|YOLOv8添加注意力机制】【2】在C2f结构中添加ShuffleAttention注意力机制并训练
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...
Hive聚合函数详细讲解
Hive中的聚合函数用于在数据上进行计算并返回单个值,这些值通常是基于一组行或列的汇总。以下是您提到的聚合函数的详细讲解,包括案例和使用注意事项: SUM() 功能:计算某列的总和。语法:SUM(column)案例:SELECT SUM(salary) FROM employees;注意事项:通常用于数值型列。…...
方案:如何列出 Jira 中授予用户的所有权限
文章目录 概述解决方案REST API数据库 概述 为了进行故障排除或某些管理任务,我们可能想知道给定用户拥有的所有权限。 Jira 通过其 UI 提供权限助手和类似工具,但对于所有权限的列表,我们只能通过作为用户本身进行身份验证的 REST API 请求…...

Flutter-Web从0到部署上线(实践+埋坑)
本文字数:7743字 预计阅读时间:60分钟 01 前言 首先说明一下,这篇文章是给具备Flutter开发经验的客户端同学看的。Flutter 的诞生虽然来自 Google 的 Chrome 团队,但大家都知道 Flutter 最先支持的平台是 Android 和 iOSÿ…...

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…...

风力发电防雷监测浪涌保护器的应用解决方案
风力发电是一种利用风能转化为电能的可再生能源技术,具有清洁、环保、低碳的优点,是应对全球气候变化和能源危机的重要途径之一。然而,风力发电也面临着一些技术和经济的挑战,其中之一就是雷电的威胁。由于风力发电机组通常位于高…...
开发安全之:Database access control
Overview 如果没有适当的 access control,就会执行一个包含用户控制主键的 SQL 指令,从而允许攻击者访问未经授权的记录。 Details Database access control 错误在以下情况下发生: 1. 数据从一个不可信赖的数据源进入程序。 2. 这个数据用…...

VMware Vsphere 日志:用户 dcui@127.0.01已以vMware-client/6.5.0 的身份登录
一、事件截图: 二、解决办法 原因: 三、解决办法 1.开启锁定模式 2.操作 1、从清单中选择您的 ESXi 主机,然后转至管理 > 设置 > 安全配置文件,然后单击锁定模式的编辑按钮 2、在打开的锁定模式窗口中,选中启…...

全面了解网络性能监测:从哪些方面进行监测?
目录 摘要 引言 CPU内存监控 磁盘监控 网络监控 GPU监控 帧率监控 总结 摘要 本文介绍了网络性能监测的重要性,并详细介绍了一款名为克魔助手的应用开发工具,该工具提供了丰富的性能监控功能,包括CPU、内存、磁盘、网络等指标的实时监…...

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

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

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

HarmonyOS之sqlite数据库的使用
从API Version 9开始,鸿蒙开发中sqlite使用新接口ohos.data.relationalStore 但是 relationalStore在 getRdbStore操作时,在预览模式运行或者远程模拟器运行都会报错,导致无法使用。查了一圈说只有在真机上可以正常使用,因此这里…...
网络抓包命令tcpdump
网络抓包命令tcpdump "tcpdump -i any -nn -vv tcp port 9095 -s 0 -w dump.cap"命令是一个网络抓包命令,用于捕获流经指定网络接口的TCP协议、端口号为9095的网络数据包,并将这些数据包写入到名为"dump.cap"的文件中。 具体参数解…...
iTMSTransporter上传ipa文件
背景 uni-app云打包之后生成的ipa包需要上传到app store上,applicationloader和香蕉云编都收费,转用iTMSTransporter上传 环境:mac 第1步 选择安装目录 xcode-select --switch /Applications/Xcode.app/Contents/Developer第2步 下载 xcru…...
2024华数杯国际数学建模A题思路模型详解
2024华数杯国际数学建模A题思路论文:1.17上午第一时间持续更新,详细内容见文末名片 建立一个模型来描述放射性废水在海水中的扩散速率和方向,考虑到涉及的物理过程和环境因素的复杂性,我们通常会使用一个简化的扩散模型作为起点…...

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

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...