【UML用户指南】-13-对高级结构建模-包
目录
1、名称
2、元素
3、可见性
4、引入与引出
用包把建模元素安排成可作为一个组来处理的较大组块。可以控制这些元素的可见性,使一些元素在包外是可见的,而另一些元素要隐藏在包内。也可以用包表示系统体系结构的不同视图。
狗窝并不复杂:有四面墙,其中一面墙上有一个能让狗通过的洞,还有一个顶棚。在搭一个狗窝时,实际上只需要一小堆木材,仅此而已。
房屋比较复杂。墙、天花板和地板组成了较大的抽象体,称之为房间。甚至可以把这些房间组成更大的组块,如公共区、卧室区、工作区等。这些较大的组可能并不表明它们本身就是与物理房屋有关系的任何事物,而可能只是给出的在逻辑上有关的屋中一些房间的名称,当谈论怎样使用这幢房屋时就使用这些名称。
在UML中,把组织模型的组块称之为包。包是用来把元素组织成组的通用机制。包有助于组织模型中的元素,使得更容易理解它们。包也允许控制对包的内容的访问,从而控制系统体系结构中的接缝。

1、名称
每个包都必须有一个有别于其他包的名称。名称(name)是一个文字串。单独的名称叫做简单名(simple name),限定名(qualified name)是以包所位于的外围包的名称作为前缀的包名。
用双冒号(::)分隔包名。通常在图形中仅显示包名
如图所示。就像类那样,可以绘制用标记值或附加的分栏作为修饰的包,以显示包的细节。

2、元素
包可以拥有其他元素,这些元素可以是类、接口、构件、结点、协作、用况和图,甚至可以是其他包。拥有是一种组成关系,这意味着元素被声明在包中。如果包被撤销了,则元素也要被撤销。一个元素只能被一个包所拥有。
包形成了一个命名空间,这意味着在一个包的语境中同一种元素的名称必须是唯一的。例如,同一个包不能拥有两个名为Queue 的类,
但这种情况是允许的:在 P1 包中有一个名为Queue的类,而在P2包中又有另一个(不同的)名为Queue的类。实际上,类P1::Queue和类P2::Queue是不同的类,这可以由它们各自的路径名区别开来。不同种类的元素可以有相同的名称。

3、可见性
可见性表明一个类对于在同一包内声明的其他类是可见的,但是对于那些在其他包中声明的类是不可见的。通过在类名前加前缀“~”符号来表示包的可见性。
可以通过在元素的名称前面加一个适当的可视符号,来描述包所拥有的元素的可见性。公共的(public)元素用“+”号作为名称的前缀,如上图中的OrderForm。包的各公共部分一同构成包的接口。
像类一样,可以用“#”号或“-”号作为元素的名称的前缀指明元素是受保护的(protected)或私有的(private)。受保护的元素仅对从这个包继承的包可见,私有的元素在这个包外部完全不可见。
4、引入与引出
假设有两个名称分别为A和B的并列的类。因为二者是对等的,A能看见B,B也能看见A,因此它们可以相互依赖。如果二者正好可以组成一个小系统,那么确实就不需要任何种类的包装机制了。
现在设想有几百个这样并列的类,对所能编织的错综复杂的关系网没有任何限制,而且又没有什么办法能理解如此庞大且未加组织的一群类。要使简单的、无约束的访问不至于按比例地增加,这对于大系统而言是一个非常现实的问题。对于这种情景,需要某种受控的包装机制来组织抽象。
现在假设A放在一个包中,B放在另一个包中,而且这两个包是并列的。再假设A和B在各自的包中都被声明为公共的。这是一种非常不同的情形。虽然A和 B都是公共的,但是一个类被另一个包中的类访问需要限定名。然而,如果A的包引入B的包,A就可以直接看见B,但若没有限定名那么B还是看不见A。引入关系把来自目标包中的公共元素添加到进行引入的包的公共命名空间中。
在UML中,用由衍型import修饰的依赖对引入关系建模。通过把抽象包装成有含义的组块,然后用引入关系控制对它们的访问,就能够控制大量抽象的复杂性。
使用了两个衍型,即引入(import)和访问(access)
引入把目标包的内容增加到源包的公共命名空间中,因而不必对名称进行限定。这样就允许
出现原本为保持模型形式良好而必须避免的命名冲突。
访问把目标包的内容增加到了源包的私有命名空间里。所不同的情况是假如第三个包引入源包,就不能再引出已经被引入的目标包元素。
包的公共部分称为它的引出(export)

