【UML】统一建模语言 UML 基础

news/2025/2/26 14:49:11

【UML】统一建模语言UML 基础

文章目录

    • 一、概述
      • 1.1 - 什么是建模
      • 1.2 建模的原则
      • 1.3 软件建模的实现过程
    • 二、 UML
      • 2.1 UML中10种图
    • 三、用例图
      • 3.1 用例之间的关系 —— 泛化关系
      • 3.2 用例之间的关系 —— 包含关系
      • 3.3 用例之间的关系 —— 扩展关系
    • 四、类图
      • 4.1 类的表示方法
      • 4.2 类之间的关系 —— 泛化关系
      • 4.3 类之间的关系 —— 实现关系
      • 4.4 类之间的关系 —— 依赖关系
      • 4.5 类之间的关系 —— 关联关系
      • 4.6 关联关系的名称
      • 4.7 关联关系的角色
      • 4.8 关联关系的多重性
      • 4.9 类之间的关系 —— 关联 - 聚合
      • 4.10 类之间的关系 —— 关联 - 组合

一、概述

1.1 - 什么是建模

统一建模语言

开发之前 规划 骨架规划好,然后

什么是建模,

软件设计:把软件开发想清楚的过程
软件工程:对软件开发全过程进行建模和管理

互联网开发模式,敏捷开发。
比如12个功能,只做一个核心功能,投放市场看用户反馈,早早与用户需求完全靠拢,极限编程。

模型:对问题的书面上的无歧义文字或图形的描述。简而言之,模型是对现实的简化。通过模型,人们可以了解所研究事物的本质。

模型是对现实实际问题的简化,比如地图。

1.2 建模的原则

1)选择建立什么样的模型对如何发现和解决问题具有重要的影响。正确的模型有助于提高开发者的洞察力。

盖狗窝 和 盖高楼不一样,盖高楼需要考虑避雷,电梯规划等等的。

2)每个模型可以有多种表达方式。使用者的身份和使用的原因是评判模型好坏的关键
3)最好的模型总是能够切合实际。模型是现实的简化,必须保证简化过程不会掩盖任何重要的细节

1.3 软件建模的实现过程

软件建模的作用是把来源于现实世界的问题转化为计算机可以理解和实现的问题。

现实世界 —映射—> 计算机世界

软件建模的实现过程是从需求入手,用墨香表达分析设计过程,最终将模型映射程软件实现。

需求 --> 模型 --> 编码

二、 UML

  1. UML(United Modeling Language, 统一建模语言): 是一种基于面向对象可视化建模语言。
  2. UML采用了一组形象化的图形(如类图)符号作为建模语言,使用这些符号可以形象地描述系统地各个方面
  3. UML通过建立图形之间的各种关系(如类与类之间的关系)来描述模型。

2.1 UML中10种图

  • 类图
  • 对象图
  • 包图
  • 组件图
  • 部署图
  • 用例图
  • 时序图
  • 协作图
  • 状态图
  • 活动图

三、用例图

1 - 用例图(Use Case Diagram): 也称为用户模型图,是从软件需求分析到最终实现的第一步,它是从客户的角度来描述系统功能。
2 - 用例图包含 3 个基本组件:
参与者(Actor): 与系统打交道的人或其他系统即使用系统的人或事物。在 UML 种参与者用人形图标表示
用例(Use Case): 代表系统的某项完整功能。在 UML 种使用一个椭圆来表示
关系: 定义用例之间的关系 —— 泛化关系、扩展关系、包含关系
在这里插入图片描述

3.1 用例之间的关系 —— 泛化关系

泛化关系:表示同一业务的目的(父用例)的不同技术实现(各个子用例)。在UML中,用例泛化用一个三角箭头从子用例指向父用例。以下是某购物网站为用户提供不同的支付方式

在这里插入图片描述

3.2 用例之间的关系 —— 包含关系

一个用例可以包含其他用例具有的行为,并把它包含的用例行为作为自身行为的一部分。在 UML 中包含关系用虚线箭头加 "<<include>>",箭头执行被包含的用例。

