五、包图
- 包图
- 、基本概念
- 概念:
用来描述模型中的包和其所含元素的组织方式的图,是维护和控制系统总体结构的重要内容。
包可以把所建立的各种模型组织起来,形成各种功能或用途的模块,并可以控制包中元素的可见性以及描述包之间的依赖关系。
2、系统结构
对于系统模型的内部组织结构而言,通常采用先分层、再细分成包的方式。
分层一般是按系统架构,常用的一种方式是三层架构:
(1)用户界面层(UIL):
代表与用户进行交互的界面,既可以是Form窗口,也可以是Web界面(网页) ;不处理任何业务,负责显示与实时更新。
(2)业务逻辑层(BLL):
负责系统的业务流程,处理数据访问层传送的数据,并实现业务逻辑。
(3)数据访问层(DAL):
与数据库进行交互,负责将底层数据传送到业务逻辑层。
- 、包图的作用
1、高内聚,低耦合:
在外部观察包时,可以将内部元素视作一个整体,方便将多个元素一同处理。
包内部的元素应该保证有相似、相同的语义,或者其元素有同时更改和变化的性质。
2、其他:
包是UML中最重要的分组事物,用来组织模型中的元素。
具体作用如下:
(1)对语义上相关的元素按一定规律进行分组。例如,把功能相关的类放在一个包中。
(2)提供封装的命名空间。
同一个包中,元素不能重名,其元素的名称必须惟一。
(3)提供配置管理单元。 例如,以包为单位,对软件进行安装和配置。
(4)在设计时,提供并行工作的单元。
- 、元素的分包原则
1、分包原则
(1)、一个元素也不允许在两个包中重复出现。
(2)、一个包中的同种类元素名称必须是唯一的。相同包内元素不能重名。
(3)、“高内聚低耦合”的原则
A:包内元素要紧密联系;最大化每个包中private元素的个数。
分在同一个包中的元素应该具有某些相同的性质,即包的高内聚性。
B:包与包尽可能保持独立减少耦合度,最大限度减少包之间的依赖;最小化每个包中public、protected元素的个数。
(4)非循环依赖原则:
包之间不要形成循环依赖关系;循环依赖是由于分包不当造成的。
如果出现,解决方法: 合并法和分离法
- 包的依赖关系
- 依赖关系:
包之间的依赖关系实际上是从一个更高层次来描述包内某些元素之间的依赖关系。也就是说,如果不同包中任何素之间存在着一个依赖,则两个包之间就存在着依赖关系。
包之间的依赖关系首先需要包中的某些元素具有某种外部可见性,即可以被包外部的元素所引用。
- 循环依赖问题:
解决方案:重新分包,引入第三个包,重新建立依赖关系。

- 、包图的组成
- 包

(1)包名:
有简单名与路径名两种。
(2)包元素:
1)元素:
包中可以容纳各种高级的模型元素,
如类和类的关系、状态机、用例图、交互、协作等,甚至是一个完整的UML图。
此外,包中还可以含有包(包的嵌套)不含类的属性和操作
2)包元素的可见性:
①定义:控制包外元素对包内元素的访问权限。
②可见性:

(3)、包的构造型
1)定义:
可以使用构造型来描述包的种类。UML预定义了一些构造型,用户也可自行
定义新的构造型。
- 分类:
1、 <<system>> 和 <<subsystem>>构造型
系统和子系统包
2、 <<facade>> 构造型
(外观)构造型的包,自身不包含任何模型元素,只是引用其他包的元素,所以称为“虚包”,主要用于为其他复杂的包提供简略视图。
3、 <<stub>> 构造型
(桩)构造型的包,是一个代理包,通常应用于分布式系统的建模中,作为其他包的公共内容代理的包。
- 依赖关系
-
定义:
指两个包所包含的模型元素之间存在着一个或多个依赖。
(2)分类:
1)use关系
use 关系是一种默认的依赖关系
2)import关系
import关系使命名空间合并,是最常见的依赖关系。
import(引入/导入)关系说明
①提供者包的命名空间将被添加到客户包的公共命名空间中;
②客户包中的元素能够访问提供者包的所有公共元素;
注意:
①引入依赖是可以传递的
②客户包的元素可以使用简单名引用提供者包的元素,但提供者包的元素不能与客户包的元素同名,否则将会导致命名空间的冲突。
3)access(访问)关系
客户包中的元素能访问提供者包中的所有公共元素
但是命名空间不合并,仅把提供者包的内容附加到客户包的私有命名空间,
在客户包中必须使用路径名。
4)trace关系
追踪(追溯),表示一个包到另一个包的历史发展。
(3)注意:
①对于由对象类组成的包,若两个包中的任意两个类间存在依赖关系,则这两个包之间存在依赖关系。
②包的依赖是不传递
- 泛化关系
①特殊包必须遵循一般包的接口。对于一般性包可以标明 {abstract},定义为一个接口,该接口有多个特殊包实现。