上图中,包GUI引出两个类,它们是Window和Form。EventHandler没有被GUI引出,EventHandler是包的受保护的部分。
一个包引出的部分,对于那些可见到该包的其他包的内容是可见的。
Policies显式地引入包GUI。因此,对于类GUI::Window和类GUI::Form,包Policies的内容使用简单名Window和Form就能访问它们。然而,由于GUI::EventHandler是受保护的,因此它是不可见的。由于包Server没有引入GUI,Server中的内容必须用限定名才能访问GUI的公共内容,例如,GUI::Window。类似地,由于 Server 中的内容是私有的,GUI 的内容无权访问Server中的任何内容,即使用限定名也不能访问它们。
引入和访问依赖是传递的。在本例中,Client引入 Policies,Policies引入 GUI,所以Client就传递地引入了GUI。因此,Client的内容可以访问Policies的引出,同样可以访问GUI的引出。如果Policies是访问GUI,而不是引入它,则Client不能把GUI中的元素添加到自己的命名空间,但是仍然能通过限定名(如GUI::Window)引用它们。
在类和包之间有一个重要的区别:
类是从问题中或解中所发现的事物的抽象,
包是用于组织模型中的事物的机制。
包在系统运行时不出现,它们完全是组织设计的机制。

例如,上图显示了一组包,它们把信息系统设计视图中的类组织成一个标准的三级体系结构。
包 User Services 中的元素提供了呈现信息和收集数据的可视化界面。
包Data Services中的元素负责维护、访问和修改数据。
包 Business Services中的元素为另两个包的元素搭桥,并包含了管理用户请求(为了执行业务上的任务)的所有类和其他元素,包括支配数据操纵策略的业务规则。
视图是对系统的组织和结构的投影,它关注系统的一个特定方面。
该定义有两个含义:
第一个含义是,可以把系统分解成若干几乎正交的包,每个包表达了一组体系结构上的重大决策。例如,可以有设计视图、交互视图、实现视图、部署视图和用况视图。
第二个含义是,这些包都拥有与相应视图密切相关的所有抽象。例如,模型中的所有构件都属于代表实现视图的包。然而,包可以引用其他包拥有的元素。

