五、包图
- 包图
- 、基本概念
- 概念:
用来描述模型中的包和其所含元素的组织方式的图,是维护和控制系统总体结构的重要内容。
包可以把所建立的各种模型组织起来,形成各种功能或用途的模块,并可以控制包中元素的可见性以及描述包之间的依赖关系。
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...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
