[跟我学UML] UML包图中的包引入和包合并

article/2025/4/25 0:38:59
缩略语
    UIS     UML Infrastructure Specification   UML基础结构规范
    UML    Unifed Modeling Language            统一建模语言
    USS    UML Superstructure Specification  UML上层结构规范

参考资料

    《UML Infrastructure Specification, v2.2》
    《UML Superstructure Specification, v2.2》
    《 UML类图中的关联、聚合和组合》
    《 UML类图中的依赖》
    《 UML类图中的泛化》
    《 UML类图中的类》
    《 UML包图中的包和命名空间》

1 包引入

    包引入(package import,参见USS的7.3.39节)是一种允许采用非限定性名称访问来自于另一个命名空间中的元素的关系。假如我们有一个包A和一个包B,如果包A没有引入包B,那么包A在访问包B时,必须采用限定性名,比如B::Integer。当包A引入了包B以后,则可以采用非限定性名称进行访问,此时A可以直接用Integer来访问包B中的Integer。对于包的引入,其如同C++语言中的using namespace关键字,也如同于Java语言中的import关键字。
   
    图 1是包引入在UML规范中的语法定义,从图中你可以看出它包含一个importingNamespace和一个importedPackage,其意思是将importedPackage引入到importingNamespace。此外,我们可以看出PackageImport“是一个”直接关系。还需注意的是PackageImport包含一个visibility属性用于表示包引入关系的可见性。在UML规范中定义了这一属性值可以是public或是private。其含义是:如果一个包引入可见性是public,那么,被引入的包可以被命名空间之外的其它元素访问;如果一个包引入可见性是private,那么被引入的包只能被命名空间中的元素访问,而命名空间外的元素不能访问。这与我们编成语言中的public和private的含意是一样的。

图 1包引入在UML规范中的语法
    图 2是包引入的一个例子,其中也示例了包引入关系在UML中的表示方法。可以看出包引入关系与依赖关系的表示方法是相同的。在包引入的表示方法中,带有箭头一侧的包被引入到没有箭头一侧的包中,这可以从图 1中的语法定义看出,因为importedPackage是target。你可能要问,图 1中只定义了包引入是将一个包引入到命名空间中,但图 2中却是将包引入到包中,这样对吗?还记得《UML包图中的包和命名空间》中所提及的包在UML中的语法定义吗?因为包是从命令空间继承来的,也就是说包“是一个”命名空间!

图 2 包引入的一个例子
    前面所说的包引入的可见性分为public和private,在UML中分别采用不通的图型(sterotype)来区分。public对应<<import>>图型,而private对应<<access>>图型,这一点在图 2中也有示例。从图 2中我们可以看出,ShoppingCart包引入了Auxiliary包和Types包,当引入了以后在ShoppingCart包中可以直接采用非限定性名对两个引入包中的元素进行访问。此外,Types包还可以被ShoppingCart包之外的元素访问,因为其引入关系的可见性是public,也就是说WebShop包引入了ShoppingCart包后,也可以直接采用非限定性名访问Types包中的元素。由于Auxiliary包引入到ShoppingCart包的可见性是private,所以,虽然WebShop引入了ShoppingCart包,但并不能采用非限定性名访问Auxiliary包。当然,WebShop包仍然采用Auxiliary::xyz这样的限定性名访问Auxiliary包中的元素。我们还可以理解为,<<import>>关系是可传递的,但<<access>>关系则不可以。

2 包合并

    包合并(package merge,参见USS的7.3.40节)定义了一个包的内容是如何被另一个包扩展的关系。包合并关系表示将两个包的内容合并在一起从而得到一个新的合并包,当然,这种合并关系也隐含了对被合并包的扩展。图 3列出了UML规范中包合并关系的语法。

图 3 UML规范中可打包元素的语法
    图 4是使用包合并的一个例子,包合并关系在UML图中的表示与依赖关系是一样的。从图 3中的语法可以看出箭头(target)所指向的包是被合并的包。图 4中我们能看到三个包,即Merged包、Merging包和Importing包。我们还可以看到Merging包将Merged包合并了,以及Importing包引入了Merging包。三个包中都有一个A类,这里的A类只是为了说明方便,其实,包中可以有其它的元素,那三个包中的A类在合并前后有什么关系呢?

