Programming 版 (精华区)

发信人: SwordLea (飞刀李), 信区: Programming
标  题: 编码的境界——从MOC到COM(原创).7
发信站: 哈工大紫丁香 (2004年01月15日13:48:08 星期四), 站内信件


    下面我们从便于修改、添加功能的角度去考虑代码的设计。
    首先回顾一个前面提到的例子,就是打印命令行参数的那个:
    
    void main(int argc, char *argv[])
    {
        printf("\n");
        if (argc == 2)
           printf("%s\n", argv[1]);
        if (argc == 3)
           printf("%s\n", argv[2]);
        if (argc == 4)
           printf("%s\n", argv[3]);
        if (argc == 5)
           printf("%s\n", argv[4]);
        ……
        if (argc == N)
           printf("%s\n", argv[N-1]);
        else        /* 没有参数 */
           printf("%s\n", "ECHO is off.");
    }
  如果说把if语句改为case语句是一种改良,那么代码将会是这个样子:
    void main(int argc, char *argv[])
    {
        printf("\n");
        switch (argc)
        {
        case 1:/* 没有参数 */
           printf("%s\n", "ECHO is off.");
           break;
        case 2:
           printf("%s\n", argv[1]);
           break;
        case 3:
           printf("%s\n", argv[2]);
           break;
        case 4:
           printf("%s\n", argv[3]);
           break;
        case 5:
           printf("%s\n", argv[4]);
           break;
        ……
        case N:
           printf("%s\n", argv[N-1]);
           break;
        }
    }
    当然,在这里case语句并不是最佳解决方案,不难看出正确方法应该是
使用for循环,也就是这个样子:
    void main(int argc, char *argv[])
    {
        printf("\n");
        if (argc == 2) /* 没有参数 */
           printf("%s\n", argv[1]);
        else
        {
            for (int i = 2;i < argc ;i ++)
            {
                printf("%s\n", argv[i - 1]);
            }
        }
    }
  这个问题虽然简单,却给了我们一个启示,用case语句代替if语句并没有使
程序的可维护性得到很大的提高,真正能使我们摆脱编码的羁绊的良方是以代码
来维护代码,也就是引擎式的代码。
  说到引擎,大家可能会联想到游戏引擎,比如传奇,比如cs. 我们不会天真
地认为cs里加一个关卡需要sierra公司的程序员们去修改代码、重新编译,因为
我们经常会主动、被动地得到不知道谁制作的游戏地图。为什么我们的程序不可
以写成引擎式的呢?如果还记得多年前的那个计算器程序,我们就用它来作例子
吧。在GUI 界面,我们布置了加、减、乘、除等按钮,上方还显示了一个漂亮的
EDIT控件,这就是主框架。假设我们能够让主框架与程序功能分离,即新功能的
添加不需要对主框架程序修改,那么这就是个引擎式的设计思想。
    有人说“这怎么可能?”,有人则立刻就想到了DLL 方式。不错,动态链接
库方式是一种比较容易的实现手段。可是怎么才能让主框架程序识别并使用新加
入的功能模块呢?

                    (to be continue ...)

--
    没有星光的夜晚,觉得自己象一只漂泊无依小舢舨,在
汹涌浪涛与暴风骤雨中挣扎着存活。划动着已经残破的孤桨,
听得见逝水的呻吟和凄泣,却看不见哪里是岸,哪里是曙色
天边,也不知道自己在前进,在后退,还是在沉沦……

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.246.232]
※ 修改:·SwordLea 於 01月15日13:49:30 修改本文·[FROM: 202.118.246.232]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.626毫秒