首页 > 其他分享 >UML之包的导入与访问

UML之包的导入与访问

时间:2024-12-25 09:46:13浏览次数:3  
标签:包中 之包 元素 A3 导入 B3 UML

包是UML中管理元素的有效手段,UML中的所有元素均隶属于某一个包,即使你没有指定元素所属的包,这些元素也会被置于一个默认包中,包的本质是命名空间。当我们在一个包中需要访问另一个包中的元素时,可以使用符号“::”逐级引用。
例如在下图所示的包图中,存在两支包含多个层次的包,如果包A3中的元素需要访问包B3中的元素C,则可以使用B1::B2::B3::C的形式达到目的。

不同包中的元素进行交互是常态而不是偶发现象,使用符号“::”引用其他包中的元素,特别是在包的层级较深时,元素前面会有长长的由“::”连接的包路径。对人类而言,这种冗长的形式无论是书写还是阅读都是一项具有挑战性的工作,它影响的不只是效率,可读性也大打折扣。为解决这个问题,UML提供了包导入的机制,例如在上面这种情况下,我们可以将包B3导入到包A3中,其图形化表示如下图所示。导入关系使用由导入包发出终止于被导入包的虚线箭头表示,并需要标注“<>”标签。

一旦包B3被导入包A3中,包B3就如同成了包A3的一个虚拟的子包,在遵循可见性规则的前提下,包A3中的元素就像使用子包中的元素一样使用包B3中的元素。在下图中,使用虚线在包A3中描画包B3,表达了这种虚拟的关系。

注:关于UML中可见性的说明,可参见文章《修饰符》中“可见性修饰符”部分。
包的设计本质上应有其内在逻辑含义,但客观上它也是解决命名冲突的一种手段,而通过import向一个包导入另一个包时,如果被导入的包中与当前包中存在同名元素就会产生名称冲突。在这种情况下,被导入包中的冲突元素将被忽略而不被导入,如果需要使用这个产生冲突的元素,我们将不得不继续使用“::”的形式来进行意图表达。这就正如当前包中的元素与子包中的元素名称产生冲突时一样。
如上文所述,将一个包全部导入到另一个包中可能会产生诸如名称冲突或其他潜在问题。如果一个包只使用另一个包中一个或少数几个元素,更好的做法是仅导入那些我们需要的元素。例如包A3仅需要使用包B3中的元素C,则在导入时,可仅导入元素C,在图形描画上,导入箭头直接指向元素C即可,如下图所示。

仅导入需要的元素时,将只有被导入的元素可直接使用,而那些与被导入元素位于同一包的其他元素对当前包则需要继续使用符号“::”引用。在上述示例中,被导入的元素C在使用逻辑上也如同直接在包A3中定义一样,而元素D则是包A3之外位于其他包中的一个普通元素。

仅导入特定元素降低了导入产生潜在问题的可能性,但是也有可能被导入的元素与当前包中的元素碰巧产生了冲突。例如我们要在包A3中导入包B3中的元素C,但包A3中已经包含了一个名为C的元素,导入产生名称冲突。此时,我们可以使用“<> 别名”的形式为导入的元素指定一个别名,在下图中我们使用“<> E”为包B3中元素C指定了在包A3中的别名E,即在包A3中,我们可以使用E代表包B3中的元素C,而使用C时则指包A3中的元素C。

上述对import的说明重点在import使用和细节上,但其实<>表明两个包之间的依赖关系。而包之间的常见依赖关系除导入(import)外,还有访问(access)。访问表明当前包依赖使用被访问的包。例如包B需要使用包A1,则通过由包B出发终止于包A1的并带有标签“<>”虚线描画表示。
在下图中,同时描画了包之间的import和access关系,包B访问包A1而导入包A2。

