<b>1.面向对象要求黑箱操作</b>
: `! b# V1 Y3 Y7 g8 D; H" \<P> 由于面向对象要求各个部分是彼此独立的,那么各个部分就要足够强劲以应付输入参数的不合理性。虽然现代编程都讲究预处理,一般的是将输入格式转换为统一的格式,然后进行处理。比如说现在网上的搜索引擎,都是将输入转换为unicode的格式。但是这并不是说我们的处理函数就不需要错误处理了。预处理能够大大减少程序出错的概率和编写错误处理的复杂度。</P>3 q s+ j. V. \3 s) n# q0 c
<P> 但是考虑到单独模块越来越趋向于智能化,各个黑箱应该具有独立的行为,错误处理,以及错误纠正的功能。</P>
5 \+ S* ]+ U/ J7 i<P> <b> 2.错误捕捉和错误信息</b></P>( {2 v r. x7 Y5 d2 h, I$ h, l1 @
<P>相对于C++,C语言的错误处理比较的简单。无非是条件判断语句而已(往往错误处理不好的原因不是程序员的技术不好,而是比较懒,呵呵)。这里需要注意的问题是如何书写错误信息的问题。错误信息要完整:包括在什么地方,因为什么,出现了什么样的错误。不完整的错误信息没有任何可用价值。</P>9 s/ z5 U6 h8 T5 t
<P>另外一个就是出现运行的log(日志)。在关键的步骤上输入一些信息到log文件内,提示当前程序运行到什么地方去了(如有可能,得到系统的当前错误码)。这样当程序意外中断的时候,可以使用这个log进行一定的判断。</P>5 g/ E$ K+ J) W: x3 j( A' P
<P> <b> 3.自我防御(预防二义性)</b></P>
. V' G( g2 q: _ u. f7 g5 C. M+ ]<P> 程序应该是尽可能自纠错的。这在程序的输入不可预测的情况下尤为重要。其实由于合作开发的原因,这样的情况很多。一个程序员编写的模块很有可能对输入有特定的要求,那么当另外一个程序员调用这个模块的时候,就会出现问题。</P>
% Y _7 B* Y; j0 X& k- j<P> 好的处理办法是在模块内对输入进行判断,如果有二义性,则进行合理纠错,并有效的提示(在debug版本下)。这里注意的是,如果纠错了,要进行有效的提示:可以是msgbox,也可以是写入log。</P> |
|