【软件工程】一篇入门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数据库查询合并 我们已经知道怎么合…...
MATLAB向量元素的引用
我们定义一个向量后,如果想引用的话,可以通过索引 i n d ind ind来实现。 注意:MATLAB中向量的开始索引是1,与许多编程语言不同。 例如: 如果想引用多个的话,可以用索引 i n d ind ind来提取多个位置 例如…...
leetcode-44-通配符匹配
题解: 代码: 参考: (1)牛客华为机试HJ71字符串通配符 (2)leetcode-10-正则表达式匹配...
基于YOLOv8深度学习的智慧课堂学生专注度检测系统(PyQt5界面+数据集+训练代码)
本研究提出了一种基于YOLOv8深度学习的智慧课堂学生专注度检测系统,旨在实现对课堂中学生专注度的实时分析与评估。随着智慧教育的快速发展,学生的课堂表现和专注度成为评估学习效果的重要因素之一。然而,传统的专注度评估方法往往依赖于主观…...
vue项目使用eslint+prettier管理项目格式化
代码格式化、规范化说明 使用eslintprettier进行格式化,vscode中需要安装插件ESLint、Prettier - Code formatter,且格式化程序选择为后者(vue文件、js文件要分别设置) 对于eslint规则,在格式化时不会全部自动调整&…...
Java基础-组件及事件处理(中)
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 BorderLayout布局管理器 说明: 示例: FlowLayout布局管理器 说明: …...
UNIX网络编程-TCP套接字编程(实战)
概述 TCP客户端/服务器程序示例是执行如下步骤的一个回射服务器: 客户端从标准输入读入一行文本,并写给服务器。服务器从网络输入读入这行文本,并回射给客户端。客户端从网络输入读入这行回射文本,并显示在标准输出上。 TCP服务器…...
python编写一个自动清理三个月以前的邮件脚本
以下是一个使用 Python 编写的自动清理三个月以前的邮件的脚本。这个脚本适用于连接支持 IMAP 协议的邮箱服务,例如 Gmail。请注意,在执行此操作时,您需要提供电子邮件账号和应用程序专用密码(建议不要使用普通密码,并…...
C++组合复用中,委托的含义与作用
委托(Delegation)的含义与作用 委托是一种软件设计技术,它允许一个对象在处理某个请求时,将请求的处理责任转移给另一个对象。委托的核心思想是通过组合(composition)而不是继承(inheritance&a…...
自制C++游戏头文件:C++自己的游戏头文件!!!(后续会更新)
引言 在这个数字时代,计算机游戏已经成为人们生活中不可或缺的一部分。它们不仅为我们带来了无尽的乐趣,还激发了我们的创造力和解决问题的能力。今天,我们将深入探讨一个特别的头文件——CPPgame.h,它包含了多个结构体和函数&am…...
java 读取 有时需要sc.nextLine();读取换行符 有时不需要sc.nextLine();读取换行符 详解
在 Java 中,使用 Scanner 类读取输入时,换行符的处理行为取决于所用的读取方法。不同方法的工作原理会影响是否需要额外调用 sc.nextLine() 来清理缓冲区中的换行符。 核心问题 根本原因:Scanner 是基于输入流工作的,而换行符&am…...
wordpress知识管理系统/网络营销师是干什么的
use the default version...
wordpress自带主题有什么用/常德seo公司
使用基于域名的虚拟主机配置是比较流行的方式,可以在同一个IP上配置多个域名并且都通过80端口访问。 (1) 在网卡 eth0的第五个接口上配置 192.168.1.215 这个地址: (2) 配置/etc/hosts文件,192.168.1.215 对应的域名如下: 做ping测…...
网站开发 ppt/自动推广工具
作者:Jose A Dianes ;翻译:季洋 ;校对:丁楠雅本文约5822字,建议阅读20分钟。本系列将介绍如何在现在工作中用两种最流行的开源平台玩转数据科学。先来看一看数据分析过程中的关键步骤 – 探索性数据分析。内…...
wordpress 反斜杠/2022小说排行榜百度风云榜
**一个优秀的Android开发者,一定有扎实的Java基础知识。**今天给大家分享一下我们必须掌握的Java知识点。 设计模式 我为什么把设计模式放在最前面?因为Android系统框架层里,要用到大量的设计模式,如果你设计模式没学好…...
沧州做网站公司/海外推广方案
小编一直都在使用的媒体格式转换工具是Permute 3 for mac,目前已经更新到3.1.8最新版本了,使用Permute 3 for mac(媒体格式转换工具) 3.1.8中文激活版你可以对图片的PNG、JPEG、TIFF格式,对于视频的AAC、MP3、WAV、M4A等格式都可以进行转换&a…...
美食网站建设日程表/网络营销的模式有哪些?
企业根CA如何发放客户机证书-L2TP证书问题的补充说明<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />在ISA系列第二十一篇的博文中,我们介绍了如何在***服务器中使用L2TP协议。L2TP可以使用证书或预共享密…...