在UML的场景下,包B中的元素使用包A1和A2并无二致,我们可将包A1与A2均视为包B中虚拟的子包,但这两种依赖关系的效果有一个明显的区别,即“<>”所引入的包A2在包B中的可见性可视为public,而“<>”所表明依赖的包A1在包B中的可见性为private。如果进一步探究这种差异,可以尝试令包C通过“<>”依赖于包B,由于包A1在包B中的可见性为private,故包A1在包C中不可见,而包A2在包B中的可见性为public,故包A2在包C中也等价于被导入,可直接使用。其虚拟效果如下图所示:

在编程时包之间的依赖关系如果设置有误,往往会在程序编译与运行时发生异常,UML仅通过图形表达相关关系,不同UML工具对依赖的检查并不一致,所以需要仔细检查确认。
参考文献:
1.《OCUP 2 Certification Guide_ Preparing for the OMG Certified UML 2.5 Professional 2 Foundation Exam》 Michael Jesse Chonoles
2.《OMG® Unified Modeling Language® (OMG UML®) Version 2.5.1》

标签:包中,之包,元素,A3,导入,B3,UML
From: https://www.cnblogs.com/gtyan/p/18629408

相关文章

  • 如何解决数据库连接异常,重新导入数据后仍无法访问的问题?
    根据您的描述,您遇到了数据库连接异常和重新导入数据后仍然无法访问的问题。这类问题通常涉及多个方面,包括但不限于数据库配置、服务器环境、网络连接等。以下是一些详细的排查步骤和解决方案,帮助您逐步解决问题。1. 检查数据库日志首先,建议您查看数据库的日志文件,以获取更多关......
  • 用pandas导入含嵌套字典的json文件至mysql数据库
    需要导入的文件格式如下,要把data-diff数组里的所有元素导进去,对于某些json文件还需要添加日期字段。{"rc":0, "rt":6, "data":{ "total":197, "diff":[ { "f1":1, "f2":295.5, "f3":{"f4":......
  • Maven导入依赖过程中下载极其慢导致下载失败的解决办法
    首先右键打开Maven像这样-——————》然后点击opensettings.xml如果之前没有这个文件那么这里会显示“createsettings.xml”直接点就好了新建之后直接到这个文件里面去在这个文件里面添加上镜像就行了,阿里云的镜像非常好用,在哪里都好用,尤其是在下载破python库的时候嘎嘎......
  • 校园二手交易平台UML图
    类图:时序图:买家买商品:买家撤回:用户更新:用户登录:卖家发布:用例图:......
  • PlantUML 下载与安装全指南:开启高效 UML 建模之旅
    一、概述PlantUML是一个开源的工具,主要用于快速创建各种UML(统一建模语言)图形,包括但不限于类图、时序图、用例图、活动图等。它使用简单的文本描述语言来定义图形,然后可以将这些文本转换为高质量的图形图像。二、特点简单易学它的语法相对简单,不需要复杂的绘图软件操作技能。......
  • UML类图符号:各种关系说明以及举例
    来源|https://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛化(Generalization),实现(Realization)等。依赖(Dependency):元素A的变化会影响元素B,但反之不成立,......
  • UML之类型
    类型是对一个元素能够拥有的值的描述。类型可能是一个无限的集合,例如Integers类型(整数),理论上它的值有无限个;也可能是一个有限的集合,例如Boolean类型(布尔),它只有True和False两个值。定义了属性的类也是类型,因为类的值(即类的实例)也是一个特定的集合,我们自己定义的类可以看作是自......
  • 欲使用StringUtils,可以导入的maven依赖包
    欲使用StringUtils,可以导入的maven依赖包|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|......
  • 查看/导入/清除外部配置
    查看/导入/清除外部配置命令功能指导用户查看、导入或者清除RAID控制卡的外部配置。命令格式storcli64 /ccontroller_id/fallshowallstorcli64 /ccontroller_id/fallimportpreviewstorcli64 /ccontroller_id/falldelete参数说明参数参数说明取值......
  • 导入程序中的sql文件报错正常怎么办
    导入SQL文件时遇到错误是比较常见的问题。以下是一些常见的错误及其解决方法:常见错误及解决方法语法错误错误信息:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear...解决方法:......