面向对象裸程序的例子≡显示器控制程序[连载八]

  • US
  • LV5工程师
  • |      2016-03-31 18:41:35
  • 浏览量 397
  • 回复:0
用基本C来构造一个对象,我们必须要多摸索摸索,因为没有语法支持。但是我们不必抱怨,因为有些支持,C编译器做和我们做,效果都是差不多的。
    构造对象我们首先要遵循数据与函数分开的原则,这样对我们创建新对象很有好处。也就是说我们把对象中的函数,都要写到与具体数据无关,那样当我们需要2个或2个以上对象时,我们只需要把数据重新复制一份,而具体的处理代码却不必重新写,这样我们就可以争取用最少的代码而获得最多的功能。
    我很怕罗嗦的语法结构,所以我在上帖中希望有人能回我的帖,把上面的例子用语法总结出来,很遗憾却没有,我想偷懒都不成,所以只好把原来的帖子一个一个的翻出来再读。写说与伪指令相关的事情。看下面的例子:
        #define Class(c)    struct c
        #define Object(o,c)    struct c o
    这两个伪码就会把我们的裸程序搞得挺象个C++的样子,其实也就是欺骗一下看官的眼球而已,如果你不屑一做,那就直接用struct也满好个。有了这两个定义,我们就把前面例子罗列一下,形成一个对象的样子来。
    还有几个函数指针类型我们都把它们定义出来(下面定义忽略了参数定义):
        typedef  void  (*dSAC)(……);    // 显示一个字符指针类型
        typedef  void  (*dSAL)(……);    // 显示一行指针类型
    再定义类:
        Class(disp)
        {
            UCH  MonitorType;    // 数据变量定义
            :
            :
            :
            dSAC    dispShowAChar;    // 功能变量定义
            dSAL    dispShowALine;
            :
            :
            :
        };
    相信这样已经足够说明问题了,这个类就是定义了一个对象所需要的全部数据,凡是涉及到代码的都可以作为同一类型的不同对象共有的财富,共同使用。比如我们要在我们的裸系统中企图同时支持最多两个显示器,那么我们就只需要创建两个对象,其实这里说的创建语法也很简单,就说定义两个变量好了,然后赋初始值给它,这就是创建。
    先定义:
        Object(FD000, disp);    // 定义对象FD000,关联子对象D000
        Object(FD001, disp);    // 定义对象FD001,关联子对象D001
    然后通过赋予初始值来创建它,这里再引入一个伪定义:
        #define  CreateObject (o, mt, sac, sal)  {    \
                    ##o.MonitorType = mt;    \
                    ##o.dispShowAChar = sac;    \
                    ##o.dispShowALine = sal;}
    这样我们就可以象模象样地使用我们的对象了:
        CreateObject(FD000,0,soShowAChar000,soShowAChar000,soShowALine000);
    这条语句创建了一个缺省显示器的父对象,其中so-是sub object的缩写,000是为编号为0的缺省显示器所安排的编号,最后一个是255,因为Monitor是UCH类型,所以最多可以建立255个类型的显示器。soShowAChar000、soShowALine000为缺省类型的显示器的具体处理函数的名字,函数体在子对象D000中去组织。
    同样的方法我们为我们的裸程序创建另一个对象:
        CreateObject(FD001,1,soShowAChar001,soShowAChar001,soShowALine001);
    当然这个CreateObject只是一个例子,因为我们这个创建工作可能会有很长的参数,那么有丰富编程经验的高手,您是愿意如何组织您的创建过程呢?我想我没有必要在我的思想里去弄一个严谨的格式,思路是没有清晰路线的,它具有很大的延展性,只要能胜任“合理”这个词,您就可以大胆的去做。
    本帖的最后我想提出一个问题:MonitorType将何去何从?
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子