包是一种对模型元素进行成组织的通用机制,它把语义上相近的可能一起变更的模型元素组织在同一个包中,便于理解复杂的系统,控制系统结构各部分的接缝。只在软件开发过程中存在。
包图是包与包之间的关系组成的,包图可以控制包中元素的可见性和描述包之间的依赖关系,因而可以统筹把握系统的结构。
用像文件夹一样的符号表示,大矩形左上角带一个小矩形。
包的名字要简单,具有描述性。可以用简单的字符串或路径名表示,可以放在大矩形中也可以放在左上角的小矩形框中。
包名下,可以用花括号中的约束说明包的性质,比如:{global}表示通用包,其他的包都依赖于该包。
不同包的模型元素可以同名,但在同一个包中的模型元素不能同名。
一个包可以拥有的元素:类、接口、组件、节点、协作、用例、图、其他包;一个包可以有一个或多个模型元素。
”+“,公共,对所有包是可视的
”-“,私有,对外包是不可视的
”#”,保护,只能对该包子包是可视的
<<facade>>:说明包仅仅是其他包的视图,只包含对另一个包所拥有的模型元素的引用,只作为另一个包的部分内容的公共视图。
<<framework>>:说明包代表模型架构。
<<stub>>:说明一个包是另一个包的公共内容的服务代理。
<<subsystem>>:说明一个包代表系统模型的子系统
<<system>>:一个包代表系统模型。
依赖:两个包之间存在着依赖指一个元素的改变会引起另一个元素发生相应改变。
表示:虚箭线表示,从依赖包指向独立包
输入依赖:包与包之间的一种存取依赖关系,输入依赖是单向的,表示方法是在虚箭线上标有构造型<<import>>,存取依赖的另一个构造型是<<Access>>,他们的区别是<<import>>把目标包的内容加到源包的命名空间。
泛化:表达事物的一般和特殊的关系 ,如果两个包之间有泛化关系,则特殊性包必须遵循一般性包的接口。一般性包加上{abstract}表示它定义了一个接口。也就是描述的继承关系。
1.可以描述需求:画完了用例图后可以将关联的用例放在一起,比如included, extending等放在包中,简化用例图,整理用户需求
2.逻辑设计看起来更清晰:包类图,把一个框架的所有类放到相同的包中。相同继承层次的类放在相同的包中,彼此有聚合和组合关系的类放到一个包中,彼此合作频繁的类,通常放到一个包中,降低耦合度。
3.限制访问:包可控制包内可视性
包图是保持系统架构简明清晰的工具,包的出现,就是把一堆元素分类打包,包图就是把大的图进行重新组织,而包图的组织形式关系到系统性能,要遵循高内聚低耦合的原则。包图虽然不是正式的UML图,但是可以应用到任何UML图中去,作用还是很大的。