相关文章:
【UML用户指南】-13-对高级结构建模-包
目录 1、名称 2、元素 3、可见性 4、引入与引出 用包把建模元素安排成可作为一个组来处理的较大组块。可以控制这些元素的可见性,使一些元素在包外是可见的,而另一些元素要隐藏在包内。也可以用包表示系统体系结构的不同视图。 狗窝并不复杂&#x…...
前端面试题日常练-day63 【面试题】
题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末 1. TypeScript中,以下哪个关键字用于声明一个类的构造函数? a) constructor b) init c) create d) initialize 2. 在TypeScript中,以下哪个符号用于声明可选的函…...
GAN的入门理解
这一篇主要是关于生成对抗网络的模型笔记,有一些简单的证明和原理,是根据李宏毅老师的课程整理的,下面有链接。本篇文章主要就是梳理基础的概念和训练过程,如果有什么问题的话也可以指出的。 李宏毅老师的课程链接 1.概述 GAN是…...
43【PS 作图】颜色速途
1 通过PS让画面细节模糊,避免被过多的颜色干扰 2 分析画面的颜色 3 作图 参考网站: 色感不好要怎么提升呢?分享一下我是怎么练习色感的!_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1h1421Z76p/?spm_id_from333.1007.…...
定个小目标之刷LeetCode热题(13)
今天来看看这道题,介绍两种解法 第一种动态规划,代码如下 class Solution {public int maxSubArray(int[] nums) {int pre 0, maxAns nums[0];for (int x : nums) {// 计算当前最大前缀和pre Math.max(pre x, x);// 更新最大前缀和maxAns Math.ma…...
【AI大模型】Prompt Engineering
目录 什么是提示工程(Prompt Engineering) Prompt 调优 Prompt 的典型构成 「定义角色」为什么有效? 防止 Prompt 攻击 攻击方式 1:著名的「奶奶漏洞」 攻击方式 2:Prompt 注入 防范措施 1:Prompt 注…...
centos安装vscode的教程
centos安装vscode的教程 步骤一:打开vscode官网找到历史版本 历史版本链接 步骤二:找到文件下载的位置 在命令行中输入(稍等片刻即可打开): /usr/share/code/bin/code关闭vscode后,可在应用程序----编程…...
面试题------>MySQL!!!
一、连接查询 ①:左连接left join (小表在左,大表在右) ②:右连接right join(小表在右,大表在左) 二、聚合函数 SQL 中提供的聚合函数可以用来统计、求和、求最值等等 COUNT&…...
英伟达:史上最牛一笔天使投资
200万美元的天使投资,让刚成立就面临倒闭风险的英伟达由危转安,并由此缔造了一个2.8万亿美元的市值神话。 这是全球风投史上浓墨重彩的一笔。 前不久,黄仁勋在母校斯坦福大学的演讲中,提到了人生中的第一笔融资——1993年&#x…...
PDF分页处理:技术与实践
引言 在数字化办公和学习中,PDF文件因其便携性和格式稳定性而广受欢迎。然而,处理大型PDF文件时,我们经常需要将其拆分成单独的页面,以便于管理和分享。本文将探讨如何使用Python编程语言和一些流行的库来实现PDF文件的分页处理。…...
数据可视化——pyecharts库绘图
目录 官方文档 使用说明: 点击基本图表 可以点击你想要的图表 安装: 一些例图: 柱状图: 效果: 折线图: 效果: 环形图: 效果: 南丁格尔图(玫瑰图&am…...
Python的return和yield,哪个是你的菜?
目录 1、return基础介绍 📚 1.1 return用途:数据返回 1.2 return执行:函数终止 1.3 return深入:无返回值情况 2、yield核心概念 🍇 2.1 yield与迭代器 2.2 生成器函数构建 2.3 yield的暂停与续行特性 3、retur…...
持续总结中!2024年面试必问 20 道分布式、微服务面试题(七)
上一篇地址:持续总结中!2024年面试必问 20 道分布式、微服务面试题(六)-CSDN博客 十三、请解释什么是服务网格(Service Mesh)? 服务网格(Service Mesh)是一种用于处理服…...
AJAX 跨域
这里写目录标题 同源策略JSONPJSONP 是怎么工作的JSONP 的使用原生JSONP实践CORS 同源策略 同源: 协议、域名、端口号 必须完全相同、 当然网页的URL和AJAX请求的目标资源的URL两者之间的协议、域名、端口号必须完全相同。 AJAX是默认遵循同源策略的,不…...
3 数据类型、运算符与表达式-3.1 C语言的数据类型和3.2 常量与变量
数据类型 基本类型 整型字符型实型(浮点型) 单精度型双精度型 枚举类型 构造类型 数组类型结构体类型共用体类型 指针类型空类型 #include <stdio.h> #include <string.h> #include <stdbool.h> // 包含布尔类型定义 // 常量和符号常量 #define PRICE 30//…...
NSSCTF-Web题目5
目录 [SWPUCTF 2021 新生赛]error 1、题目 2、知识点 3、思路 [LitCTF 2023]作业管理系统 1、题目 2、知识点 3、思路 [HUBUCTF 2022 新生赛]checkin 1、题目 2、知识点 3、思路 [SWPUCTF 2021 新生赛]error 1、题目 2、知识点 数据库注入、报错注入 3、思路 首先…...
cnvd_2015_07557-redis未授权访问rce漏洞复现-vulfocus复现
1.复现环境与工具 环境是在vulfocus上面 工具:GitHub - vulhub/redis-rogue-getshell: redis 4.x/5.x master/slave getshell module 参考攻击使用方式与原理:https://vulhub.org/#/environments/redis/4-unacc/ 2.复现 需要一个外网的服务器做&…...
免费,C++蓝桥杯等级考试真题--第7级(含答案解析和代码)
C蓝桥杯等级考试真题--第7级 答案:D 解析:步骤如下: 首先,--a 操作会使 a 的值减1,因此 a 变为 3。判断 a > b 即 3 > 3,此时表达式为假,因为 --a 后 a 并不大于 b。因此,程…...
python为什么要字符串格式化
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。相对于老版的%格式方法,它有很多优点。 1.在%方法中%s只能替代字符串类型,而在format中不需要理会数据类型; 2.单个参数可以…...
go语言后端开发学习(三)——基于validator包实现接口校验
前言 在我们开发模块的时候,有一个问题是我们必须要去考虑的,它就是如何进行入参校验,在gin框架的博客中我就介绍过一些常见的参数校验,大家可以参考gin框架学习笔记(四) ——参数绑定与参数验证,而这个其实也不是能够完全应对我…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
