五、包图
- 包图
- 、基本概念
- 概念:
用来描述模型中的包和其所含元素的组织方式的图,是维护和控制系统总体结构的重要内容。
包可以把所建立的各种模型组织起来,形成各种功能或用途的模块,并可以控制包中元素的可见性以及描述包之间的依赖关系。
2、系统结构
对于系统模型的内部组织结构而言,通常采用先分层、再细分成包的方式。
分层一般是按系统架构,常用的一种方式是三层架构:
(1)用户界面层(UIL):
代表与用户进行交互的界面,既可以是Form窗口,也可以是Web界面(网页) ;不处理任何业务,负责显示与实时更新。
(2)业务逻辑层(BLL):
负责系统的业务流程,处理数据访问层传送的数据,并实现业务逻辑。
(3)数据访问层(DAL):
与数据库进行交互,负责将底层数据传送到业务逻辑层。
- 、包图的作用
1、高内聚,低耦合:
在外部观察包时,可以将内部元素视作一个整体,方便将多个元素一同处理。
包内部的元素应该保证有相似、相同的语义,或者其元素有同时更改和变化的性质。
2、其他:
包是UML中最重要的分组事物,用来组织模型中的元素。
具体作用如下:
(1)对语义上相关的元素按一定规律进行分组。例如,把功能相关的类放在一个包中。
(2)提供封装的命名空间。
同一个包中,元素不能重名,其元素的名称必须惟一。
(3)提供配置管理单元。 例如,以包为单位,对软件进行安装和配置。
(4)在设计时,提供并行工作的单元。
- 、元素的分包原则
1、分包原则
(1)、一个元素也不允许在两个包中重复出现。
(2)、一个包中的同种类元素名称必须是唯一的。相同包内元素不能重名。
(3)、“高内聚低耦合”的原则
A:包内元素要紧密联系;最大化每个包中private元素的个数。
分在同一个包中的元素应该具有某些相同的性质,即包的高内聚性。
B:包与包尽可能保持独立减少耦合度,最大限度减少包之间的依赖;最小化每个包中public、protected元素的个数。
(4)非循环依赖原则:
包之间不要形成循环依赖关系;循环依赖是由于分包不当造成的。
如果出现,解决方法: 合并法和分离法
- 包的依赖关系
- 依赖关系:
包之间的依赖关系实际上是从一个更高层次来描述包内某些元素之间的依赖关系。也就是说,如果不同包中任何素之间存在着一个依赖,则两个包之间就存在着依赖关系。
包之间的依赖关系首先需要包中的某些元素具有某种外部可见性,即可以被包外部的元素所引用。
- 循环依赖问题:
解决方案:重新分包,引入第三个包,重新建立依赖关系。
- 、包图的组成
- 包
(1)包名:
有简单名与路径名两种。
(2)包元素:
1)元素:
包中可以容纳各种高级的模型元素,
如类和类的关系、状态机、用例图、交互、协作等,甚至是一个完整的UML图。
此外,包中还可以含有包(包的嵌套)不含类的属性和操作
2)包元素的可见性:
①定义:控制包外元素对包内元素的访问权限。
②可见性:
(3)、包的构造型
1)定义:
可以使用构造型来描述包的种类。UML预定义了一些构造型,用户也可自行
定义新的构造型。
- 分类:
1、 <<system>> 和 <<subsystem>>构造型
系统和子系统包
2、 <<facade>> 构造型
(外观)构造型的包,自身不包含任何模型元素,只是引用其他包的元素,所以称为“虚包”,主要用于为其他复杂的包提供简略视图。
3、 <<stub>> 构造型
(桩)构造型的包,是一个代理包,通常应用于分布式系统的建模中,作为其他包的公共内容代理的包。
- 依赖关系
-
定义:
指两个包所包含的模型元素之间存在着一个或多个依赖。
(2)分类:
1)use关系
use 关系是一种默认的依赖关系
2)import关系
import关系使命名空间合并,是最常见的依赖关系。
import(引入/导入)关系说明
①提供者包的命名空间将被添加到客户包的公共命名空间中;
②客户包中的元素能够访问提供者包的所有公共元素;
注意:
①引入依赖是可以传递的
②客户包的元素可以使用简单名引用提供者包的元素,但提供者包的元素不能与客户包的元素同名,否则将会导致命名空间的冲突。
3)access(访问)关系
客户包中的元素能访问提供者包中的所有公共元素
但是命名空间不合并,仅把提供者包的内容附加到客户包的私有命名空间,
在客户包中必须使用路径名。
4)trace关系
追踪(追溯),表示一个包到另一个包的历史发展。
(3)注意:
①对于由对象类组成的包,若两个包中的任意两个类间存在依赖关系,则这两个包之间存在依赖关系。
②包的依赖是不传递
- 泛化关系
①特殊包必须遵循一般包的接口。对于一般性包可以标明 {abstract},定义为一个接口,该接口有多个特殊包实现。
②特殊包继承一般包中公共和受保护可见性的模型元素,并且可以重载和添加自己的类。特殊包可以替代一般包,用在一般包使用的任何地方。
③箭头指向: 特殊包(子包)→一般包(父包)
-
拥有(组成)关系
拥有关系是包嵌套时,包之间的一种组成关系,意味着子包被外围包所拥有。
- 、包图建模技术
- 包图与类图的区别:
2、建立包图的具体做法:
(1)分析系统模型元素(通常是对象类),把概念上或语义上相近的模型元素纳入一个包。
(2)对于每一个包,标出其模型元素的可视性(公共、保护或私用)。
(3)确定包与包之间的依赖联系,特别是输入依赖。
(4)确定包与包之间的泛化联系,确定包元素的多态性与重载。
(5)绘制包图。
(6)包图精化。
3、对成组的元素建模:
(1)浏览特定体系结构视图中的建模元素,找出由在概念和语义上相互接近的元素所定义的组块。
(2)把每一个这样的组块放到一个包中。
(3)对每一个包找出可以在包外访问的元素,将这些元素标记公有的,把其他的元素标记为受保护的咸私有的。如果不确定时,就隐藏该元素。
(4)确定包与包之间的依赖关系,特别是引入依赖。
(5)确定包与包之间的泛化关系,以及包的多重性和重载。
4、对体系结构视图建模:
(1)找出问题语境中一组有意义的体系结构视图。
(2)找出对于可视化、详述、构造和文档化每个视图的语义来说充分必要的元素(和图),并将它们放到合适的包中。
(3)如有必要,将这些元素进一步地组合到它们自己的包中。
(4)不同视图中的元素之间通常存在依赖关系