五、包图
- 包图
- 、基本概念
- 概念:
用来描述模型中的包和其所含元素的组织方式的图,是维护和控制系统总体结构的重要内容。
包可以把所建立的各种模型组织起来,形成各种功能或用途的模块,并可以控制包中元素的可见性以及描述包之间的依赖关系。
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...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...

Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...