1. 分布式组件对象模型
多少年来软件的开发过程并没有很大的改变,软件开发过程中需要面对的主要问题如:开发周期长,难于确保程序的正确性,难于维护等还没有得到非常好的解决,尽管出现了如面向对象,框架设计等等的概念和工具。组件对象模型是传统面向对象模型的扩充,传统面向对象模型的重点是源程序,以及系统分析和设计过程。组件的概念则强调大的软件系统如何由不同开发商的小型可执行组件构成。以下首先从面向对象模型开始对各种概念作一番梳理。
· 面向对象编程
面向对象是一个被广大编程人员和工业界认同已久的概念。面向对象程序设计语言让开发者按照现实世界里人们思考问题的模式来编写程序,它让开发者更好地用代码直接表达现实中存在的对象,这样开发代码简单并且易于维护。面向对象语言有以下三个最重要的概念:
封装(Encapsulation)- 强调隐藏对象的实现细节,对象的使用者仅仅通过定义好的接口使用对象。
继承(Inheritance)- 新的对象可以利用旧的对象的功能。
多态(Polymorphism)- 根据所使用的对象展现多种不同行为的能力。
而从程序的整体来看,面向对象编程提供给用户的最重要的概念则是代码的共享与重用,它对于提高编写程序的效率极为重要。但是代码的共享与重用一旦应用于实践中仍然存在种种问题,如版本的升级、接口的变化、在不同程序设计语言之间共享代码等等。对于这些困难原有的面向对象程序设计方法并没有相应的答案,这就是组件对象模型提出的背景。
· 组件对象模型
将工程分解为逻辑组件是面向组件分析和设计的基础,这也是组件软件的基础。组件软件系统由可重用的二进制形式的软件组件模块组成,只需要相当小的改动就可以将这些来自不同开发商的组件模块组合在一起。特别重要的是这样的组合并不需要源代码,也不需要重新编译,组件之间通过基于二进制的规范进行通讯,这被称为二进制重用。组件模块是独立于编程语言的,使用组件的客户程序和组件之间除了通过标准的方法进行通讯以外,彼此不做任何限定。
组件可以划分为不同的类型,包括可视化组件如按钮或者列表框;功能组件如打印或者拼写检查。例如一个基于组件的架构可以提供将多个开发商的拼写检查组件插入到另一个开发商的字处理应用程序中的机制,这样用户可以根据自己的喜好方便地选择和替换字处理软件。
组件结构中最重要的概念是接口。接口是集合在同一个名称(通常是一个系统唯一的ID值)下的相关方法的的集合。组件之间的通讯是基于接口的,接口是组件和其客户之间严格类型化的契约。实现相同接口的两个对象就被认为是多态的,这里的多态不包含诸如基类指针指向派生类对象的意义,这里是指同一个接口可以由多个对象以不同方法实现。
2. COM/DCOM的基本概念
· 概述:
以下将通过程序实例解释COM/DCOM的基本概念。基于微软的一贯作风,虽然COM/DCOM自称为是一个可跨平台支持异构的模型(也确实从根本上说是可以跨平台的),但它也是和Microsoft Windows系统中的其它概念紧密结合在一起的,而且除了Microsoft Windows系统以外很少有什么系统支持COM/DCOM,所以在以下概念的介绍中将基于Microsoft Windows系统。COM/DCOM模型主要包括三方面的内容:(A)程序编写的模式。(B)程序交互时遵循的二进制规范。(C)程序运行的辅助环境。首先通过图1描述COM/DCOM基本机制。

