第7章包.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章包

第7章 包 7.1 包的基本概念 软件开发时常见的一个问题是如何把一个大系统分解为多个较小系统。分解是控制软件复杂性的重要手段,在结构化方法中,考虑的是如何对功能进行分解,而在OO方法中,需要考虑的是如何把相关的类放在一起,而不再是对系统的功能进行分解。包在开发大型软件系统时是一个非常重要的机制,包中的元素不仅仅限于类,可以是任何UML建模元素。包就像一个“容器”,可以用于组织模型中的相关元素以便更容易理解。如图7.1所示是一个包的例子。 图7.1 AWT包 图7.2 包之间的非传递依赖关系 包中可以包含其他建模元素,如类、接口、构件、结点、用例和包等。就像对类的属性和操作可以进行可见性控制一样,对包中的元素也可以进行可见性控制。图7.1中的AWT包有3个元素:Window、Form和EventHandler。其中Window的可见性为公有的(public),表示在任何导入(import)AWT包的包中,都可以引用Window这个元素;Form的可见性为保护的(protected),表示只有AWT包的子包才可以引用Form这个元素;EventHandler的可见性为私有的(private),表示只有在AWT包中菜可以引用EventHandler这个元素。 对包的命名有两种方式,即简单包名(simple name)和路径包名(path name)。例如Vision是一个简单的包名,而Sensors::Vision是带路径的包名。其中Sensors是Vision包的外围包,也就是说,Vision包是嵌套在Sensors包中的。包可以嵌套,但在实际应用中,嵌套层次不应过深。 包与包之间可以存在依赖关系,但这种依赖关系没有传递性。如图7.2所示是包之间非传递依赖的例子,包User Services依赖于包含包Business Services,包Business Services又依赖于包Data Services,但包User Services并不依赖于包Data Services。图中的依赖关系的版型都是import,表示源包会存取目的包中的内容,同时目的包中的内容不需要加包名限定,直接用目的包中的元素名字即可。 另外,与UML中其它建模元素类似,包之间也可以有泛化关系,子包继承父包中可见性为public和protected的元素。如图7.3所示是包之间泛化关系的例子,其中包WindowsGUI泛化了包GUI,包WindowsGUI继承了包GUI中的Window和EventHandler元素,同时包WindowsGUI重新定义(即覆盖)了包GUI中的Form元素,而VBForm是包WindowsGUI中新增加的元素。与子类和父类之间也存在Liskov替换原则,即子包可以出现在父包能出现的任何地方。 图7.3 包之间的泛化关系 但是在实际建模过程中,包之间的泛化关系很少用到。 包是UML中的建模元素,但UML中并没有一个包图,通常一些书上所说的包图指的就是类图、用例图等这些图,只是在这些图中只有包这一元素。 UML中,包是分组事物(grouping thing)的一种,它是在建模时用来组织模型中的元素的,在系统运行时并不存在包的实例。这点和类不一样,类在运行时会有实例(即对象)存在。 7.2 设计包的原则 在考虑如何对类进行分组并放入不同的包时,主要是根据类之间的依赖关系进行分组。包中的类应该是功能相关的,在建立包时,应把概念上和语义上相近的模型元素纳入一个包。依赖关系其实是耦合的一种体现,如果两个包中的类之间存在依赖关系,那么这两个包也就有了依赖关系,也就存在了耦合关系。好的设计要求体现高内聚、低耦合的特性。 在设计包时,应遵循以下原则: ·重用等价原则(Reuse Equivalency Principle,REP) ·共同闭包原则(Common Closure Principle,CCP) ·共同重用原则(Common Reuse Principle,CRP) ·非循环依赖原则(Acyclic Dependencies Principle,ADP) 7.2.1 重用等价原则 重用等价原则(REP)指的是把类放入包中时,应考虑把包作为可重用的单元。这种设计原则和用户的使用心理有关,对于可重用的类,其开发可能比较快,开发人员会不断地推出这些类的升级版本。但对于可重用类的使用者来说,不会随着可重用类的每次升级而修改自己的系统,不过,在需要升级的时候又会要求很容易地用新版本的可重用类替换旧版本的可重用类。因此设计包的一个原则是把类放在包中时要方便重用,方便对这个包的各个版本的管理。 7.2.2 共同闭包原则 共同闭包原则(CCP)指的是把那些需要同时改变的类放在一个包中。例如,如果一个类的行为和/或结构的改变要求另一个类作相应的改变,

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档