包是对UML中各模型元素进行组织管理的一种机制,它把概念上相似、有关联的模型元素(包括静态的和动态的)组织到一个包中,形成具有各种功能或用途的模块,并可以控制包中元素的可见性,以方便人们更好的理解复杂的系统。
包图由包之间的关系组成,通过包之间关系的描述来展现系统各个模块之间的依赖关系。
包图
它类似于操作系统中的文件夹,因此,它在UML中也使用类似的文件夹符号来表示:
在同一层级内,每个包应有一个与其它包不同的名称。包的名称有两种形式:
1,简单名称(Simple Name)
简单名称仅包含包的名称字符串,如下面的例子:
2,路径名称(Path Name)
在很多情况下,包内又包含其它包,则在外围使用包内的某个包时可以使用路径名称来指明包的路径,其基本语法是:外部包名称::本包名称。下图中说明“Borrow”这个包是位于“SystemInterface”包内的:
包是一种分组机制,所以包内可以包含UML中任何元素,如类、用例、接口、组件、节点等,也可以包含其它包、用例图、协作图、时序图等。
包中的元素可见性主要包含三种:
1,公有的(public)
通过在元素前添加“+”符号来表示,则该元素对所有引入该包的元素可见。
2,私有的(private)
通过在元素前添加“-”符号来表示,则该元素只能被同一个包内的元素可见。
3,保护的(protected)
通过在元素前添加“#”符号来表示,则该元素对继承该包的包中元素可见。
下图给出了包内元素的三种可见性的表示方法:
包含元素三种可见性表示方法
上图中的三个类“class A”、"class B"和“class C”的可见性分别是公有的、私有的和保护的。
包之间的关系主要有依赖关系和泛化关系。
1,依赖关系
包之间的依赖关系是指两个包内的若干元素之间存在着依赖,依赖使用虚线箭头表示,箭头由依赖包指向被依赖的包,包之间的依赖关系可以是泛化、实现、导入等。下图表示的是两个包之间的依赖关系:
导入依赖(import dependency)是指允许一个包中的元素存取另外一个包中的元素,可以在虚线箭头上添加<<import>>构造型来表示。导入依赖不具有传递性。
2,泛化关系
包之间的泛化关系类似于类之间的泛化关系。包之间的这种泛化关系是指其中的特殊包可以替换一般包中的元素,并可以添加新的元素,实际上包之间的泛化也是一种依赖关系。
下图是包的一些构造型,并使用不同的图形或标记来表示:
包的构造型
在上图中,从上到下,从左到右分别表示业务分析模型(Business Analysis Model)、业务系统(Buesiness System)、业务用例分析模型(Business Use Case Analysis Model)、域包(Domain Package)、层(Layer)和子系统(Subsystem)。根据需要可以选择包相应的构造型,能够快速识别出包的作用。
在实际建模中可以遵循以下原则:
1,重用等价原则
对于同类可重用的模型元素尽量放到一个包中,不要把可重用模型元素和不可重用的模型元素混到一个包中。
2,共同重用原则
把同一个应用要重用的多个模型元素放到同一个包中,以减少包间的依赖,提高包的独立性。
3,共同封闭原则
把可能同时修改,同时维护的模型元素放到一个包中,以便于今后维护和升级。
4,非循环依赖原则
包之间的依赖关系不要形成循环:即不要出现A依赖B,B又依赖于A的现象,或者多个包形成循环依赖。
严格来讲,包图并不是真正意义上的UML图,但在模型元素分类、模型结构和程序命名空间中扮演着重要的作用。在实际建模过程中,可以使用下面的做法来绘制包图:
1,分析系统的模型元素,把概念上或语义上相近的模型元素纳入到一个包中;
2,对包中的每个元素标识其可见性;
3,确定包与包之间的依赖关系;
4,绘制包图,并对包图进行优化。
在ProcessOn中,可以在UML图文件内创建包图,也可以在流程图中添加包图制作时涉及的图形元素来创建包图。
1,创建包
直接从编辑器左侧的图形组件区拖拽UML通用图形中的“包”元素到编辑器右侧空白区域,即可完成包的创建。
使用ProcessOn创建包
2,包的重命名
点击包图形上的“包名称”,则可以对包重新命名。
3,给包添加元素
用户绘图时可以直接从编辑器左侧的图形组件区拖拽图形到编辑器空白区域,即可完成图形的创建。然后可以选择图形后通过编辑器顶部工具栏和右侧的工具面板对图形相关属性进行设置。
给包添加元素
4,添加包之间的联系
绘制联系的方法是使用快捷键“L”,或者在左侧图形组件区的基础图形中拖拽“直线”元素到编辑器空白区域,或者直接从一个图形的一端移动到另一个图形上即可得到一条线条。如果添加依赖联系,则选中“依赖包”后,点击其一端后按住鼠标左键到“被依赖包”上,松开鼠标即完成了一个依赖关系的建立。
添加包之间的联系
下面给出包图的两个例子,来说明包图的具体使用方法。
第一个例子反映的是在建模过程中各模型元素的组织情况,使用包按照系统分析设计的阶段来组织各种模型。
建模过程中各模型元素的组织情况
第二个例子描述了系统开发中各元素的组织情况。UI中包含了使用的各种用户界面,BLL中包含了业务逻辑处理的各种类或接口,DAL中包含了数据访问层的相关类,Common中存放的是系统各个模块共用的一些组件或类是内容。
系统开发中各元素的组织情况
UML往期内容推荐