由图可见COM/DCOM是基于客户机和服务器模型的,客户程序和组件程序是相对的,进行功能请求调用的是客户程序而响应该请求的是组件程序。组件程序也可以作为客户程序去调用其它的组件程序,正是这种角色的转换和相互调用关系使组件程序最终构成一个软件系统。根据COM/DCOM中客户程序和组件程序的交互关系可以将组件分为进程内组件和进程外组件两种。所谓进程内组件是指客户程序和组件程序在同一个进程地址空间内;进程外组件指客户程序和组件程序分别处在不同的进程空间地址中。进程内组件是通过将组件作为动态连接库(DLL)来实现的,客户程序将组件程序加载到自己的进程地址空间后再调用组件程序的函数。对于这两种不同的组件,客户程序和组件程序交互的内在方式是完全不同的。但是对于功能相同的进程内和进程外组件,从程序编写的角度看,客户程序是以同样的方法来使用组件程序的,客户程序不需要做任何的修改。因此以下先通过进程内组件的实现来理解COM/DCOM的编程模式。
· 进程内组件:
例子程序:
以下是一个用C++语言编写的COM程序实例的主要内容:
头文件:component.h
interface DECLSPEC_UUID("10000001-0000-0000-0000-000000000001")
ISum : public IUnknown
{public:
virtual HRESULT STDMETHODCALLTYPE Sum( int x, int y, int __RPC_FAR *retval) = 0;
};
客户程序:
#include "component.h"
const CLSID CLSID_InsideCOM = {0x10000002,0x0000,0x0000,
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}};
void main()
{
IUnknown* pUnknown;
ISum* pSum;
<
相关推荐
如何解决令人头痛的DCOM配置问题
有不少刚刚接触OPC通信的技术人员因为不熟悉DCOM配置倒在了OPC通信的“第一步”,那我们接下来就来看看如何完成令人头痛的DCOM配置。
COM/DCOM Exception ClassCOM/DCOM异常类
COM/DCOM Exception ClassCOM/DCOM异常类
内网环境横向移动——利用DCOM(1)
这里先提两个概念,COM和DCOMCOM即组件对象模型(Component Object Model,COM) ,是基于 Windows 平台的一套,由一组和组成。COM是许多微软产品和技术,如Windows媒体播放器和Windows Server的基础。一般的对象是由数据成员和作用在其上的方法组成,而组件对象和一般对象虽有相似性,但又有较大不同。组件对象不使用方法而用接口来描述自身。
COM_DCOM技术内幕
COM_DCOM技术内幕,本书详细地告诉你怎样用DNA框架结构进行高级COM编程、怎样用高级网络协议与DCOM API来实现高级的性能、如用户配置及编写用MSMQ API的分布式、容错的应用程序等知识。本书的CD-ROM包括最新的Microsoft COM规范、本书中所有程序的源代码、4Developer提供的COM浏览器以及OOPadelic软件公司提供的解决方法和Web Whois。
【三层架构】——COM/DCOM初识
背景:在学习三层架构的时候,知道三层分为UI层(表现层)、BLL层(业务逻辑层)、DAL层(数据访问层),相对于传统的二层架构(客户端和数据库)来说,多了一个中间层BLL(业务逻辑层),处于UI层和DAL层之间,起到承上启下的作用,客户端并不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,在经中间层与数据库进行交换。读到这里的时候,问题就来了,什么是COM/DCOM通讯?它在三
COM/DCOM开发之远程进程外组件(DCOM)
一 目的 使用VC++的ATL编程实现远程进程外组件。同时实现客户端这些组件的调用。二 要求 1)使用C++语言实现远程进程外组件,组建提供加、减、乘、除、判断是否素数等计算服务;客户端部分包括录入和查询部分。 2)在VC++环境上利用ATL向导进行开发。
Com、Com+\DCom定义和差别
[工作日志]COM、COM+和DCOM的定义和区别 2010-06-04 18:19:31| 分类: .NET | 标签: |字号大中小 订阅 解释COM、COM+和DCOM的定义和区别? COM是组件对象模型,是实现3/N层应用的基础,它的
COM/DCOM的区别与联系
COM/DCOM的区别与联系 其实这种提法本身就及不科学,DCOM本身就是COM的一种表现形式,但是由于大家听见COM一般就把它当成在本地执行的COM,而DCOM当然就是分布的COM,在网络上的另一台计算机上执行.于是就诞生了这篇COM与DCOM的区别与联系. 区别: COM有两种存在形式,动态连接库和可执行程序,但DCOM必须是可执行程序.因为DCOM不可能在客户程序的内存空间运行
什么是COM与DCOM
COM(Component Object Model,组件式对象模型),是组件之间相互接口的规范,是OLE和ActiveX的共同基础,其作用是使各软件组件和应用软件能够用一种统一的标准方式进行交互。COM不是一种面向对象的语言,而是一种与源代码无关的二进制标准。COM所建立的是一个软件模块与另一个软件模块之间的链接,而当这种链接建立之后,模块间就可以通过称之为“接口”的机制来进行通信。COM标准增...
SOAP与CORBA,COM/DCOM的区别
CORBA(Common Object Request Broker Architecture)公共对象请求代理体系结构是由OMG组织制订的一种标准的面向对象应用程序体系规范。由对象请求代理ORB、对象服务、公共设施、域接口和应用接口这几个部分组成。其核心部分是对象请求代理ORB(Object Request Broker)。ORB提供了一种机制,通过这种机制,对象可以透明的发出请求和接收响应。分布的、可以互操作的对象可以利用ORB构造可以互操作的应用。ORB可看作是在对象之间建立客户/服务关系的一种中间件
corba/com/dcom
分布式计算环境与多层结构的发展背景早在70年代末第一个关系型数据库管理系统出现时,计算机的数据库时代就已悄然开始。那时的观念是由应用程序与关系型数据库共享统一文件系统,这种数据处理的模式一般称为单层结构。由于这种结构的数据库程序占用计算机资源较多也不利于多用户环境数据库的访问,于是在80年代中期,数据库应用开始转向C/S(Client/Server) 结构, 也就是所谓的两层结构(2-Tier
COM,DCOM原理及应用
1、DCOM COM的进程透明特性表现在组件对象和客户程序即可以拥有各自的进程空间,也可以共享同一个进程空间,COM负责把客户的调用正确传到组件对象中,并保证参数传递的正确性。组件对象和客户代码不必考虑调用传递的细节,只要按照一般的函数调用的方式实现即可。如果进一步拓展进程透明特性,考虑组件对象与客户程序运行在不同计算机上的情形,把进程透明性拓展为位置透明性,形成分布式组件对象模型...
COM与DCOM的区别与联系
COM与DCOM的区别与联系其实这种提法本身就及不科学DCOM本身就是COM的一种表现形式但是由于大家听见COM一般就把它当成在本地执行的COM而DCOM当然就是分布的COM在网络上的另一台计算机上执行.于是就诞生了这篇COM与DCOM的区别与联系.区别:COM有两种存在形式动态连接库和可执行程序但DCOM必须是可执行程序.因为DCOM不可能在客户程
对COM/DCOM、CORBA和Java Beans的全面比较
本文分别对COM/DCOM、CORBA和Java Beans在“相关背景”、“基本概念”、“技术内容及特点”三个方面进行对比。 一、相关背景的比较 COM/DCOM 为了适应更加复杂应用的需要,Microsoft公司推出了构件对象模型COM,COM支持同一台计算机上不同进程间对象的调用;由于分布式处理系统的广泛应用和与CORBA竞争的需要,Microsoft公司于1997年推出了COM的分布式版本
COM DCOM COM+
<br />什么是COM?<br /> 所谓COM(Componet Object Model,组件对象模型),是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准。通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同、使用的开发语言是否一致以及是否运行于同一台计算机。<br />COM的优点?<br /> 首先:用户一般希望能够定制所用的应用程序,而组件技术从本质上讲就是可被定制的,因而用户可以用更能满足他们需要
COM/DCOM中如何传递数组
2000年09月20日 15:22:00 因为COM/DCOM对象都不在Client程序运行的内存空间(内进程COM对象除外,即便如此,为了统一接口,内进程的COM也不得传递指针),而且在Win32中所有的程序都有自己独立的2GB的内存空间,程序与程序之间传递指针(内存地址)是毫无意义的,而数组、字符串等大量的数据在程序中都是分配一定的内存空间,然后用指针加内存偏移量来存取数据的,
COM原理及应用----分布式COM(DCOM)
1、DCOM COM的进程透明特性表现在组件对象和客户程序即可以拥有各自的进程空间,也可以共享同一个进程空间,COM负责把客户的调用正确传到组件对象中,并保证参数传递的正确性。组件对象和客户代码不必考虑调用传递的细节,只要按照一般的函数调用的方式实现即可。如果进一步拓展进程透明特性,考虑组件对象与客户程序运行在不同计算机上的情形,把进程透明性拓展为位置透明性,形成分布式组
5249




被折叠的 条评论
为什么被折叠?



