do more analysis before you start coding.

解决方案 »

  1.   

    take a look in the "Design Pattern"
      

  2.   

    可以买一本《程序员大本营》,里面有一篇《程序设计箴言》。很不错的。
    我摘几段你看看:
    1.Include precise preconditions and postconditions with every function that you write.
      你编写的每一个函数都应该包含准确的执行先决条件和后置条件。  每一个函数都应该带有一个说明文档,它由函数的先决条件和后置条件组成,有时还包括该函数所调用函数的函数外列表。所谓先决条件就是函数被调用前必须做的一些初始化工作以及各种形式返回的变量的含义;而后置条件则包含函数的功能和通过函数调用后以各种形式返回的变量的含义。编写函数说明文档的意义不仅在于阅读程序时,可以迅速地对函数有一个大体的了解,更重要的是它能帮助我们避免两个函数之间的接口错误。
      一个完整的函数说明文档如下:
    /*QuickSort:Sort contiguous list by the quicksort method.
    Pre:The contiguous list list has been created.Each entry of list contains a key.low and high are valid positions on the list list.
    Post:The entries of list have been rearranged so that the keys in all the entries are sorted into nondecreasing order.
    Uses:Swap.*/
    Void QuickSort(List *list;Position low,position high)
    {
      ……
    }2.Always name your variables and functions with the greatest care,and explain them thoroughly.
      要十分慎重地给你的变量和函数命名,使其完整准确地解释它的作用。  尽管数据和算法可能已事先存在,但只有当你给他们以确切的名称时,他们才能在程序中被有效地组织,才能被赋以"生命"。所以一个程序能够正常工作,准确的掌握每个变量的含义和每个函数的功能是非常重要的。文档固然能起到解释的作用,但一个恰如其分的名字却能事半功倍。
      你是不是经常面对这样的变量或表达式:s=p*n;s1/s2;LoopCounter++;blo1?你或许会问:"有问题吗?"当然编译器这一关肯定会顺利通过,但仔细想想问题不少:s,p,n分别都是什么意思呢?s1,s2之间的区别在哪儿呢?i++是不是更简洁呢?是blo1(字母l,字母o。数字1)还是b101(数字1,数字0数字1)或许是blol(字母l,字母o,字母l)?
      如何避免上述这些问题的发生呢?下面这几条建议或许会有所帮助:
      1.全局变量用具有描述意义的名字。
      2.局部变量(特别是循环变量)用短名字。
      3.函数采用动作性的名字。
      4.保持命名的一致性。
      5.同一变量名不要有多种含义。
      6.不要用过于相似的变量名。
      7.变量名中一般不要带有数字。
      8.规模较大的程序使用匈牙利表示法。
      9.显式地说明变量。
      10.对变量最好做出注释说明其含义。3.Keep you documentation concise but descriptive.
      保持你的文档简洁,但有较强的描述性。  很多人将编写文档视为一件次要的任务,认为文档只是在程序完成后对程序作的解释和说明。如果只是写一个小程序,你的确可以把实现的每一个细节都牢记在心。所以此时的文档只是写给别人看的。但如果是一个大程序呢?把任何东西记住似乎是不可能的。所以在写程序的时候,对于其每一个部分都应该同时编写相应的文档。一个好的习惯是编写程序与注释文档"并发执行"。甚至有时文档的某些部分应该在程序之前完成。
      并不只所有的文档都是恰当的,看看下面这段文档吧!
      int func(int i)
      {
        int j;        //The declaration of i.
        j=0;        //Initiate the variable.
        while(i>a[j])
          j++;        //Increase i by 1.
        return(a[j]);         //Return the value.
      }  函数是完成什么任务的呢?程序是明明定义了j,为什么文档中说是i?这些注释有价值吗?看看下面的建议吧。
      一个好的文档通常做如下工作:
      1.像箴言1中建议的那样给函数作注释。
      2.每当声明一个变量、常量、类型时,解释它是什么以及它怎么使用。当然起一个"望文知义"的名字是一种更好的选择。
      3.程序中的每一个模块都应该以一段简明的说明其功能和操作的注释开始。
      4.对程序中没有明显结束标志的部分做标记。
      5.不要大谈明显的东西。
      6.对每个使用了某些小技巧或是含义不明确的语句作注释,更好的做法是避免这种语句的出现。
      7.代码本身应该解释程序是如何运作的。文档应该用来解释做了什么和为什么这样做。
      8.无论何时,当代码改变了,一定要让文档也随之改变。
      9.注释不要与代码矛盾。
      10.不要注释不好的代码,而应该重写。
      再来看看上面的文档,它给出了太多明显的东西。而文档与程序不一致,可能是因为修改了代码,却忘记了修改文档罢。共有20条,很不错的。
      

  3.   

    以优雅的风格来写。多大的程序都不会有这个问题。
    style first![风格是第一位的!]