图 4 包合并的一个例子
    为了方便理解这一问题,请看图 5。其中的加号表示的是合并这个操作,等号的左边表示合并之前,而等号的右边表示合并之后。在合并之前,我们可以看出Merged::A和Merging::A分别是一个扇形,但合并之后Merging::A就变成了一个圆,因为Merged包被合并进了Merging包,这个合并操作是站在Merging包的角度来看的。从Merged包的角度来看,不论是合并前或是后,都是一个扇形,这还是比较好理解的,因为它是独立的,并没有合并其它的包。对于Merging包我们还可以这样理解,在合并之前,无论是从包里头看还是从包外头看都是一个扇形。但在合并之后,从里面看来A还是一个扇形,但从外面来看却是一个圆。

图 5
    有了上面对于包合并的理解后,我们就不难理解Importing包中的A了,显然它是一个圆,是从Merging包的外部来看引入的A。

3 总结

    包引入这一关系是为了让一个命名空间能更方便的引用另一个包中的元素,其方便性在于对于引入的包中的元素可以采用非限定性名的访问方式进行访问。包合并关系概念的引入是为了建模包的增量式扩展,即我们可以在已有的一个包上通过包合并从而得到一个功能更加完整或是强大的新包。为了读懂UML规范,我们需要对包引入和包合并有很好的了解。

致读者

    如果你想参与讨论UML相关的话题,请加入UML技术圈( g.51cto.com/UltraUML)。

http://chatgpt.dhexx.cn/article/41g5ohHC.shtml

相关文章

[完全免费] 在线UML Package Diagram 包图工具 - 教程第4部分

封装图显示了中型到大型项目中模型元素的布置和组织&#xff0c;可用于显示子系统或模块之间的结构和相关性。 (一键即时打开使用) 什么是UML中的包图&#xff1f; 大系统提供特殊挑战。为大型系统绘制班级模型&#xff0c;而且它太大而难以理解。类之间有太多的联系要理解。处…

UML总结—包图(Package Diagram)

一、什么是包 在面向对象的软件开发过程中&#xff0c;类显然是构建整个系统的基本构造块。但是对于庞大的应用系统而言&#xff0c;包含的类是成百上千的&#xff0c;再加上其间“阡陌纵横”的关联关系&#xff0c;多重性等&#xff0c;必然大大超出了人们可以处理的复杂度。…

UML- 包图

前言 感觉包图萌萌哒&#xff0c;不知道你们是什么样的感觉呢~ 正文 what 1、包图是由包和包之间的关系构成的。 2、逻辑上把复杂的图模块化。 who 阶段&#xff1a;可行性分析&#xff0c;概要设计。 作用 1、维护和控制系统总体结构的重要建模工具。 元素 类、接口…

UML之包图(Package Diagram)

前言 包图&#xff0c;一个包字就体现出了它的包容性一定是非强大&#xff0c;在具体了解之后&#xff0c;感觉包图真是如此。 正文 概念 一个”包图”可以是任何一种的UML图组成&#xff0c;通常是UML用例图或UML类图。 包是一个UML结构&#xff0c;它使得你能够把诸如用例…

写在MyUML发布090515_2版之际

前段时间针对一些问题&#xff0c;做了一次校正。本来准备等待我的代码生成引擎写好后一并发布的&#xff0c;但是我想&#xff0c;要完善代码生成引擎需要一段不短的时间&#xff08;我自己也估计不出来&#xff09;&#xff0c;所以昨天将更正后的版本发布了。 对软件添加的内…

【UML学习】--包图

【前言】 包图是怎么来的&#xff1f; 在面向对象开发的概念里&#xff0c;类是构造整个系统的基本构造块。但是一个庞大的系统中包含的类是成百上千个的&#xff0c;而且这些类之间的关系也是阡陌交错&#xff0c;所以处理起来十分复杂&#xff0c;这时候就引入了“包”这个概…

UML—Package Diagram

随着程序软件越来越复杂&#xff0c;一个程序往往包含了数百个类。管理这些类的有效方法就是将类进行分组&#xff0c;将功能相似或相关的类组织在一起。包图是一种维护和描述系统总体结构模型的重要建模工具 包的构成&#xff1a; 1.包的名称 2.包的元素 包自身所拥有的元素…

【UML】9种图+包图

导读&#xff1a;在UML的学习中&#xff0c;介绍了9种图&#xff0c;外加一个包图。这9种图和4大关系&#xff0c;可以说是UML的一个核心内容。我根据自己的笔记&#xff0c;以及查阅的一些资料&#xff0c;对这9种图和包图&#xff0c;做一个总结。 一、基本定义 1、1 总体…

