一般来说,程序员都力求软件工程系统的高集成性。一个具有高集成性的软件系统包含着各种执行独立任务的成分,而每一个独立任务都是整个系统的重要组成部分。相反,如果一个软件系统的集成性差,那么系统所包含的各种成分由于没有很好的被定义而往往会容易发生冲突。
在凝聚封装过程中,重载是非常重要。在这一章节里,我将讨论一些启发式知识,这些启发式知识会提供生成具有高凝聚性,可重载的,基于java.io的封装。
封装启发式知识 1:生成高集成性的封装
既然重载是类的重要特性,在实际开发过程中很少单独对一个类进行重载。相反的,一般重载都是对多个类进行。java.io封装就是一个高集成性的成功范例。封装中很少有类单独地使用,通常都是同时使用多个类来达到预期的目的。
对于高集成性的封装,软件维护和升级都很容易,因为它们提供了各种集成模块,这些模块中的类能提供各种功能齐全的函数。集成性差的封装包含的类中的函数都是自成一体,相互独立,这样使用起来就会非常困难,因为你必须从其他类中提供接口,当然软件的维护也会变得很困难,因为你在使用这样的封装时往往不得不更改其中的类。这样的封装结果对软件的部署带来很大的麻烦。
封装启发式知识 2:注意封装内容对重载的影响
当设计封装时,通常要注意考虑封装中类的使用情况,除此之处,你也应该考虑到那些虽不是封装的内容但经常与封装有联系的类。当完成一个高集成性的封装后,你就可以把这一封装看成是完整的,可重载的各种成分的集合。
封装启发式知识 3:封装过程中强调重载功能
封装是各个类的集合,其中的每一个类在程序中都执行一定的功能单元。这样的封装都剔除了很多特定的细节使各种功能单元变得更加容易使用。但是,为了更有效地使用这些封装,开发人员必须深刻地理解封装的函数功能和懂得如何与封装进行通讯。
封装启发式知识 4:以简化方式设计封装
封装中的函数比一个独立类中的函数更简化有效。提供这样的服务也会产生软件维护的挑战,因为这需要封装的用户必须对封装的内部函数功能有着清楚的了解。
封装启发式知识 5:提供完整的封装接口
一个封装的接口包括很多公用类及公用函数。工程中任一其他类都可以调用类中的公用函数,这样一旦这一公用函数改变,调用这一函数的类也要作出相应的更改。如果程序比较简单,可以很容易地找到哪里调用这一函数。然而,如果在不同程序之间使用封装,那么问题就会变得很复杂。一个封装的接口即是一些公用函数,这意味着它可以被第三者调用。所以封装的接口必须需要很好的设计。
因为一个封装接口就是一些公用函数,所以开发人员在调用这些函数无需有过多的犹豫。
关键的注意事项
在设计封装时必须注意以下几条事项:
发布接口——封装的对外发布接口尽可能的简单化,以便能方便地被第三方所调用。
封装的设计难易程度——这是在设计一个封装必须要考虑的问题。高难度的封装也会让用户无从下手。
更大的单元——许多封装的启发式知识与Java Archive (JAR)文件有关。在这一点上,类,封装,JAR等级都存在高集成性。
认真地去处理封装
封装中的完整功能函数能方便你的程序设计,因为它减少了很多不必要的繁琐。关键之处在于能设计出包含全部内容的高集成性的封装。胡乱的封装也会产生胡乱的结果,这就会产生软件维护与发布的危机。在下一节中,我将讲述启发式知识的其他内容以帮助你设计出高凝聚的封装。