您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VC > 正文
实战COM编程系列之二
[文章信息]
作者:lop5712
时间:2004-05-06
出处:论坛
责任编辑:方舟
[文章导读]
本文先说明COM提供的编程思想,再以此编程思想设计各接口
advertisement
热点推荐
· 天极网软件频道改版调查
· 10.26精选 图画:葡萄小鸡图
· Windows操作系统网络管理技巧
· Fireworks国画:葡萄小鸡图
· 黑客张大民江南小城奇遇记
[正文]

1 2  下一页

天极IT资讯短信服务 电脑小技巧
资费:包月5元
手机:
介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。

  样例目标

  欲给一个公司做一个信息管理系统,也就是公司中所有部门的信息可以被输入电脑,并可进行分布式查询,即总经理可随时查询最新的订单情况和出货情况。由于使用COM作为此信息管理系统的基架,可以很容易的解决分布式问题,并且由于COM对安全的包装,使得提供访问控制也变得容易。下面先说明COM提供的编程思想,再以此编程思想设计各接口。

  COM编程模型

  见过不少这种说法:“COM是更加地面向对象,封装地更彻底”。这里要纠正这种错误的思想,虽然可以说对,但是是错误的应用。这就好像牛刀可以杀鸡,但并不应该被说对。

  面向对象编程思想是一种思想,指导如何设计程序架构的。其主打思想就是将被操作数据看成一个个对象。而所谓的对象就是具有状态,并对外提供了接口以暴露其可以提供的服务。其是状态和功能通过语义的混合体。

  其和日常生活很像,比如电视机就既提供了服务——搜台,又提供了状态——哪个频道是哪个台。因此在使用面向对象编程思想时会从对象的概念出发来定义数据结构,这和COM完全不一样。

  COM叫做组件对象模型,从名字看其异常明显地表示了最开始引号中的话的正确性,这是个误解。COM最突出的贡献不是组件这个概念,而是接口。

  接口表示功能的集合,其不是状态。与面向对象正好相反,其完全不看重对象的实现,甚至淡化对象这个概念,极力强调接口的概念,这在各本COM教科书中表现地很明显——里面第一个讲的就是IUnknown接口,极力强调没有对象指针,只有接口指针。

  这看起来有点混乱,如果认为面向对象强调的是状态和功能的混合,COM强调的就是功能集的集合。而类就是只实现了一个接口的COM组件(不包括IUnknown),这从根本上说是COM的退化。因此当设计中的每个COM组件都只实现一个接口时,此时根本不是设计一个COM应用,只是在二进制代码级上应用C++提供的编程思想而已。

  由于COM做地并不是那么好,以至于会产生前面所说的误解。其强调功能的概念没有体现出来,而更表现为组件,以至于很容易认为组件是积木,而整个程序就是用不同的组件搭建的房子。这是对象级上的模块化编程。COM不会设计到最后反而跑回老路上去。

  搭积木的重点是积木,是以积木来搭建房屋。而COM提供的并不是积木,是积木间衔接的形状,它主张在搭积木前先搭一个架子,不同的积木能放到架子上形成的不同的格子里,架子搭好后再根据架子上形成的格子的形状做积木,最后将积木放到架子上。而不是先做积木,然后根据积木搭房屋(这个比喻并不是非常准确)。

  思考这个问题:欲实现任务和任务管理器的功能,设计两个接口ITask和ITaskManager,考虑ITask的功能定义。其代表的是能够作用于任务上的功能,不是任务本身,因此其有如下两个方法:TerminateTask和GetProcessRateOfTask以分别终止任务和得到任务进度。但是很明显,任务是需要启动的。如果按照面向对象的思想,在不考虑设计模式的情况下,很容易想到将任务的发起这个动作作为ITask中的一个方法:StartTask,这样ITask的实现者就是一个完全的任务,如果使用线程进行任务操作,其也就连那个线程的操作也一起包装起来,形成一个任务。这不是一个好的设计,ITask是个接口,代表的是功能,不是对象。接口以为实现它的对象就可以照其定义进行操作,因此ITask的实现者是可以被相当于任务一样的操作,而不是任务这个东西。前者具有更好的可扩展性,如可以通过按遥控器来操作东西,但那个东西不一定必须是电视机,而后者就一定要求其是电视机。

  因此COM里重点的不是组件,而是接口,这是一种可扩展性相当好的设计思想,可以称做面向接口编程思想。它本身是没有什么缺点的,但其实现方式由于使用对象的概念,则一定和状态关联,这在数据量很大时是不好的。如订单会很容易地就被设计成一个类,然后提供诸如订单结帐、提货等多种服务(即成员函数)。这里的问题就是订单如此之多,如果使用一个数组作为其容器显然性地问题严重,而链表更是应该判死刑。因此这里将订单设计成一个类是很不明智的选择。对于此,应该专门仔细研究如何处理大数据量的技术,并将功能与状态拆开,然后数据变成原材料,而功能变成机器,通过流水线生产以提高效率。即面向对象是个人主义,当数据量大时,就需要分工合作来提高效率了。对于此,Microsoft早已提供了MTS来帮助开发,其中提供的编程思想就是专门针对这种大数据量而设计的,提倡无状态组件,即状态和功能的分离,其对于开发大数据量的应用提供了非常好的支持。


1 2  下一页

·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载


发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • 实战COM编程系列之一
  • COM线程模型详解
  • 用VC++实现ODBC数据源设置
  • Visual C++中的ODBC编程实例
  • 基于COM接口的Shell扩展技术应用
  • 改善电视卡接收效果三个诀窍
  • 液晶该不该使用屏保等问答6则
  • 自力更生维修4.1音箱实例
  • 发烧大餐 六千元游戏配置
  • 10.26精选 图画:葡萄小鸡图
  • 网络打印服务器选购攻略
  • 信不信集成显卡BIOS我也照刷
  • 李鬼哪里逃 处理器假货曝光
  • Advertisement

    天极无线
    待机彩图    >>更多
    多彩动画    >>更多
    美妙和弦    >>更多
    天使在唱歌
    壁虎漫步
    PrettyBoy
    LoveLoveLove
    我是你的小小狗
    单身情歌
    十面埋伏
    祝酒歌
    回心转意
    波斯猫
    太委屈
    S.H.E
    潘玮柏
    M2M
    蔡依林
    阿牛
    林志炫
    陈弈迅
    刀郎
    黑龙
    S.H.E
    陶晶莹
    情人玫瑰坊
    音乐风云
    新片速递
    神秘测试
    都市约会
    ·天极彩信天天精彩
    ·图铃梦工厂下载无限!
    ·找寻童真,卡通专题
    ·夏日激情交友社区!
    ·星座运程,预测人生

    CSEEK搜索