本文和大家重点讨论一下UML包图中的包引入和包合并问题,包引入是一种允许采用非限定性名称访问来自于另一个命名空间中的元素的关系,而UML包图中包合并定义了一个包的内容是如何被另一个包扩展的关系。
创新互联自成立以来,一直致力于为企业提供从网站策划、网站设计、成都网站设计、网站建设、电子商务、网站推广、网站优化到为企业提供个性化软件开发等基于互联网的全面整合营销服务。公司拥有丰富的网站建设和互联网应用系统开发管理经验、成熟的应用系统解决方案、优秀的网站开发工程师团队及专业的网站设计师团队。
UML包图中的包引入和包合并
1包引入
包引入(packageimport,参见USS的7.3.39节)是一种允许采用非限定性名称访问来自于另一个命名空间中的元素的关系。假如我们有一个包A和一个包B,如果包A没有引入包B,那么包A在访问包B时,必须采用限定性名,比如B::Integer。当包A引入了包B以后,则可以采用非限定性名称进行访问,此时A可以直接用Integer来访问包B中的Integer。对于包的引入,其如同C++语言中的usingnamespace关键字,也如同于Java语言中的import关键字。
图1是UML包图中包引入在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对应<
2包合并
UML包图中包合并(packagemerge,参见USS的7.3.40节)定义了一个包的内容是如何被另一个包扩展的关系。包合并关系表示将两个包的内容合并在一起从而得到一个新的合并包,当然,这种合并关系也隐含了对被合并包的扩展。图3列出了UML规范中包合并关系的语法。
图3UML规范中可打包元素的语法
图4是使用包合并的一个例子,包合并关系在UML图中的表示与依赖关系是一样的。从图3中的语法可以看出箭头(target)所指向的包是被合并的包。图4中我们能看到三个包,即Merged包、Merging包和Importing包。我们还可以看到Merging包将Merged包合并了,以及Importing包引入了Merging包。三个包中都有一个A类,这里的A类只是为了说明方便,其实,包中可以有其它的元素,那三个包中的A类在合并前后有什么关系呢?
图4包合并的一个例子
为了方便理解这一问题,请看图5。UML包图的包合并中的加号表示的是合并这个操作,等号的左边表示合并之前,而等号的右边表示合并之后。在合并之前,我们可以看出Merged::A和Merging::A分别是一个扇形,但合并之后Merging::A就变成了一个圆,因为Merged包被合并进了Merging包,这个合并操作是站在Merging包的角度来看的。从Merged包的角度来看,不论是合并前或是后,都是一个扇形,这还是比较好理解的,因为它是独立的,并没有合并其它的包。对于Merging包我们还可以这样理解,在合并之前,无论是从包里头看还是从包外头看都是一个扇形。但在合并之后,从里面看来A还是一个扇形,但从外面来看却是一个圆。
图5
有了上面对于包合并的理解后,我们就不难理解Importing包中的A了,显然它是一个圆,是从Merging包的外部来看引入的A。
3总结
UML包图中包引入这一关系是为了让一个命名空间能更方便的引用另一个包中的元素,其方便性在于对于引入的包中的元素可以采用非限定性名的访问方式进行访问。UML包图中包合并关系概念的引入是为了建模包的增量式扩展,即我们可以在已有的一个包上通过包合并从而得到一个功能更加完整或是强大的新包。为了读懂UML规范,我们需要对包引入和包合并有很好的了解。
【编辑推荐】
文章标题:图例解析UML包图中的包引入和包合并使用
分享路径:http://www.shufengxianlan.com/qtweb/news10/46260.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联