在这里插入图片描述

3.3 用例之间的关系 —— 扩展关系

如果在完成某个功能的时候偶尔会执行另外一个功能,则用扩展关系表示,在UML中扩展关系用虚线箭头加<<extend>>, 箭头指向被扩展的用例。
在这里插入图片描述

四、类图

类图是面向对象系统建模中最常用的图,是定义其他图的基础。
类图主要是用来显示系统中的类,接口以及它们之间的关系。
类图包含的主要元素有类、接口和关系。其中关系有泛化关系、关联关系、依赖关系和实现关系。在类途中也可以包含注释和约束

4.1 类的表示方法

  1. 类是类图的主要组件,由三部分组成:类名、属性和方法。在UML中,类用矩形来表示,顶端部分存放类的名称,中间部分存放类的属性,属性的类型及值,底部部分存放类的方法,方法的参数和返回。
  2. 在UML中可以根据实际情况由选择的隐藏属性部分或方法部分或者两者都隐藏。
  3. 在UML中,公有类型由 + 表示,私有类型用 - 表示,保护类型用 # 表示,UML的工具开发上可以使用自己定义的符号表示不同的可见性

4.2 类之间的关系 —— 泛化关系

  1. 在UML中,泛化关系用来表示类与类,接口与接口之间的继承关系,泛化关系有时也称为“is a kind of” 关系
  2. 在UML中泛化关系用一条实线空心箭头由子类指向父类
    在这里插入图片描述

4.3 类之间的关系 —— 实现关系

在UML中,实现关系用来表示类与接口之间,实现关系用一条虚线空心箭头由子类指向父类。

4.4 类之间的关系 —— 依赖关系

对于两个相对独立的系统,当一个系统负责构造另一个系统的实例,或者依赖另一个系统的服务时,这两个系统之间体现为依赖关系。例如生产零件的机器和零件,机器负责构造零件对象,充电电池和充电器,充电电池通过充电器来充电。自行车Bicycle和打气筒Pump,自行车通过打气筒来充气
在这里插入图片描述

class Bicycle
{
public:
	void run();
};
// 如果说 Person类 有一个成员方法,将Bicycle当作一个形参来传递,并且Person没有 Bicycle成员
// 就说Person类依赖于 Bicycle
class Person
{
public:
	void goToWork(Bicycle* bcl)
	{
		bcl->run();
	}
};

4.5 类之间的关系 —— 关联关系

对于两个相对独立的系统,当一个系统的实例与另一个系统的一些特定实例存在固定的对应关系时,这两个系统之间为关联关系。例如客户和订单,每个订单对应特定的客户,每一个客户对应一些特定的订单;公司和员工,每一个公司对应一些特定的员工,每个员工对应一特定的公司;自行车和主人,每辆自行车属于特定的主人,每个主任有特定的自行车。而充电电池和充电器之间就不存在固定的对应关系,同样自行车和打气筒之间也不存在固定的对应关系。
在这里插入图片描述

// 如果说 Person2 类 有一个成员方法,用到了另外一个 Bicycle类,并且还拥有Bicycle的成员
// 就说Person2 关联 Bicycle
class Person2
{
public:
	void goToWork()
	{
		bicycle->run();
	}
private:
    Bicycle bicycle;
};

关联关系比依赖关系更紧密一些

4.6 关联关系的名称

关联关系可以有一个名称,用于描述该关系的性质。此关联名称应该是动词短语,因为它表明源对象正在目标对象上执行动作。

在这里插入图片描述

4.7 关联关系的角色

当一个类处于关联的某一端时,该类就在这个关系中扮演一个特定的角色。具体来说,角色就是关联关系中一个类对另一个类所表现的职责。角色名称是名词或名词短语。
在这里插入图片描述

4.8 关联关系的多重性

指有多少对象可以参与该关联,多重性可以用来表达一个取值范围,特定值,无限定的范围

在这里插入图片描述
一个人拥有 1-n台自行车 一个自行车只能被1个人拥有

