随着程序软件越来越复杂,一个程序往往包含了数百个类。管理这些类的有效方法就是将类进行分组,将功能相似或相关的类组织在一起。包图是一种维护和描述系统总体结构模型的重要建模工具
包的构成:
1.包的名称
2.包的元素
包自身所拥有的元素,如类、接口、组件、节点和用例等
从另一个包中合并或导入元素
另外一个包所访问的元素
3.包的可见性
Private:定义的私有元素对包外部元素完全不可见。-
Protected:定义的被保护的元素只对那些与包含这些元素的包有泛化关系的包可见。+
Public:定义的公共元素对所有引入的包以及他们的后代都可见。#
4.包的构造型(Stereotype)
5.包的子系统
子系统是具有单独说明和实现部分的包。
它表示具有对系统其他部分存在接口的连贯模型单元。
系统:
是组织起来以完成一定目的的连接单元的集合,由一个高级子系统建模。一个系统通常可以用一个或多个视点的不同模型描述。
系统使用一个带有构造型“System”的包表示。
例如业务系统:
包的关系:
1.依赖关系
指两个包所包含的模型元素之间存在着一个和多个依赖。
包的依赖关系
1)、《use》关系
是一种默认的依赖关系,如果在依赖关系中没有指名类型,就默认为《use》关系
《use》关系说明(客户包)发出者中的元素以某种方式使用(提供者包)箭头指向的包的公共元素,也就是说发出者包依赖于箭头指向的包
2)、《import》关系
说明提供者包的命名空间添加到客户包的命名空间中,客户包中的元素也能访问提供者包中的所有公共元素
3)、《access》关系
说明客户包中的元素能访问提供者包中的所有公共元素,但是命名空间不合并,在客户包中必须使用路径名。
《use》和《access》的区别:《use》表示包中元素间的依赖,而《access》依赖却不存在包中元素的依赖,只简单表达包间的一般依赖。
4)、《trace》关系
表示一个包到另一个包的发展历史
应尽量避免下面的循环依赖
解决循环依赖:将PackageA或PackageB中的内容进行分解
2.泛化关系
包的常见问题:
1.一定要避免循环依赖关系
2.测试时可以以包为测试单位
3.应该尽量把概念和语义上相近的元素包含在同一个包中
4.对于一个包,找出那些包内的元素是可以在包外访问的,把这些元素标记为公共的,其他所有元素都标记为受保护的或者私有的
5系统中每个元素都只能为一个包所有