②特殊包继承一般包中公共和受保护可见性的模型元素,并且可以重载和添加自己的类。特殊包可以替代一般包,用在一般包使用的任何地方。
③箭头指向: 特殊包(子包)→一般包(父包)
-
拥有(组成)关系
拥有关系是包嵌套时,包之间的一种组成关系,意味着子包被外围包所拥有。
- 、包图建模技术
- 包图与类图的区别:

2、建立包图的具体做法:
(1)分析系统模型元素(通常是对象类),把概念上或语义上相近的模型元素纳入一个包。
(2)对于每一个包,标出其模型元素的可视性(公共、保护或私用)。
(3)确定包与包之间的依赖联系,特别是输入依赖。
(4)确定包与包之间的泛化联系,确定包元素的多态性与重载。
(5)绘制包图。
(6)包图精化。
3、对成组的元素建模:
(1)浏览特定体系结构视图中的建模元素,找出由在概念和语义上相互接近的元素所定义的组块。
(2)把每一个这样的组块放到一个包中。
(3)对每一个包找出可以在包外访问的元素,将这些元素标记公有的,把其他的元素标记为受保护的咸私有的。如果不确定时,就隐藏该元素。
(4)确定包与包之间的依赖关系,特别是引入依赖。
(5)确定包与包之间的泛化关系,以及包的多重性和重载。
4、对体系结构视图建模:
(1)找出问题语境中一组有意义的体系结构视图。
(2)找出对于可视化、详述、构造和文档化每个视图的语义来说充分必要的元素(和图),并将它们放到合适的包中。
(3)如有必要,将这些元素进一步地组合到它们自己的包中。
(4)不同视图中的元素之间通常存在依赖关系