4.9 类之间的关系 —— 关联 - 聚合

  1. 聚合关系是关联关系的一种,是更强的关联关系。
  2. 聚合和整体和部分之间的关系,例如汽车由引擎、轮胎以及其他零件组成。
  3. 聚合关系也是通过成员变量来实现的。但是关联关系所设计的两个类处在同一个层次上,而聚合关系,两个类处于不同的层次上,一个代表整体,一个代表部分。 在这里插入图片描述

4.10 类之间的关系 —— 关联 - 组合

  1. UML类图关系中组合关系是关联关系的一种,是比聚合还要强的关系。
  2. 代表整体对象负责代表部分对象的生命周期

在这里插入图片描述


http://www.niftyadmin.cn/n/5868844.html

相关文章

【docker】docker swarm lock和unlock的区别,以及旧节点重启的隐患

docker swarm lock/unlock 的作用 Docker Swarm 提供了**加密集群状态&#xff08;Encrypted Raft logs&#xff09;**的功能&#xff0c;可以防止 Swarm 集群的管理数据&#xff08;如任务分配、集群配置等&#xff09;在磁盘上被未授权访问。 docker swarm lock&#xff1a…

Dockerfile 中的 COPY 语句:作用与使用详解

在 Docker 的构建过程中&#xff0c;Dockerfile 是一个核心文件&#xff0c;它定义了镜像的构建步骤和内容。其中&#xff0c;COPY 语句是一个非常重要的指令&#xff0c;用于将文件或目录从构建上下文&#xff08;通常是 Dockerfile 所在的目录及其子目录&#xff09;复制到容…

音乐游戏Dance Dance Revolution(DDR)模拟器

文章目录 &#xff08;一&#xff09;Dance Dance Revolution&#xff08;1.1&#xff09;基本情况&#xff08;1.2&#xff09;机体 &#xff08;二&#xff09;模拟器&#xff08;2.1&#xff09;主程序&#xff08;2.2&#xff09;模拟器主题 &#xff08;三&#xff09;曲谱…

基于Springboot的游戏分享网站【附源码】

基于Springboot的游戏分享网站 效果如下&#xff1a; 系统主页面 关于我们页面 登陆页面 个人中心页面 在线交流页面 游戏详情页面 用户管理页面 游戏作品页面 研究背景 随着信息技术的飞速发展&#xff0c;游戏行业迎来了前所未有的繁荣。游戏不仅是人们休闲娱乐的方式&…

DeepSeek进入开源周,分享几点关于开源的思考

最近DeepSeek进入开源周&#xff0c;又把差点被大众遗忘在角落的开源话题拉了出来。 作为一个开源作者&#xff0c;也分享几点关于开源的思考。 AI对开源的影响 开源项目遇到的最大困难 开源项目不应该商业化 你的开源项目是垃圾

算法基础篇--模拟

模拟 模拟的含义 模拟&#xff0c; 顾名思义就是题目让你干什么&#xff0c;你就干什么。考察的是将思路转化成代码的代码能⼒。这类题⼀般较为简单&#xff0c;属于竞赛⾥⾯的签到题&#xff08;但是&#xff0c;万事⽆绝对&#xff0c;也有可能会出现让⼈⾮常难受的模拟题&a…

MailKit: 在 .NET 中实现高效电子邮件发送与接收

在现代应用程序中&#xff0c;电子邮件仍然是重要的通讯方式之一。无论是个人应用程序还是企业级系统&#xff0c;邮件发送和接收功能都经常是必不可少的。本文将介绍如何使用 MailKit 这个强大的 .NET 库来实现发送和接收电子邮件的功能。 简介 MailKit 是一个跨平台的 .NET…

python实现基于文心一言大模型的sql小工具

一、准备工作 注册与登录&#xff1a; 登录百度智能云千帆控制台&#xff0c;注册并登录您的账号。 创建千帆应用&#xff1a; 根据实际需求创建千帆应用。创建成功后&#xff0c;获取AppID、API Key、Secret Key等信息。如果已有千帆应用&#xff0c;可以直接查看已有应用的AP…