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

2024软件设计师备考讲义——UML(统一建模语言)

UML的概念 

用例图的概念

  • 包含 <<include>>
  • 扩展<<exted>>
  • 泛化

        用例图(也可称用例建模)描述的是外部执行者(Actor)所理解的系统功能。用例图用于需求分析阶段,它的建立是系统开发者和用户反复讨论的结果,表明了开发者和用户对需求规格达成的共识。
        在UML中,用例表示为一个椭圆。图显示了一个图书管理系统的用例图。其中,“新增书籍信息”、“查询书籍信息”、“修改书籍信息”、“登记外借情况”、“查询外借情况”、“统计金额与册数”等都是用例的实例。


        用例分析技术为软件需求规格化提供了一个基本的元素,而且该元素是可验证、可度量的。用例可以作为项目计划、进度控制、测试等环节的基础。

泛化关系:

 聚合关系:

        聚合(Aggregation)是一种特殊形式的关联。聚合表示类之间的关系是整体与部分的关系。聚合关系的含义是“聚”在一起的意义,也就是表示“部分”可以独立于“整体”而存在。在UML模型中,使用一个带空心菱形的实线表示,空心菱形指向的是代表“整体”的类,如图13-10所示。

组合关系:

        如果发现“部分”类的存在,是完全依赖于“整体”类的,那么就应该使用“组合”关系来描述。在UML模型中,组合关系是使用带有实心菱形的实线表示,实心菱形指向的是代表“整体”的类

聚合与组合的区别在什么地方呢?

        许多书籍虽然举过很多例子,但是都忽略了,这种例子是必须依赖于“应用场景”的。也就是要根据应用场景来判断部分类和整体类之间的关系。例如:“电脑”是一个整体类,而“主板”、“CPU”......则是相对于它的部分类。那么它们之间应该整体类还是部分类呢?如果你是在固定资产管理系统中,可能适合的就是“组合”,甚至只是“电脑”类的属性;而如果对于在线DIY的系统,那么显然应该采用“聚合”关系。对于组合而言,最易于理解的例子是“订单”与“订单项”之间的关系,如果订单不存在,显然订单项也就没有意义了,因此必然是组合关系。
原则:判断是聚合还是组合关系,关键在于要放到具体的应用场景中讨论。

实现关系:

类图 

  • 依赖 
  • 关联:聚合、组合
  • 泛化 

        类关系图包含“依赖”“关联”“聚合”“组合”“实现”“继承”6种,从关系的紧密程度来看,从松到紧依次为:依赖<关联<聚合<组合<实现<继承。有趣的是,UML图中的连线貌似也体现了这种关系,简单来说,就是 虚线<实线,空心<实心 。

这6组关系按照关系的紧密程度又可以分为3组:


(1)使用关系:即B类调用了A类的方法或者使用了A类的属性,为了与下面的两组关系对应,也称为“use-a”关系,包括“依赖关系”和“关联关系”。
(2)包含关系:即B类和A类是“整体-部分”的关系,B类中包含A类,又叫“has-a"关系,包括“聚合关系”和“组合关系”。

(3)血缘关系:即B类属于A类,又叫“is-a”关系,包括“实现关系”和“继承关系”。
 

相关文章:

2024软件设计师备考讲义——UML(统一建模语言)

UML的概念 用例图的概念 包含 <<include>>扩展<<exted>>泛化 用例图&#xff08;也可称用例建模&#xff09;描述的是外部执行者&#xff08;Actor&#xff09;所理解的系统功能。用例图用于需求分析阶段&#xff0c;它的建立是系统开发者和用户反复…...

HTML——1.简介、基础、元素

一、简介 HTML&#xff08;HyperText Markup Language&#xff09;是一种用于创建网页的标记语言。它使用标记&#xff08;tag&#xff09;来描述网页的结构和内容。HTML被用于定义网页中的文本、图像、链接、多媒体以及其他元素的排列和呈现方式。 HTML文档是由一系列的HTML…...

Rust 标准库:std::env::args() 函数简介

std::env::args() 是 Rust 标准库中的一个函数&#xff0c;它属于 std::env 模块。这个函数用于获取并返回一个迭代器&#xff0c;该迭代器包含了程序运行时从命令行传入的所有参数。 当你运行一个 Rust 程序并从命令行传递参数时&#xff0c;例如&#xff1a; my_rust_progr…...

【Blockchain】GameFi | NFT

Blockchain GameFiGameFi顶级项目TheSandbox&#xff1a;Decentraland&#xff1a;Axie Infinity&#xff1a; NFTNFT是如何工作的同质化和非同质化区块链协议NFT铸币 GameFi GameFi是游戏和金融的组合&#xff0c;它涉及区块链游戏&#xff0c;对玩家提供经济激励&#xff0c…...

