浅谈计算机信息隐蔽性设计
摘要:包含在计算机模块内的信息对于无需这些信.g-的其他模块是不可存取的,即将不需要的信息都隐藏起来,只允许其他模块知道其本身所需的信息。这样可以使问题求解简单化,从而达到好理解、好实现、好验证、好重用的目标。它可以从整体上保证计算机软件的质量,降低计算机软件的开发和维护成本。
关键词:隐蔽原则;抽象原则;关系;对象;黑盒
有关计算机软件工程的隐蔽原则一般是这样描述的:包含在模块内的信息对于无需这些信息的其他模块是不可存取的,即将不需要的信息都隐藏起来,只允许其他模块知道其本身所需的信息。
如果说最简单的就是最好的,那么计算机信息隐蔽性最强的就是最简单的。从方法学的总结到推广,从软件设计到软件实现,从手工开发到工具辅助,信息隐蔽原则无时无处不发挥着极有效的指导作用。
l 计算机隐蔽原则与其他原则的统一
1.1 方法学都基于软件工程基本原则
基本原则是行为所依据的法则和规范。无论什么方法学从知识工程角度来说,都是运用软件工程方法学基本原则的规则、策略及工具的集合。其中抽象原则是最重要的,它给出软件工程问题求解全过程的最基本原则,其他原则是对抽象原则的补充。
指导如何抽象的基本原则大体上可以分为体系规范原则和模块规范原则两类。前者是规范整体解题思路及解得验证,包括形式化原则、分割原则、层次原则、概念完整性原则、完备性原则;后者则是与子问题有关的原则,包括隐蔽原则、局部化原则、逻辑独立性原则。面向对象的“关系”抽象较多受前者规范,“对象”抽象较多受后者规范。
1.2 基本原则间的相互关联
虽然可以做“体系规范”和“模块规范”的大体分类,但基本原则之间并不是无关的,而是整体与局部间的相互制约,形成一个统一体。
要求将信息最大限度地隐蔽在计算机模块内的隐蔽原则,使模块内部信息封装化、模块的外部形象黑盒化,与外部的关系最少,所以使满足体系抽象原则的抽象过程和验证工作简单化,同时也很容易满足模块规范的其他原则,如局部化原则和逻辑独立性原则。
例如将具有多重关联的多个数据库表的条件组合查询,
由一个驻在服务器端的存储过程来统一完成。客户端用户可以在同一个窗口上对数十项多层交叉的查询条件任意选择组合,将选定条件送给相应存储过程。从外部来看,存储过程的任务极为单纯,即根据指定条件找出所有符合条件的记录,将结果写到一个有共享结构的工作表中,然后把查询正常与否的消息通报给客户端的调用程序。该程序接到正常查询结束消息后,到指定暂时存放查询结果的工作表中,按一定格式取出结果并报告给用户。
我认为,这是一个全面符合软件工程基本原则的设计典范,而其关键技术是信息隐蔽设计。首先是遵循隐蔽原则将具有复杂关系结构的多个数据库表的操作和库表结构封装在一起,实现了完全的信息隐蔽。由于高度信息隐蔽的实现使这一组相关库表的所有多层交叉组合结构有可能在一个对象中完成,高度满足了局部化原则。由于它的功能单纯、明确,数据库表间接口通过对相应存储过程传递参数来完成,属于内聚性最强的功能内聚和耦合性最弱的数据耦合,因而具有很好的逻辑独立性。
不难想象,几十项查询条件的组合,查询结果显示方式达三四十种是很正常的。由于在局部化、功能独立化原则下应用对象只是抽象成一个超类窗口对象,在信息隐蔽设计支持下,这三四十种结果显示功能可以全部相互独立地挂在查询父窗口下,自然地满足了分割原则、层次原则、概念完整性原则等体系规范原则。
2 信息隐蔽性设计的目的和优越性
2.1 目的
探讨信息隐蔽性设计的目的是:分析将信息隐蔽起来有什么好处,以便使问题求解简单化。
2.1.1 好理解
一般的复杂问题有两个特征,一是解题要参照的接口太多、太复杂,二是解题的方法太复杂。那么要想使之简化,无非是从问题接口和问题解法上人手。将复杂的接口信息与复杂算法隐蔽起来,剩下的自然是简单的。换句话说就是实现对象的外部数据结构与算法的封装。
需要知道的东西越少越好理解。在软件工程中,理解是最繁重的工作之一。开发过程中从分析人员对用户需求的理解,到设计人员对需求规格的理解,直至编程人员对软件设计的理解,是一个理解传递的过程。每一级开发人员的目的都应是将经过自己加工后的、更简单的抽象结果更抽象、更好理解。因此好的设计人员就是经其加工后传给下级开发人员的设计最容易理解,即给出的问题定义越简单、接口越少越好。
2.1.2 好实现
有时好理解却不好实现,即实现算法复杂。但是,如果把复杂算法做成一个封装的模块对象,使实现者只需知道模块的作用和使用方法就可以得到所期待的输出结果,而无须知道模块内部的具体实现,因此实现的问题就可以得到简化。
2.1.3 好验证
复杂问题也不好验证。有些设计看起来好理解,也不难实现,但验证起来却很难。例如如果设计了相当多的功能热键用户接口。对于输入数据窗口和数据项较多的应用程序,测试起来十分困难。多个功能热键、多种激活方式、多个输入数据窗口和数据项之间前后控制跳转,这些都是黑盒测试的出发点,而每个控制节点都以2以上的指数方式递增着测试用例数目。即使一般复杂的应用,其测试用例也超过200类。
由于采用了这种多控制、多转移的复杂输入方式设计,算法复杂是不可避免的。简化的办法还是信息隐蔽性设计,将每个热键的多种激活方式触发的内部处理都写成公共对象且封装起来,供各应用程序继承调用。显然这种隐蔽技术直接简化了理解和实现。由于公共父类对象已经做过全面集中测试,下层程序继承后的有关测试绝大部分可以“免检”,所以间接简化了验证,达到“好验证”的目的。
2.1.4 好重用
好验证的设计方法是把算法复杂的对象泛化为超类对象,进行集中实现和集中测试,使多个下层子类共享父类的实现和测试,所以它也是一种重用方案。好重用往往是好理解、好实现、好验证的必然结果。不过它是从更高层次上审视信息隐蔽性的目的。
2.2 优越性
由于信息隐蔽性设计重用性高,因此可以大大降低开发和维护成本。具体可以从两方面来看其优越性。
1)由于将复杂内容都隐蔽到公共超类之中,可以集中优势兵力对公共超类对象统一进行设计攻关、设计优化和代码优化及测试和修改,所以不仅利于保证设计和实现的正确性,而且利于提高可维护性、保证数据安全性。总之,有利于从整体上保证软件的基本质量,降低维护成本。
2)由于简化了编程难度,避免了重复劳动,降低了对程序员技术经验水平的要求,减少了设计说明和理解交流及编辑的工作量,因而利于减少开发成本。
倘若前述的软件设计不是采用信息隐蔽性设计,倘若我们只有对复杂的库表结构了如指掌之后才能进行多层交叉组合查询程序的实现,这不仅将需要许多时间理解库表结构,还需要构筑同样的数据库,录入能体现复杂数据关系的各种测试数据。由于数据关系映射着应用对象的关系,为此我们还必须了解满足各种组合查询的数据与应用业务处理间的对应关系,因为稍有理解偏差,取出的用于统计的数据就会全面失去意义。所以信息隐蔽性设计对于大型软件开发,特别是分式的异地开发,是不可或缺的。
实际上,前述软件设计提供给我们的是与复杂数据库结构封装在一起的组合查询存储过程,只是一个桩程序。在我们开发客户端组合查询程序时,它完全是个黑盒子,甚至没有放到服务器端。但是,它使得组合查询程序只剩下输入数据检验这一单纯功能了。
3 信息隐蔽性设计的基本思路与实践
信息隐蔽是个原则而不是方法,按此原则设计的系统具有信息隐蔽性,这是设计优化的一种表现。结构化方法和面向对象方法都追求信息隐蔽性,并且各自具有一套抽象与实现的思路与方法。在此,我们尝试归纳一下不拘泥于方法学的有关设计思路与方法。
3.1 哪些场合应考虑隐蔽性设计
总的来说,凡是可以用信息隐蔽性设计、使复杂问题简单化的场合,都应该采用此设计。
首先,可以对共同事件、共同处理采用隐蔽性设计。因为重复是问题复杂化的一个重要原因。例如“输入数据检验”、“退出事件”、“打开事件”、“打印处理”、“热键的转移控制”、“系统信息输出处理”等,甚至对打印报表的“制表时间与页号编辑”功能的共同处理。
其次,可以对接口和环境采用隐蔽性设计。因为接口也是问题复杂化的重要原因之一。例如,可将静态数据库表及其查询操作隐蔽起来,将复杂关系表及其存取操作隐蔽起来,甚至可以将所有数据库都隐蔽起来,使低级开发人员根本不必意识数据库的存在,以及将特殊输入输出装置接口处理隐蔽起来,将与其他系统的接口处理隐蔽起来等。
此外,还可以把复杂的算法、概念隐蔽起来,也可以把用户没有权限的功能隐蔽起来,以保证数据的安全性。
3.2 信息隐蔽的实现方法 .
我们可以把实现信息隐蔽的物理范围称为隐蔽黑盒。信息隐蔽实现方法实际上就是隐蔽黑盒的实现方法与调用方法。隐蔽黑盒一般可以用函数、存储过程、超类对象、语句系列来实现。使用隐蔽黑盒时,可以用函数、存储过程调用、祖先继承及程序段复制等相应办法来引用。
3.2.1 服务器端的隐蔽黑盒设计技术
我们使用触发器来实现对一些数据库超类表(如流水号表)或共同表操作(如表头信息写操作)的盒化。触发器是通过将实现方法与调用方法封装在一起,把调用方法也隐蔽起来,是最彻底的隐蔽黑盒。这除了使复杂问题简单化以外,还有利于数据库的安全。因为再严密的客户端操作也无法完全排除网络带来的不安全因素的影响。而随着网络支持性价比的提高,把数据库相关操作集中在服务器端,客户端只负责输入数据的正确性检查和结果数据的处理,这显然是一种既讲效率又能保证数据库数据安全体系结构的方法,是“胖服务器瘦客户机”发展方向的必然取舍。
3.2.2 静态表的隐蔽黑盒设计
从信息隐蔽的角度看程序中分离出去的静态表,对程序来说也是一个隐蔽黑盒,它实现了程序中存在变因的控制数据或开关数据对程序的隐蔽(隔离)。静态表放在服务器端,便于共享和维护。同时,我们用逻辑控制静态表解决了面向不同应用对象动态组合应用功能这个难题,把没有权限的那一部分功能对用户隐蔽了起来。
总之,隐藏黑盒就是重用单元,重用单元越多软件开发越简单,与数据库有关的隐蔽黑盒放在服务器端要比放在客户端好处更多,因此隐藏黑盒有着广阔的重用前景。
参考文献
[1] 沈美明,温冬婵.ibm-pc汇编语言程序设计(第二版)[m].北京:清华大学出版社,2001.9.
[2] 张世和.数据结构[m].北京:清华大学出版社,2000.12.
[3] 叶忠杰.计算机网络安全技术(第二版)[m].北京:科学出版社。2004.9.
上一篇:浅谈计算机组装与维护的教学改革