MyUML Features myeclipse 中的 MYUML 的功能

MyUML Features myeclipse 中的 MYUML 的功能7 UML Diagrams: 7种图表 Use-case diagram 用况图 Class diagram 类图 Sequence diagram 顺序图 Collaboration diagram 协作图 State diagram 状态图 Activity diagram 行为图 Deployment diagram 配置图Integrated Diagram Edit…

MyUML Designer开源项目(支持UML2.2规范)第一版本即将发布

经过努力, MyUML Designer开源项目第一版本即将发布. 计划在本月发布第一个版本. MyUML Designer基于Eclipse 3.5开发, 完全实现UML2.2规范. 先贴几个截图, 本版本尽量使图形简洁和漂亮. 后续工作还在进行中. MyUML Designer Project: http://myumldesigner.googlecode.com M…

UML——包图

一、包图的含义 包图&#xff08;Package Diagram&#xff09;由包和包之间的关系构成&#xff0c;对维护和控制系统总体结构很重要。系统建模中&#xff0c;有大量的类、接口、组件、节点和图&#xff0c;有必要将这些元素进行分组&#xff0c;把语义相近并倾向一起变化的元素…

UML图详解(九)包图

一、概述 维护和控制系统总体结构的重要建模工具方便理解和处理整个模型设计良好的包是高内聚、低耦合的&#xff0c;并对其内容的访问具有严密的控制 包的内容&#xff1a;拥有或引用的模型元素。包的实例没有任何语义。 仅在建模时有意义&#xff0c;而不必转换到可执行的系…

UML包图

UML包图 基本概述 包图(Package Diagram)是UML中的组织图形&#xff0c;其能有效的组织好各种UML图和表达思路&#xff0c;其功能是组织包内元素&#xff0c;控制访问。 基本语法 解释&#xff1a; 1、包有包的名字和包之间的关系。 2、包之间的关系有三种&#xff1a; 1、包…

UML 之 包图

包图&#xff08;Package Diagram&#xff09; 包图可以是任何一种的UML图组成&#xff0c;通常是UML用例图或UML类图。 包是一个UML结构&#xff0c;它使得你能够把诸如用例或类之类模型元件组织为组。 包被描述成文件夹&#xff0c;可以应用在任何一种UML图上。 虽然…

UML-包图

一、什么是包图 包图是在 UML 中用类似于文件夹的符号表示的模型元素的组合。系统中的每个元素都只能为一个包所有&#xff0c;一个包可嵌套在另一个包中。使用包图可以将相关元素归入一个系统。一个包中可包含附属包、图表或单个元素。 一个"包图"可以是任何一种的U…

【UML】UML中的“图”集

一、基本概念 UML作为统一建模语言,是一种模型化语言,那么该模型主要是用图来表示,这时候就自然而然产生了UML图。UML主要由基本构造块、规则、公共机制组成,其中基本构造块由事物、关系、图组成。 二、基本结构 图是UML中重要的组成部分,那么UML中图主要有九种,可以从…

UML--包图详解

包图 在UML的建模机制中&#xff0c;模型的组织是通过包&#xff08;Package&#xff09;来实现的。包可以把所建立的各种模型&#xff08;包括静态模型和动态模型&#xff09;阻止起来&#xff0c;形成各种功能或用途的模块&#xff0c;并可以控制包中元素的可见性&#xff0…

UML之包图

包图是UML中用类似于文件夹的符号表示的模型元素的组合&#xff0c;系统中的每个元素都只能为一个包所有&#xff0c;一个包可嵌套在另一个包中&#xff0c;使用包图可将相关元素归入一个系统&#xff0c;一个包中包含附属包、图表或单个元素。简单的来说&#xff0c;我们可以直…

UML --Package

一、本文思维导图 二、包图的概述 包图由包和包之间的关系构成&#xff0c;它是维护和控制系统总体结构的重要建模工具&#xff1b; 对复杂系统进行建模时&#xff0c;包方便理解和处理整个模型&#xff1b;设计良好的包是高内聚、低耦合的&#xff0c;并对其内容的访问具…

【CSS】过渡动画

目录 过渡动画1 css 属性1.1 transform 变换&#xff08;平移旋转缩放&#xff09;1.2 animation 动画1.2.1 keyframes 1.3 transition 过渡1.4 比较 2 方式2.1 css 伪类2.2 vue <Transition> 组件2.2.1 默认名称2.2.2 自定义名称2.2.3 自定义 class2.2.4 配合 animation…