【Docker】搭建安全可控的自定义通知推送服务 - Bark

【Docker】搭建安全可控的自定义通知推送服务 - Bark 前言 本教程基于绿联的NAS设备DX4600 Pro的docker功能进行搭建。 简介 Bark是一款为Apple设备用户设计的开源推送服务应用&#xff0c;它允许开发者、程序员以及一般用户将信息快速推送到他们自己的iPhone、iPad等设备上…...

国内IP代理软件电脑版:深入解析与应用指南

随着互联网技术的快速发展&#xff0c;网络活动日益丰富多样&#xff0c;IP代理软件也因其独特的功能和优势&#xff0c;成为许多电脑用户不可或缺的工具。在国内&#xff0c;由于网络环境的复杂性和特殊性&#xff0c;选择一款稳定、高效的IP代理软件电脑版尤为重要。虎观代理…...

面向对象设计之开闭原则

设计模式专栏&#xff1a; http://t.csdnimg.cn/4Mt4u 目录 1.引言 2.如何理解“对扩展开放、对修改关闭” 3.修改代码就意味着违反开闭原则吗 4.如何做到“对扩展开放、对修改关闭” 5.如何在项目中灵活应用开闭原则 6.总结 1.引言 开闭原则(Open Closed Principle&…...

【项目技术介绍篇】若依项目代码文件结构介绍

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…...

实现DevOps需要什么?

实现DevOps需要什么&#xff1f; 硬性要求&#xff1a;工具上的准备 上文提到了工具链的打通&#xff0c;那么工具自然就需要做好准备。现将工具类型及对应的不完全列举整理如下&#xff1a; 代码管理&#xff08;SCM&#xff09;&#xff1a;GitHub、GitLab、BitBucket、SubV…...

Linux小程序: 手写自己的shell

注意&#xff1a; 本文章只是为了理解shell内部的工作原理&#xff0c; 所以并没有完成shell的所有工作&#xff0c; 只是完成了shell里的一小部分工作 #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include &l…...

javaSwing租户管理系统

简介 欢迎阅读本篇博客&#xff0c;今天我将为大家介绍一个基于Java Swing开发的租户管理系统。该系统具有登录、注册、添加租户、查询租户信息、修改租户信息、删除租户、修改密码、退出登录等功能模块&#xff0c;旨在提供一个便捷的租户管理解决方案。 一、项目介绍 该租…...

cesium实现竖立的圆

cesium中的圆是平行于地面的&#xff0c;想实现竖起来的圆可以使用ellipsoid&#xff0c;设置其中一个轴的radii值为一个很小的值&#xff0c;比如0.00001&#xff0c;则这个轴上的宽度就会非常小&#xff0c;看起来就是一个圆面。 一、画圆ellipse&#xff0c;此处也把画圆的代…...

汽车电子行业知识:智能汽车电子架构

文章目录 3.智能汽车电子架构3.1.汽车电子概念及发展3.2.汽车电子架构类型3.2.1.博世汽车电子架构3.2.2.联合电子未来汽车电子架构3.2.3.安波福汽车电子架构3.2.4.丰田汽车电子架构3.2.5.华为汽车电子架构 3.智能汽车电子架构 3.1.汽车电子概念及发展 汽车电子是车体汽车电子…...

LeetCode146:LRU缓存

leetCode&#xff1a;146. LRU 缓存 题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#x…...

【Unity音游制作】你玩过节奏大师吗?(Koreographe插件导入游戏主体)【一】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…...

高效解决Ubuntu Server 18.04.1 LTS 64bit更新gdb8.1.1到gdb12.1

文章目录 问题解决步骤 问题 因为需要用到gdb一些指令&#xff0c;但是gdb8.x好像存在普遍的问题&#xff0c;实现不了某些指令&#xff0c;比方说set detach-on-fork on&#xff0c;升级版本也没有比较好的教程 经过我不断的试错&#xff0c;我终于升级成功了&#xff01;&a…...

【公示】2023年度青岛市级科技企业孵化器拟认定名单

根据《青岛市科技企业孵化器管理办法》&#xff08;青科规〔2023〕1号&#xff09;&#xff08;以下简称《管理办法》&#xff09;、《关于开展2023年度市级科技企业孵化器认定申报工作的通知》&#xff0c;经申报受理、区市推荐、形式审查、专家评审及现场核查等程序&#xff…...

【软件安装】(十四)Ubuntu22.04安装Psensor硬件监视器

一个愿意伫立在巨人肩膀上的农民...... Ubuntu系统硬件运行查询输入指令太繁琐&#xff0c;终端展示不直观&#xff0c;因此这款具有可视化监控Ubuntu系统下当前电脑的硬件CPU&#xff08;中央处理器&#xff09;、GPU&#xff08;显卡&#xff09;和硬盘等温度等功能&#xff…...

