【软件工程】一篇入门UML建模图(类图)
🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
1. 前言
2. 什么是UML
3. 为什么要用UML
4. UML图有哪些编辑
4.1 类图
4.1.1 类图层次
4.1.2 对象层
4.1.3 特征层
4.1.4 关系层
泛化(Generalization)
实现(Realization)
关联(Association)
聚合(Aggregation)
组合(Composition)
依赖(Dependency)
总结
1. 前言
来理一理我们前面走过的【软件工程】学习之旅,来帮助大家更好的搞清楚软件工程学习思路。
-
软件工程是什么
- 首先定义软件工程的概念,解释其重要性和目标。
-
要通过系统化(系统定界方法)、工程化方法(引入软件开发过程)来解决软件工程问题
- 说明软件工程面临的挑战,并引入系统化和工程化方法作为解决方案。
- 因为软件工程的定义以及其目标和重要性,要求我们必须要引入工程化(分步骤、有序)、系统化(系统定界法///活动、实体、边界三要素)方法来处理软件工程问题
-
软件开发过程模型
- 在工程化的要求下,有序、有步骤来进行软件工程开发。介绍软件开发过程模型,解释其在软件工程中的角色。
-
过程模型建模方法(介绍了两种)
- 详细描述两种建模方法来建立软件开发过程模型,如何应用于软件开发过程模型的构建。(静态建模法和动态建模法)
-
计划和管理项目包括:
-
了解软件开发过程后,就需要在这个工程化思想指导下(按照软件开发过程)来计划和管理软件开发项目:
- 计划项目:项目活动图、项目工作时间、项目工作量
- 解释如何使用项目活动图和时间、工作量规划来有效计划项目。
- 管理项目:风险管理、人员管理
- 讨论项目管理的关键要素,包括如何管理风险和团队人员。
-
-
需求与更多建模方法
- 这一部分开始详细讲解前面提到的软件开发过程的各个部分,第一部分就是需求分析。
- 接续前面提到的过程模型建模方法(静态动态建模),详细介绍了ER图、UML图等静态建模方法
理清前面软件工程学习的整个思路后,我们就来进入今天的学习:UML图
2. 什么是UML
UML是Unified Model Language的缩写,中文是统一建模语言,是由一整套图表组成的标准化建模语言。
统一建模语言:一个语言,打尽所有建模方法
3. 为什么要用UML
通过使用UML使得在软件开发之前, 对整个软件设计有更好的可读性,可理解性,从而降低开发风险。同时,也能方便各个开发人员之间的交流。
通过UML对软件过程进行建模,从而让软件开发过程可以直观的为大家所交流、理解
4. UML图有哪些
UML包括静态图(结构行为图)、动态图( 动态行为图)
4.1 类图
4.1.1 类图层次
类图分为三个层次:
1.对象层 (确定有哪些类)
2.特征层 (确定每个类的具体属性和操作)
3.关系层(确定这些类之间的关系)
类图的三个层次表示: 类图所应该表现信息的多少(层次越高表示信息越多)
4.1.2 对象层
类的类型有三个:
1.边界类(系统边界):用户界面、系统接口、硬件接口
2.实体类(系统信息):系统存储的信息及相关行为
3.控制类(协调用例行为):封装用例所持有的控制行为
边界类是一种用于对系统外部环境与其内部运作之间的交互进行建模的类。
控制类用于对一个或几个用例所特有的控制行为进行建模。
实体类是用于对必须存储的信息和相关行为建模的类。
边界类,控制类,实体类很像MVC中的V层,C层,M层!!!
view层(用来和外界用户交互)、C层(方法层,交互的方法)、M层(数据库的操作对象以及表实体,数据持久层)
一个小例子:
4.1.3 特征层
就是这个系统中的类的属性和操作
类属性:所有对象的共同特征,一个类的所有对象实例,属性值相同,类属性名称有下划线。(static)
类操作: 类操作是用来操纵类属性的操作,带下划线。
4.1.4 关系层
类图的关系层:类之间的关系(泛化、实现、关联、聚合、组合、依赖):
泛化(Generalization)
- 【泛化关系】是一种继承关系,表示子类继承父类的所有特征和行为。
- 【箭头指向】带三角箭头的实线,箭头指向父类。
实现(Realization)
- 【实现关系】是一种类与接口的关系,表示类是接口所有特征和行为的实现。
- 【箭头指向】带三角箭头的虚线,箭头指向接口。
关联(Association)
- 【关联关系】是一种拥有关系,它使得一个类知道另一个类的属性和方法。
- 【代码体现】成员变量
- 【箭头指向】带普通箭头的实线,指向被拥有者。双向的关联可以有两个箭头,或者没有箭头。单向的关联有一个箭头。
聚合(Aggregation)
- 【聚合关系】是一种整体与部分的关系。且部分可以离开整体而单独存在。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
- 【代码体现】成员变量
- 【箭头指向】带空心菱形的实线,空心菱形指向整体。
组合(Composition)
- 【组合关系】是一种整体与部分的关系。但部分不能离开整体而单独存在,组合关系是关联关系的一种,是比聚合关系还要强的关系。
- 【代码体现】成员变量
- 【箭头指向】带实心菱形和普通箭头的实线,实心菱形指向整体。
依赖(Dependency)
- 【依赖关系】是一种使用关系,即一个类的实现需要另一个类的协助。
- 【箭头指向】带普通箭头的虚线,普通箭头指向被使用者。
一张总图:
![]()
5. 总结
如果觉得对你有帮助,友友们可以点个赞,收个藏呀~
相关文章:

【软件工程】一篇入门UML建模图(类图)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…...

Windows 安装Docker For Desktop概要
Windows 安装docker 下载部分的工作需要使用科学技术。如果没有可以联系博主发送已下载好的文件。 本文档不涉及技术的讲解,仅有安装的步骤。 准备工作 包含下载与环境准备,下载的文件仅下载,在后续步骤进行安装。 微软关于wsl的文档&…...
解决循环依赖报错问题
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ‘asyncTaskServiceImpl’: Bean with name ‘asyncTaskServiceImpl’ has been injected into other beans [resignServiceImpl] in its raw version as part…...

代码随想录第46期 单调栈
这道题主要是单调栈的简单应用 class Solution { public:vector<int> dailyTemperatures(vector<int>& T) {vector<int> result(T.size(),0);stack<int> st;st.push(0);for(int i1;i<T.size();i){if(T[i]<T[st.top()]){st.push(i);}else{wh…...

中仕公考怎么样?事业编面试不去有影响吗?
事业编考试笔试已经通过,但是面试不去参加会有影响吗? 1. 自动放弃面试资格:未能按时出席事业单位的面试将被视为主动放弃该岗位的竞争机会。 2. 个人信誉问题:面试作为招聘流程的关键步骤,无故缺席可能被解释为诚信…...

OMV7 树莓派 tf卡安装
升级7之后,问题多多,不是docker不行了,就是代理不好使 今天又重装了一遍,用官方的链接,重新再折腾一遍…… 使用raspberry pi imager安装最新版lite OS。 注意是无桌面 Lite版 配置好树莓派初始化设置࿰…...
Go语言24小时极速学习教程(五)Go语言中的SpringMVC框架——Gin
作为一个真正能用的企业级应用,怎么能缺少RESTful接口呢?所以我们需要尝试在Go语言环境中写出我们的对外接口,这样前端就可以借由Gin框架访问我们数据库中的数据了。 一、Gin框架的使用 1. 安装 Gin 首先,你需要在你的 Go 项目…...
【汇编】c++游戏开发
由一起学编程创作的‘C/C项目实战:2D射击游戏开发(简易版), 440 行源码分享来啦~’: C/C项目实战:2D射击游戏开发(简易版), 440 行源码分享来啦~_射击c-CSDN博客文章浏览…...

Android Studio | 修改镜像地址为阿里云镜像地址,启动App
在项目文件的目录下的 settings.gradle.kts 中修改配置,配置中包含插件和依赖项 pluginManagement {repositories {maven { urluri ("https://www.jitpack.io")}maven { urluri ("https://maven.aliyun.com/repository/releases")}maven { urlu…...

Rocky linux8 安装php8.0
Rocky linux8 安装php8.0 1.安装remi源2.列出php版本3.变更php版本,Rocky8有提供php8版本,所以切换Rocky8提供的版本,而不是remi提供的版本,不过remi有提供php8.1和php8.2版本。4.切换成remi提供的8.0版本5.安装phpendl 1.安装rem…...

Ubuntu 18 EDK2 环境编译
视频:在全新的Ubuntu上从零搭建UEFI的EDK2开发环境 开始:git clone https://github.com/tianocore/edk2.git 开始编译BaseTools前先更新一下子模块:git submodule update --init ,然后:make -C BaseTools/ 问题1&a…...

C语言项⽬实践-贪吃蛇
目录 1.项目要点 2.窗口设置 2.1mode命令 2.2title命令 2.3system函数 2.Win32 API 2.1 COORD 2.2 GetStdHandle 2.3 CONSOLE_CURSOR_INFO 2.4 GetConsoleCursorInfo 2.5 SetConsoleCursorInfo 2.5 SetConsoleCursorPosition 2.7 GetAsyncKeyState 3.贪吃蛇游戏设…...

智慧安防丨以科技之力,筑起防范人贩的铜墙铁壁
近日,贵州省贵阳市中级人民法院对余华英拐卖儿童案做出了一审宣判,判处其死刑,剥夺政治权利终身,并处没收个人全部财产。这一判决不仅彰显了法律的威严,也再次唤起了社会对拐卖儿童犯罪的深切关注。 余华英自1993年至2…...

Spring:IoC/DI加载properties文件
Spring框架可以通过Spring的配置文件完成两个数据源druid和C3P0的配置(Spring:IOC/DI配置管理第三方bean),但是其中包含了一些问题,我们来分析下: 这两个数据源中都使用到了一些固定的常量如数据库连接四要素…...

Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Docker 概述 1.1 Docker 主要组成部分 1.2 Docker 安装 2.0 Docker 常见命令 2.1 常见的命令介绍 2.2 常见的命令演示 3.0 数据卷 3.1 数据卷常见的命令 3.2 常见…...

深挖C++赋值
详解赋值 const int a 10; int b a;&a 0x000000b7c6afef34 {56496} &a 0x000000b7c6afef34 {10} 3. &b 0x000000b7c6afef54 {10} 总结: int a 10 是指在内存中(栈)中创建一个int (4 byte)大小的空间…...

【免越狱】iOS砸壳 可下载AppStore任意版本 旧版本IPA下载
软件介绍 下载iOS旧版应用,简化繁琐的抓包流程。 一键生成去更新IPA(手机安装后,去除App Store的更新检测)。 软件界面 支持系统 Windows 10/Windows 8/Windows 7(由于使用了Fiddler库,因此需要.Net环境…...
【python笔记02】面向对象思想
关于面向对象要学会啥? 面向对象编程思想面向对象基本概念 对象类 添加和获取对象属性魔术方法(三个常见的)面向对象案例 面向对象编程思想 两个时代的两个产物,没有好坏之分,小系统用面向过程,团队开发…...

Java基础-Java多线程机制
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 一、引言 二、多线程的基本概念 1. 线程与进程 2. 多线程与并发 3. 多线程的优势 三、Java多线程的实…...

MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并--封装到存储过程中
MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并–封装到存储过程中 我们的最终目的是什么?当然的自动执行这些合并操作! 上一篇 MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并 我们已经知道怎么合…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

高分辨率图像合成归一化流扩展
大家读完觉得有帮助记得关注和点赞!!! 1 摘要 我们提出了STARFlow,一种基于归一化流的可扩展生成模型,它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流(TARFlow&am…...