精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● 软件开发>>软件体系结构及资料汇编>>[转载] Re: 我现在在学COM(组件对象模型

主题:[转载] Re: 我现在在学COM(组件对象模型
发信人: ifeelyou()
整理人: (2000-02-02 16:54:16), 站内信件
【 以下文字转载自 CLanguage 讨论区 】
【 原文由
 pinxue 所发表 】
建议你去看看俺主页上关于corba的文章(http://pinxue.yeah.net里的bcb部份)
,对于了解组件对象模型会有所帮助的,corba的体系比dcom的要简洁些,我感觉
有了这个基础再回头学dcom就简单多了。

组件对象模型的主要思想,简单点说,是一种对象封装说明的技术。假定你已经
理解了OO的基本思想,COM/DCOM和CORBA都提供了下边的体系:
界面/接口 <==>  类
界面/接口相当于类的一份说明书,它是对于类的一部份相关的属性或
方法的说明(在COM中只有方法)。一个接口可能在多个类中得到实现(这个类称为
接口的实现类,而一个类中也可以实现多个接口。
只要知道了一个类实现了某个接口,那么就可以使用该接口来获取所感兴趣的信
息或执行特定操作。比如我们知道IVersion接口中有GetMajorVer方法可以取得主
版本号,而CAnimator和CNetSender类都实现了这个接口,就可以调用它们的对象
的GetMajorVer方法取得该信息。而IDraw接口中有DrawInWin(Hwin),CAnimator
和CPicture中实现了IDraw接口,则可以调用其对象的相应方法进行绘制。
指定这种结构可以很好的实现plugin机制,COM的目标之一就是把windows变成一
个由各种软件模块拼成的灵活系统。我们定义好一套编辑器应该实现的接口,实
现了这些接口的编辑器,不管是Word还是wps都可以很好嵌入到系统中,而我们在
开发软件需要使用编辑器时也不必再开发一个,使用这些接口来操纵系统中安装
的那个就是了。系统收到对编辑器对象的调用之后就会从注册表中找到该对象所
在的文件,把它激活。
当然,这还是一种理想,如果你全套用M$的产品还行,否则……

DCOM则是对COM的进一步扩展:
Server | Server Proxy  <==network==> Client Proxy | Client
COM中的各种软件对象都是驻留在某个文件夹中的,系统通过注册表中记录的信息
去查找、激活它们;而DCOM则允许这些对象保存在网络中别的机器上。
那我们在程序中怎么与不在本机上的对象交互呢?DCOM提供一种代理机制(Proxy
),在客户端它会根据对象实现的接口的描述(IDL语言)生成一个空壳子类,该类
的对象只管把用户的请求打包,然后到网上找到一个用户所需的对象,再把数据
包发给该对象(server),并且将server返回的数据包解码;而在服务器端也会生
成类似的空壳子类,负责将客户请求包解码,把结果编码返回。
中间过程我们不用担心,DCOM技术会自动处理,我们需要的是提供服务器对象的
接口说明,开发工具会自动生成这两个代理,通常我们把客户端的称为存根(stu
b),服务器端称为框架(skeleton)。

举个电视机的例子,

COM电视机要包括电源、信号接收、用户操作面板等模块,不同的人关心的方面并
不同,如使用者只关心用户操作相关的方法。这样我们就可以给电视机写好几本
说明书,给用户一本操作方法说明,给电工一本电源接口说明书,再来一本信号
接收接口说明书,以备更换信号接收部件时参考。
也就是说我们需要定义IUserControl接口,IPower接口,ISignal接口,IDispla
y。当用户用IUserControl.PowerOn打开机器后,该方法会调用IPower.Supply供
电,然后机器会自动用ISignal.Accept(Band)接收信号,用IDisplay.ScreenOut
put显示到屏上。

而DCOM电视机则更是一台网络电视,可能它的显示部件是挂在客厅里的等离子平
板,信号接收系统是租用的小区物业管理公司的,所以机器直接调用的ISingal.
Accept(Band)只是一个存根对象,如主电路板上的一组电路,它们把Band数据和
客户信息(如ID等)封装到数据包中,利用智能大厦中的光纤网络传给小区控制中
心的电视信号接收中心,中心的框架设备把收到的信号解码,传给真正实现ISig
nal界面的CTower,CTower把指定频带的信号解调之后送给框架对象,框架对象再
把这些信号打包,回传给存根,存根收到后解包,再调用IDisplay.ScreenOutpu
t(DATA),这时它调用的IDisplay也是一个存根,又来一次IDisplayStub<-->IDi
splaySkeleton<-->IDislay,这时候屏幕上终于可以显示出图像了。虽然DCOM电
视机的过程复杂,效率不高,但是灵活,不用每家都买一套昂贵的卫星接收器了
,而且可以在提供ISignal的租用服务器的多家公司中选择合意的,毕竟有竞争才
能有不断改良的服务嘛。而显示屏则可以随时更换,只要它实现的IDisplay符合
标准,今天TFT明天CRT,高兴了租一个72英寸的搞搞聚会也不错。

以下是DCOM电视机界的最近发生的几件大事:
2003年1月,TVSUN的TVJAVA牌彩电率先发布,成为彩电工业的事实标准;同年3月
TVM$的产品TVJ1型彩电上市,支持TVJAVA标准,但由于易掉帧闪烁销路不佳
2004年3月,TVSUN发布TVJAVA2型彩电,造型美观,跨平台支持Nt9x/PALinx等59
种制式,接收显示速度比上代产品提高60%,大受欢迎。
2004年9月,TVM$的TVJ6型彩电面市,兼容TVJAVA2标准,但只支持N制式,并利用
N制特点研发了TVJAVA.TVM$.TVWIN32扩展,该项专利技术使信号接收显示速度比
TVSUN的产品高出30%,配合人体工程学遥控器,TViMac可选彩色透明外壳,且价
格仅为TVSUN产品的1/3,销路极佳,大受欢迎,加上二个月的免费赠送促销,成
为市场主流。
2004年11月,大量用户发现购买的VJ6型彩电无法接收CCTV等频道的节目,TVM$称
这是由于CCTV信号与TVJAVA.TVM$.TVWIN32不兼容,花$1998打个Patch即可解决。

2004年12月,大量电视台开始制作使用TVJAVA.TVM$.TVWIN32扩展的节目
2005年1月,默默无闻的TVScape公司的TVNavigatorGold彩电显示器集TV技术之大
成,物美价廉,成为市场霸主,TVM$宣布准备与之合作开发完美的TV产品。
2005年8月,出乎众人意料的,TVM$宣布随TVJ6型彩电送TVExplorer3型显示器。
但3型显示器质量较差,显示的图像怪异,不能显示白色会变成粉红色,大量用户
选用TVM$+TVScape的组合,而将TVExplorer3做为应急备件,反正也不花钱。TVS
cape公司不久也宣布对个人使用免费提供显示器。
2005年12月,TVM$推出TVExplorer4型显示器,并且不顾用户反对,将TVE4与TVJ
6集成销售,从这种系统中拆除TVE将使TVJ6罢工,但IDisplay接口还在,可以外
接其它显示器。由于TVE4做得确实不错,质量接近TVScape产品,大家开始接受使
用,部份用户反应集成确实方便。但该种显示器体型巨大,一般家庭没有空间再
安装第二台显示器。
2006年1月,大量使用TVSUN公司TVJAVA2型彩电的用户投诉无法接收使用TVWIN32
扩展的CCTV等多家重要电视台节目;TVNetscape公司首次出现亏损。
2006年6月,TVSUN、TVScape等联合将TVM$送上TV最高法庭,TVIBM、TVIntel出庭
指证TVM$使用垄断优势进行不正当竞争法动
2010年1月,TV最高法庭裁定TVM$垄断成立,强制将TVM$分解成TVM$TV和TVM$Dis
play两家公司。

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 61.132.50.144]
--
※ 转载:.网易 BBS bbs.netease.com.[FROM: 202.104.40.98]

[关闭][返回]