数组合并小程序

题目&#xff1a; 输入有序数组a, b, 不使用排序算法&#xff0c;及额外数组&#xff0c;按大小顺序合并a, b数组&#xff0c;元素不重复&#xff1b; 思路&#xff1a; 1. 如果比插入的数组大&#xff0c;那么往后插入&#xff0c;如果继续有大的&#xff0c;就移动位置插入…...

python练习二

# Demo85def pai_xu(ls_test):#创建一个列表排序函数命名为pai_xu# 对创建的函数进行注释"""这是一个关于列表正序/倒序排列的函数:param ls_test: 需要排序的列表:return:"""ls1 [int(ls_test[i]) for i in range(len(ls_test))]#对input输入的…...

基于BLE与CircuitPython的远程服务器重启开关设计与实现

1. 项目概述与核心思路手头有几台电脑分散在家里各个角落&#xff0c;有时候它们死机了需要重启&#xff0c;但偏偏其中一台作为监控录像存储的服务器&#xff0c;被我塞进了一个带锁的柜子里。每次都得找钥匙、开门、按按钮&#xff0c;实在麻烦。这个需求催生了我动手做一个无…...

法律科技实践:基于Python与NLP的法律文书自动化处理工具集

1. 项目概述&#xff1a;一个法律从业者的效率工具箱如果你是一名律师、法务或者法律专业的学生&#xff0c;每天面对海量的法律文书、案例检索和合同审查&#xff0c;你一定会对“效率”这个词有切肤之痛。我从事法律相关工作超过十年&#xff0c;从最初的实习律师到后来独立处…...

IDM激活脚本:3分钟解锁完整版下载功能的终极指南

IDM激活脚本&#xff1a;3分钟解锁完整版下载功能的终极指南 【免费下载链接】IDM-Activation-Script-ZH IDM激活脚本汉化版 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script-ZH 还在为Internet Download Manager&#xff08;IDM&#xff09;的30天…...

开源RPA工具Clawless:本地化低代码自动化实战与核心原理

1. 项目概述&#xff1a;从“无爪”到“有手”&#xff0c;一个开源RPA项目的诞生最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;叫“Clawless”&#xff0c;直译过来是“无爪”。初看这个标题&#xff0c;你可能会有点摸不着头脑&#xff0c;这跟自动化…...

在职场上,别人对你的态度,都是你允许的:“他为什么敢这样对我?”“他为什么不怕得罪我?”“我有什么好怕的?”

当有人在公司凶你时:别问"他为什么凶我",要问"他为什么敢" 目录 当有人在公司凶你时:别问"他为什么凶我",要问"他为什么敢" 别人敢在公司得罪你,是因为他早已算清了这笔账 他不怕得罪你,说明在他眼里你"没有威胁性" …...

ARM架构CPACR与SCR寄存器详解与应用

1. ARM架构系统控制寄存器概述在ARMv8/v7架构中&#xff0c;系统控制寄存器(System Control Registers)是处理器核心功能配置的关键组件&#xff0c;它们直接控制着处理器的运行状态、安全机制和硬件资源访问权限。这些寄存器通常通过协处理器CP15进行访问&#xff08;在AArch3…...

如何用BilibiliDown轻松下载B站视频:终极跨平台免费开源工具完整指南

如何用BilibiliDown轻松下载B站视频&#xff1a;终极跨平台免费开源工具完整指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.co…...

嵌入式Linux动态引脚复用实战:RK3568 GPIO与I2C功能切换详解

1. 项目概述与核心价值在嵌入式Linux开发中&#xff0c;尤其是基于瑞芯微RK3568这类高度集成的SoC平台&#xff0c;引脚复用&#xff08;Pin Mux&#xff09;的管理是驱动开发者的基本功&#xff0c;也是从“会用”到“精通”的关键分水岭。很多朋友在初次接触时&#xff0c;往…...

Beige CSS框架:现代CSS Grid与变量驱动的极简前端开发实践

1. 项目概述&#xff1a;一个被低估的现代CSS框架如果你和我一样&#xff0c;在过去的几年里&#xff0c;已经厌倦了Bootstrap、Tailwind CSS这些“巨无霸”框架带来的审美疲劳和项目同质化&#xff0c;同时又对从零开始手写CSS的繁琐感到头疼&#xff0c;那么今天聊的这个项目…...

小红书二面:Function Calling 的可靠性怎么保证?

1. 题目分析 Function Calling 大概是 LLM 应用开发中最拧巴的一个环节——你让一个概率模型去做一件需要百分之百精确的事。模型生成的自然语言可以有措辞差异、可以有风格变化&#xff0c;用户多半不会在意&#xff0c;但一个工具调用的参数少了一个字段、日期格式从 YYYY-M…...