【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中的元素为另两个包的元素搭桥,并包含了管理用户请求(为了执行业务上的任务)的所有类和其他元素,包括支配数据操纵策略的业务规则。

视图是对系统的组织和结构的投影,它关注系统的一个特定方面。

该定义有两个含义:

第一个含义是,可以把系统分解成若干几乎正交的包,每个包表达了一组体系结构上的重大决策。例如,可以有设计视图、交互视图、实现视图、部署视图和用况视图。

第二个含义是,这些包都拥有与相应视图密切相关的所有抽象。例如,模型中的所有构件都属于代表实现视图的包。然而,包可以引用其他包拥有的元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/27058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【单片机毕业设计选题24003】-基于STM32和阿里云的家庭安全监测系统

系统功能: 此设计采用STM32单片机采集环境温湿度,烟雾浓度和一氧化碳浓度显示在OLED上,并将这些信息上报至阿里云平台。 1. 上电连接手机热点后自动连接阿里云,可通过阿里云平台收到系统上报的温湿度,烟雾 浓度,一氧化碳数据以…

一个顶级产品经理的自我修养,从掌控AI工具开始

前言 在数字化浪潮的推动下,人工智能(AI)技术的快速发展正深刻地改变着各行各业的运营模式与竞争格局。产品经理,作为连接用户需求与产品设计之间的桥梁,在这场变革中扮演着至关重要的角色。随着AI技术的广泛应用&…

1. NAS和SAN存储

NAS和SAN存储 一、存储设备1、根据工作方式2、DAS 直接附加存储3、NAS存储4、SAN存储 二、模拟配置SAN存储1、创建虚拟机、安装openfiler2、访问openfiler webUI3、创建RAID设备4、开启iSCSI服务5、配置SAN存储设备共享空间5.1 设置IQN 6、业务服务器连接使用存储6.1 安装客户端…

OceanBase 并行执行参数 parallel_servers_target 理解

为了最大程度降低 PX 使用难度,OceanBase 3.1 版起,parallel_max_servers 参数废弃。 用户只需用好 parallel_servers_target 即可。 target 的用途 用一个酒吧的例子来粗略理解下 parallel_servers_target 的意思: target 先生开了一个酒…

【中科蓝讯BT896X】app.lst、ram.ld、map.txt文件的分析和使用

【中科蓝讯BT896X】app.lst、ram.ld、map.txt文件的分析和使用 测试SDK版本:《SDK_BT896X_S12685_20240314》 文章目录 【中科蓝讯BT896X】app.lst、ram.ld、map.txt文件的分析和使用前言一、app.lst、ram.ld、map.txt文件介绍1.1 app.lst文件1.2 ram.ld文件1.3 map…

【FPGA项目】bin文件ram存取回环测试

🎉欢迎来到FPGA专栏~bin文件ram存取回环测试 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大…

探秘大数据信用报告:最佳查询方式

大数据信用报告查询方式一般有几种?哪种比较好?在了解这个问题之前,想必你对大数据信用与人行信用的区别都是比较清楚了,本文呢就着重讲一下大数据信用报告查询方式有几种,哪种比较好,感兴趣的朋友不妨一起去看看。 大数据信用报…

跟卖五种常用采集方式,关键词采集升级,更加让新手上手更快!

今天给大家分享一个跟卖选品软件,相信很多卖家都在为选品而苦恼,人工筛选一天也筛选不出几个能用的链接,不仅耗费时间精力,还提升不了选品效率,今天就分享一款实用的选品工具,它能够帮助我们节省选品时间&a…

诊所管理系统哪家会好一点

随着医疗行业的快速发展和信息化进程的加速,诊所作为医疗服务的重要基层单位,其运营管理效率与服务质量的提升愈发依赖于现代化的管理工具。诊所管理系统应运而生,旨在通过集成化、智能化的技术手段,帮助诊所实现诊疗流程优化、资…

Python 显示笔记本电脑的电池状态和百分比

方法一: import psutil import psutil battery psutil.sensors_battery() if battery is None:print("No battery is found.")exit() print (battery) percentagebattery.percent print(f"Battery Percentage: {percentage}%")Battery的信息…

『大模型笔记』缩放定律(scaling laws)是由记忆而非智力解释的吗?

MAC 文章目录 一. 缩放定律(scaling laws)是由记忆而非智力解释的吗?1. 视频原文内容2. 要点总结一般智能的定义规模最大化的论点性能衡量的方式及其影响大语言模型的基准测试大语言模型的本质与记忆基准测试插值的概念与基准测试实例人类和模型的推理与样本效率二. 参考文献一…

期末测试2--函数题---指针链表如何输出?

总结写代码时候遇到的问题 1.遍历指针链表 指针head在做for循环遍历的时候 for(head, head!NULL;head) head不能 for(head,head!NULL;headhead->next)-------正确的写法 int i; for(ihead;head!NULL;headhead->next) i 是 int 类型的&#x…

chrome浏览器设置--disable-web-security解决跨域

在开发人员于后台进行接口测试的时候,老是遇到跨域问题,这时前端总是会让后台添加跨域请求头来允许跨域请求,今天介绍一个简单的方法跨过这一步操作的设置。 –disable-web-security参数,禁用同源策略,利于开发人员本…

嵌入式系统复习(一)

第一章 嵌入式系统的定义、特点 嵌入式系统是以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 特点:嵌入性 专用性 计算机系统 嵌入式系统典型组成…

[Shell编程学习路线]——探讨Shell中变量的作用范围(export)

🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月14日10点14分 🀄️文章质量:95分 文章目录 ————前言———— 定义变量: 输出变…

【Mars3d】config.json中的蓝色底图map.basemap = 2017代码实现

本身的地图效果: Mars3d的蓝色地图效果: 关键代码: basemaps: [{name: "高德电子",icon: "img/basemaps/gaode_vec.png",type: "gaode",layer: "vec",show: true,invertColor: true,filterColor: &q…

LLM 大模型学习:数据预处理、模板设计以

在模型训练过程中,数据及数据处理是最为重要的工作之一。在当前模型训练流程趋于成熟的情况下,数据集的好坏,是决定了该次训练能否成功的最关键因素。 在上一篇中,我们提到了模型训练的基本原理是将文字转换索引再转换为对应的向…

机器学习python实践——数据“相关性“的一些补充性个人思考

在上一篇“数据白化”的文章中,说到了数据“相关性”的概念,但是在统计学中,不仅存在“相关性”还存在“独立性”等等,所以,本文主要对数据“相关性”进行一些补充。当然,如果这篇文章还能入得了各位“看官…

【React】Lodash---groupBy() 分组

例子 _.groupBy([6.1, 4.2, 6.3], Math.floor); // > { 4: [4.2], 6: [6.1, 6.3] }// The _.property iteratee shorthand. _.groupBy([one, two, three], length); // > { 3: [one, two], 5: [three] }思路分析 来源 定义一个名为groupBy的方法,通过扩展Ar…

OpenAI最强大模型ChatGPT-4o,论文降重小技巧,国内直接使用

一、万字论文,从0到1,只需1小时 通过OpenAI5月14日1点发布的最新大模型ChatGPT4o: 1小时即可完成万字论文的编写通过GPT定制的降重大模型“中文论文降重”,2小时即可完成一篇优质的、查重率较低的万字论文。 在ChatGPT4o对话框中…