相关文章:
五、包图
包图 、基本概念 概念: 用来描述模型中的包和其所含元素的组织方式的图,是维护和控制系统总体结构的重要内容。 包可以把所建立的各种模型组织起来,形成各种功能或用途的模块,并可以控制包中元素的可见性以及描述包之间的依赖…...
关于重构一点简单想法
关于重构一点简单想法 当前工作的组内,由于业务开启的时间正好处于集团php-》go技术栈全面迁移的时间点,组内语言技术栈存在:php、go两套。 因此需求开发过程中通常要考虑两套技术栈的逻辑,一些基础的逻辑也没有办法复用。 在这…...
kafka使用以及基于zookeeper集群搭建集群环境
一、环境介绍 zookeeper下载地址:https://zookeeper.apache.org/releases.html kafka下载地址:https://kafka.apache.org/downloads 192.168.142.129 apache-zookeeper-3.8.4-bin.tar.gz kafka_2.13-3.6.0.tgz 192.168.142.130 apache-zookee…...
GAN对抗生成网络(二)——算法及Python实现
1 算法步骤 上一篇提到的GAN的最优化问题是,本文记录如何求解这一问题。 首先为了表示方便,记,这里让最大的可视作常量。 第一步,给定初始的,使用梯度上升找到 ,最大化。关于梯度下降,可以参考笔者另一篇…...
并发线程(21)——线程池
文章目录 二十一、day211. 线程池实现1.1 完整代码1.2 解释 二十一、day21 我们之前在学习std::future、std::async、std::promise相关的知识时,通过std::promise和packaged_task构建了一个可用的线程池,可参考文章:并发编程(6&a…...
基于32单片机的智能语音家居
一、主要功能介绍 以STM32F103C8T6单片机为控制核心,设计一款智能远程家电控制系统,该系统能实现如下功能: 1、可通过语音命令控制照明灯、空调、加热器、窗户及窗帘的开关; 2、可通过手机显示和控制照明灯、空调、窗户及窗帘的开…...
VScode怎么重启
原文链接:【vscode】vscode重新启动 键盘按下 Ctrl Shift p 打开命令行,如下图: 输入Reload Window,如下图:...
分析服务器 systemctl 启动gozero项目报错的解决方案
### 分析 systemctl start beisen.service 报错 在 Linux 系统中,systemctl 是管理系统和服务的主要工具。当我们尝试重启某个服务时,如果服务启动失败,systemctl 会输出错误信息,帮助我们诊断和解决问题。 本文将通过一个实际的…...
大模型LLM-Prompt-OPTIMAL
1 OPTIMAL OPTIMAL 具体每项内容解释如下: Objective Clarity(目标清晰):明确定义任务的最终目标和预期成果。 Purpose Definition(目的定义):阐述任务的目的和它的重要性。 Information Gat…...
3. 多线程(1) --- 创建线程,Thread类
文章目录 前言1. API2. 创建线程2.1. 继承 Thread类2.2. 实现 Runnable 接口2.3. 匿名内部类2.4. lambda2.5.其他方法 3. Thread类及其常见的方法和属性3.1. Thread 的常见构造方法3.2. Thread 的常见属性3.3. start() --- 启动一个线程3.4. 中断一个线程3.5. 等待线程3.6. 休眠…...
简单的jmeter数据请求学习
简单的jmeter数据请求学习 1.需求 我们的流程服务由原来的workflow-server调用wfms进行了优化,将wfms服务操作并入了workflow-server中,去除了原来的webservice服务调用形式,增加了并发处理,现在想测试模拟一下,在一…...
智能水文:ChatGPT等大语言模型如何提升水资源分析和模型优化的效率
大语言模型与水文水资源领域的融合具有多种具体应用,以下是一些主要的应用实例: 1、时间序列水文数据自动化处理及机器学习模型: ●自动分析流量或降雨量的异常值 ●参数估计,例如PIII型曲线的参数 ●自动分析降雨频率及重现期 ●…...
民宿酒店预订系统小程序+uniapp全开源+搭建教程
一.介绍 一.系统介绍 基于ThinkPHPuniappuView开发的多门店民宿酒店预订管理系统,快速部署属于自己民宿酒店的预订小程序,包含预订、退房、WIFI连接、吐槽、周边信息等功能。提供全部无加密源代码,支持私有化部署。 二.搭建环境 系统环境…...
计算机网络掩码、最小地址、最大地址计算、IP地址个数
一、必备知识 1.无分类地址IPV4地址网络前缀主机号 2.每个IPV4地址由32位二进制数组成 3. /15这个地址表示网络前缀有15位,那么主机号32-1517位。 4.IP地址的个数:2**n (n表示主机号的位数) 5.可用(可分配)IP地址个数&#x…...
Mac中配置vscode(第一期:python开发)
1、终端中安装 xcode-select --install #mac的终端中安装该开发工具 xcode-select -p #显示当前 Xcode 命令行工具的安装路径注意:xcode-select --install是在 macOS 上安装命令行开发工具(Command Line Tools)的关键命令。安装的主要组件包括:C/C 编…...
软件项目体系建设文档,项目开发实施运维,审计,安全体系建设,验收交付,售前资料(word原件)
软件系统实施标准化流程设计至关重要,因为它能确保开发、测试、部署及维护等各阶段高效有序进行。标准化流程能减少人为错误,提升代码质量和系统稳定性。同时,它促进了团队成员间的沟通与协作,确保项目按时交付。此外,…...
计算机网络--路由表的更新
一、方法 【计算机网络习题-RIP路由表更新-哔哩哔哩】 二、举个例子 例1 例2...
CDN防御如何保护我们的网络安全?
在当今数字化时代,网络安全成为了一个至关重要的议题。随着网络攻击的日益频繁和复杂化,企业和个人都面临着前所未有的安全威胁。内容分发网络(CDN)作为一种分布式网络架构,不仅能够提高网站的访问速度和用户体验&…...
matlab离线安装硬件支持包
MATLAB 硬件支持包离线安装 本文章提供matlab硬件支持包离线安装教程,因为我的matlab安装的某种原因(破解),不支持硬件支持包的安装,相信也有很多相同情况的朋友,所以记录一下我是如何离线安装的ÿ…...
使用virtualenv创建虚拟环境
下载 virtualenv pip install virtualenv 创建虚拟环境 先进入想要的目录 一般为 /envs virtualenv 文件名 --python解释器的版本 激活虚拟环境 .\虚拟项目的文件夹名称\Scripts\activate 退出虚拟环境 deactivate...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
