第5章UML包图
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
15
5.6 创建包图的方法
绘制包图的基本过程主要有以下3个步骤。
(1) (2) (3) 寻找包。 确定包之间的关系。 确定包内元素的可见性。
“最小化包间的耦合关系”的原则是:最大限 度减少包之间的依赖,进行包封装时,避免包 之间的循环依赖;最小化每个包中public、 protected元素的个数,最大化每个包中 private元素的个数。
21
5.7.2 对体系结构建模
体系结构是一个软件系统的核心组成和宏观结构,常 用的体系结构模式包括分层、MVC、管道、黑板、微 内核等;而在应用软件中,分层和MVC是最常见的两 种结构。 在分层的体系结构中,我们常常把一个软件系统划分 为表示层、业务逻辑层和数据访问层,每一层用一个 包来表示。 图5-19所示为一个典型的三层结构的软件系统,该系 统包括三层,每一层由多个对象组成。
(1) <<system>>符号:表示包代表一个系统。 (2) <<subsystem>>符号:表示包代表某个子系 统。 (3) <<facade>>符号:表示包是由其他包构成的 一个视图。 (4) <<stub>>符号:表示包是一个代理包,该代 理包为其他包提供公共服务。 (5) <<framework>>符号:表示包代表一个框架。
17
5.6.2 调整候选包
在已经识别一组候选包后,减少包间依赖,最小化每个包中public、 protected元素的个数,最大化每个包中private元素的个数。做法如 下。 (1) 在包间移动类。 (2) 添加包、分解包、合并包或删除包。 通常,在分析阶段,将类封装为包模型时,应该尽量使包模型简单。 起初,将类图转换为包图时,不需考虑包间的泛化和依赖关系,仅 当使用诸如包泛化和依赖关系能简化包模型时,才使用这些包整理 技术。 除了保持简单,还应该避免嵌套包。包的嵌套结构越深,模型变得 越难理解。我们曾见过非常深层的嵌套包,而每个包仅包含一个或 两个类。这些模型更像是标准的、自上而下的功能分解,而不是包 模型。 作为经验法则,希望每个包具有4~10个分析类。然而,对于所有的 经验法则,却存在例外,如果打破某个法则使得模型更加清晰,就 采用这个法则。有时,必须引入只带有一个或者两个类的包,因为 需要断开包模型中的循环依赖,在这种情况下是完全合理的。
1.包的示例 2.包中的元素 3.包的作用
4
5.2 什么是包图
1.包图示例
2.包图的作用
3.包图中的元素
5
5.3 包 的 表 示
在UML中用文件夹符号来表示一个包。即一个 包由两个矩形组成,上面是一个小矩形,下面 是一个大矩形。图5-3就是最常见的包表示法。 图中包的名称是UI,包中包含一个类Page。
19
5.7 包 图 应 用
包图主要用于两种不同层次的用 途:
一是对成组元素建模,以便把对紧 密相关的类封装到同一个包中,方 便使用、管理和维护; 二是对体系结构建模,用包图来表 示软件的宏观结构。
20
5.7.1 对成组元素建模
对成组元素进行建模可以说是包图最常见的用途,它 把相关的元素分组,然后把每一组封装为一个包。在 对成组元素建模时,应遵循以下几个策略。
13
5.5 包的传递性
包间的传递性是指:如果包X与包Y存在关系,包Y与 包Z存在关系,那么,包X与包Z也存在关系。 <<import>>依赖是可传递的,<<access>>依赖是不 可传递的。 当客户包与提供者包之间是<<import>>依赖时,提供 者包中的公共元素就成为客户包中的公共元素,这些 公共元素在包外同样是可以访问的。如图5-14所示, Z包中的公共元素成为Y包的公共元素,同时,Y包中 的公共元素成为X包中的公共元素,因此,Z包中的公 共元素能被X包访问。所以,X、Y、Z包间的 <<import>>关系存在传递性。
14
5.5 包的传递性
当客户包与提供者包之间是<<access>>依赖 时,提供者包中的公共元素就成为客户包中的 私有元素,这些私有元素在包外是不可以访问 的。如图5-15所示,Z包中的公共元素成为Y包 的私有元素,而X包只能访问Y包中的公共元素, 因此,X包不能访问Z包中的公共元素。所以, X、Y、Z包间的<<access >>关系不存在传递 性。
6
5.3.1 包命名
1.包名称的位置
2.包名称的书写格式
包名称的书写格式有两种,即简单名和全名。
7
5.3.2 包中的元素
1.包中元素是类和接口
2.包中的元素是用例
3.包中元素是包
4.包中元素的可见性
5.访问权限
8
5.3.3 用构造型表示包
一个包的具体新特征有很多,为了表示包的新 特性,UML提供了5种构造型来描述包的新特 征。下面分别说明这5种构造型的语义。
16
5.6.1 标识候选包
在分析阶段,我们以对象模型和用例模型为依 据,把关系紧密的类分到同一个包中,把关系 松散的类分到不同的包中。确定包的过程包含3 个步骤:第一步,以类图为依据,寻找候选包; 第二步,对候选包进行调整;第三步,消除包 的循环依赖。标识候选包的原则如下。
(1) 把类图中关系紧密的类放到一个包中。 (2) 在类层次结构中,把同一层次中的类放在同 一包中,不同层次中的类放在不同的包中。
9
5.4 包图中的关系
包图中包间的关 系有两种,即依赖 关系和泛化关系。
10
5.4.1 依赖关系
1.<<use>>关系
2.<<import>>关系
11
5.4.1 依赖关系
3.<<access>>关系
4.<<trace>>关系
12
5.4.2 泛化关系
包间的泛化关系类似于类间的泛化关系,子包 继承了父包的公共元素和保护元素,并可以增 加新的元素。在使用父包的地方,可以用子包 代替。如图5-13所示,父包是GUI,它有两个 子包,分别是G1和G2。
2
第5章 包
图
包图就是用来描述包 及其关系的图,我们常 用包图来描述系统、子 系统的宏观组成和结构。
3
5.1 什 么 是 包
包是用于分组的符号,常用来对一组相同的 UML元素进行分组存放和管理。UML中的包相 当于文件系统中的文件夹,UML中的一个包直 接对应于Java中的一个包。
在Java中,一个包可能含有其他包、类或者同 时含有这两者。
1.什么是包图?
题
2.包在应用当中的主要作用是什么?
3.包之间的依赖关系主要包括哪几种?请分别举例说 明。
4.包之间的各种依赖关系中,客户包将把提供者包并 入自己的命名空间,并成为客户包中的私有元素的是 哪种关系? 5.包的可见性指什么?举例说明。 6.简述体系结构建模和对成组元素建模的区别,举例 说明用包图对体系结构进行 建模。
22
百度文库
5.8 小
结
本章首先解释了几种常见的包图表示法, 并通过了一个简单的例子来说明包的可见 性、依赖关系、泛化等概念。其次,概要 地说明了5种包的构造型。 最后说明如何寻找包、确定包之间的依赖 关系,从而绘制出一个表明软件体系结构 的包图,并简要介绍了用包图表示系统体 系结构的建模方法。
23
5.9 习
(1) 每个包都应该是由在概念上、语义上相互接近的元 素组成。 (2) 标出每个包中可见性是公共的元素,并且每个包中 的公共元素应尽可能地少。 (3) 再构建包图时,一般使用默认的<<use>>构造型来 标识包间关系。在用编程语言实现包中的类时,用关键字 <<import>>代替UML中的<<use>>构造型。 (4) 采用泛化标识通用包与特殊包间的关系。
18
5.6.3 消除包的循环依赖
如果包A以某种方式依赖 包B,并且包B以某种方式 依赖包A,就应该合并这 两个包,这是消除循环依 赖非常有效的方法。但是 经常起作用的、更好的方 法是,从A、B两个包中提 起公共元素,把它们封装 为第三个包C。消除循环 包的过程是一个多次迭代 的过程,示例显示如图516中的示例所示。