组件对象模型
- 格式:doc
- 大小:51.50 KB
- 文档页数:8
COM培训教程COM是一种面向对象的编程模型,是微软公司提出的Component Object Model(组件对象模型)的英文缩写。
COM技术的出现标志着微软公司向Windows应用程序开发提供了一个统一的内部机制,并向Windows软件开发领域引入了面向对象的编程思想。
COM具有广泛的适用范围,在Windows系统中,COM组件可以透明地使用,是Windows平台上的标准组件开发模型,包括DLL、EXE、OCX等。
为了帮助开发人员学习COM构架开发,推出COM培训教程,下面就以此为主题,进行详细介绍。
一、COM培训教程的概述在计算机技术日新月异的今天,软件应用变得越来越复杂,这就需要使用复杂的软件编程模型。
而COM组件模型的出现满足了这个需求,它可以很容易地构造出可重用的软件组件。
COM培训教程就是为了帮助开发人员更好的掌握COM组件模型的使用。
COM培训教程分为初级课程和高级课程两个部分。
初级课程主要介绍COM的基础知识,包括COM对象、接口、注册表、运行时库等方面的内容。
同时,还会介绍COM对象的调用顺序、内存管理及异常处理等知识点。
高级课程则会着重介绍COM组件的设计、开发和实现,以及如何进行组件的测试和调试等方面的内容。
同时还会介绍COM+等技术,并通过实例演示来深入讲解COM在具体应用中的实现过程。
二、COM培训教程的课程设置1.初级课程1.1 COM的基础概念了解COM组件模型含义,COM基础概念,COM组件的构成和分类。
1.2 COM对象了解COM对象的定义和特性,COM对象的标识方式,理解如何创建COM对象,如何使用COM对象等。
1.3 COM接口介绍接口的基础知识以及接口、对象、实现的关系,讲解相关技术术语,如IUnkown。
1.4 COM注册表讲解COM注册表的概念,以及如何使用注册表进行应用程序和组件的绑定等。
1.5 COM运行时库讲解COM运行时库的概念,介绍如何初始化COM运行时库以及相关函数。
COM component(COM 组件)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。
在COM 构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。
由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块。
COM 方法COM 是开发软件组件的一种方法。
组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。
开发自定义的COM 组件就如同开发动态的,面向对象的API 。
多个COM 对象可以连接起来形成应用程序或组件系统。
并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。
Microsoft 的许多技术,如ActiveX, DirectX以及OLE 等都是基于COM 而建立起来的。
并且Microsoft 的开发人员也大量使用COM 组件来定制他们的应用程序及操作系统。
COM 所含的概念并不止是在Microsoft Windows操作系统下才有效。
COM 并不是一个大的API ,它实际上像结构化编程及面向对象编程方法那样,也是一种编程方法。
在任何一种操作系统中,开发人员均可以遵循“COM 方法”。
一个应用程序通常是由单个的二进制文件组成的。
当编译器生成应用程序之后,在对下一个版本重新编译并发行新生成的版本之前,应用程序一般不会发生任何变化。
操作系统,硬件及客户需求的改变都必须等到整个应用程序被重新生成。
目前这种状况已经发生变化。
开发人员开始将单个的应用程序分隔成单独多个独立的部分,也即组件。
这种做法的好处是可以随着技术的不断发展而用新的组件取代已有的组件。
此时的应用程序可以随新组件不断取代旧的组件而渐趋完善。
COM组件技术摘要按照组件化程序设计的思想,复杂的应用程序被设计成一些小的,功能单一的组件模块,这些组件模块可以运行在同一台的机器上,也可以运行在不同的机器上,甚至可以运行在跨越太平洋的两台机器上。
在理想情况下,每台机器的运行环境可以不同,甚至可以是不同的操作系统。
为了实现这样的应用软件,组件程序和组件程序之间需要一些极为细致的规范,只有组件程序遵守了这些共同的规范,软件系统才能正常运行。
为此,OMG和Microsoft分别提出了CORBA和COM标准,目前CORBA模型主要应用与UNIX操作系统平台上,而COM则主要应用与Microsoft Windows操作系统平台上。
Microsoft提出的组件对象模型标准不仅仅体现了组件化的程序设计思想,在实现上,它也采用了面向对象程序设计方法。
COM,既组件对象模型,是一种以组件为发布单元的对象模型,这种模型使各软件组件可以用一种统一的方式进行交互。
COM既提供了组件之间进行交互的规范,也提供了实现交互的环境,因为组件对象之间交互的规范不依赖与任务特定的语言,所以COM也可以是不同语言协作开发的一种标准。
关键词:CORBA,COM,对象,接口第一章.绪论COM是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。
在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。
COM组件的优点:①可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;②可以在多个应用系统中重复利用同一个组件;③可以方便的将应用系统扩展到网络环境下;④COM组件的特性是与语言无关和与平台无关。
因此,一经开发便可以使用不同的高级语言和开发工具调用。
并且,客源在此COM组件基础进行二次开发。
随着Internet和Intranet应用的飞速发展,COM(Component Object Model,组件对象模型)以其巨大的潜力渗透到软件学科的各个领域。
CORBA和COM有哪些区别?只在OS上吗?说明:个人收集,非自创出处:正文:对象标准COM和CORBA论长道短组合软件是新一代软件技术发展的标志,它的提出很自然,为了提高软件生产力、不草率地开发应用程序、设计开发人员应尽可能地利用可重用的软件组件、组装构造新的应用软件系统。
追根求源,由软件模块组件组织合成软件的思想早在70年代就已提出了,函数就是一种组件,函数通过参数来适应不同应用需求的变化,Ada语言的模块package就是一种组件,实现了内部细节掩藏,模块通过接口规范说明进行连接和组装,package还提供了类属机制,使模块通过类属参数,适应不同应用需求的变化。
但是,传统软件系统结构的局限性,以过程为中心设计的功能模块,其扩充和复用的能力都较差,对模块进行应用重组的困难很多。
从80年代开始的面向对象技术的研究,使组合软件又萌发出新的生命力。
面向对象的软件,以数据为中心设计,对象类既具有模块的封装性和类属等特性,还具有继承特性,极大地提高了类的可扩充性和可再用能力。
对象类较之于传统软件的功能模块而另具有的优点是:(1)易于理解,具有完整的语义特征;(2)易于扩充和修改,具有较高的通用性和适应性;(3)易于构造组装,具有规范的外部接口。
开发应用组件必须遵循标准,以保证软件组件的互操作性,只有遵循统一的标准,不同厂商的、不同时期的、不同程序设计风格的、不同编程语言的、不同操作系统的、不同平台上的软件或软件部件才能进行交流与合作。
为此,OMG(ObjectManageGroup)提供了一个对象标准CORBA,它定义了一个网连对象的接口,使得对象可以同时工作。
基于CORBA的对象请求代理ORB为客户机/服务器开发提供了中间件的新格式。
令人称奇的是,作为OMG成员的微软公司却撇开CORBA而另辟了COM(ComponetObjectModel),即组件对象模型,并把COM 定位成基于对象的软件开发模型,尽管COM被认为是微软鼓噪出来的技术,但支持COM的开发工具却不断增多,其中大部分来自于微软,包括VisualBasic和VisualC++。
组件对象模型COM是组件对象模型(Component Object Model)的首字母缩略词。
COM是一种方法,用于创建一个独立于任何编程语言的对象。
C++类具有成员函数,而COM对象具有“方法”。
这些方法组织在“接口”中,通过“接口指针”来调用它们。
接口将语义相关的方法组合在一起。
每一个COM对象都实现了一个名为IUnkown的接口(通用的COM程序习惯在接口名字前加一个大写的“I”)。
IUnkown只包含3种,如表1所示。
表1 IUnkown的3种方法方法名称说明QueryInterface AddRef Release 返回指向另一个接口的指针增加对象的引用计数减少对象的引用计数COM的规则规定:只要给定一个指向接口的指针,客户就可以通过该指针调用任意一个IUnkown方法,以及所有属于该接口的特殊方法。
也就是说,所有接口除了支持它们自己的方法外还支持这3个IUnkown方法。
图1是一个简单的COM对象示意图,图中的细棒代表对象的接口,通常都会忽略IUknown接口,因为所有其他接口都可以访问该接口。
图1一个简单的COM对象实际上COM中的接口是用数字标记而不是名字标记的。
“接口标识”(或称为IID)是一个128位的值,它唯一的标识了每一个接口。
要生成IID,可以用VisualC++中的命令行工具Unidgen;另一个是用GUI 应用程序Guidgen。
也可以用COMAPI函数CoCreateGuid通过编程来生成。
实例化COM对象COM类也像接口一样用128位的值来标识。
标识类的GUID称为“类ID”或CLSID。
要实例化一个对象,用户只需知道该对象的CLSID就可以了。
COM 有自己的API来创建对象实例。
最常用的是CoCreateInstance,它接受一个CLSID 并返回一个指向对象的接口指针。
下列语句实例化了一个CLSID为SLSID_Object的COM类,并将对象的IMath接口的指针保存在pMath中:IMath*pMath;CoCreateInstance(CLSID_Object,NULL,CLSCTXX_SERVER,IID_IMath,(void **)&pMath);其中的IID_Math只是一个变量,用来保存IMath的128位接口ID。
accreditation 委派accuracy 准确度acquisition 获取activity patterns 活动模式added value 附加值adjacency邻接Aeolian 伊奥利亚人的, 风的, 风蚀的Age of Discovery 发现的年代aggregation聚合algorithm, definition算法,定义ambiguity 不明确analytical cartography 分析制图application programming interfaces(APIs) 应用编程接口ARCGis 美国ESRI公司开发的世界先进的地理信息系统软件ArcIMS 它是个强大的,基于标准的工具,让你快速设计和管理Internet地图服务ArcInfo 在ArcGIS软件家族中,ArcInfo是GIS软件中功能最全面的。
它包含ArcView和ArcEditor 所有功能,并加上高级空间处理和数据转换ArcNews 美国ESRI向用户终生免费赠送的ArcNews报刊ArcSDE ArcSDE在ESRI GIS软件和DBMS之间提供通道,是一个空间数据引擎ArcUser Magazine 为ESRI用户创建的报刊ArcView 桌面GIS和制图软件,提供数据可视化,查询,分析和集成功能,以及创建和编辑地理数据的能力ARPANET ARPA 计算机网(美国国防部高级研究计划局建立的计算机网)aspatial data 非空间数据?Association of Geographic Information (AGI) 地理信息协会attribute data 属性数据attributes, types 属性,类型attributive geographic data 属性地理数据autocorrelation 自相关Autodesk MapGuide 美国Autodesk公司生产的Web GIS软件Automated mapping/facility management(AM/FM) systems 自动绘图/设备管理系统facilities 设备avatars 化身A VIRIS 机载可见光/红外成像光谱仪azimuthal projections 方位投影batch vectorization 批量矢量化beer consumption 啤酒消费benchmarking 基准Berry, Brianbest fit line 最优线binary counting system 二进制计算系统binomial distribution 二项式分布bivariate Gaussian distribution 二元高斯分布block encoding 块编码Bosnia, repartitioning 波斯尼亚,再分离成两个国家buffering 缓冲区分析Borrough, PeterBusiness and service planning(retailing) application in petroleum and convenience shopping 石油和便利购物的业务和服务规划(零售)应用business drivers 业务驱动business, GIS as 业务,地理信息系统作为Buttenfield, Barbaracadasters 土地清册Callingham, Martincannibalizing 调拨Cartesian coordinate system笛卡尔坐标系Cartograms 统计地图cartographic generalization 制图综合cartographic modeling 地图建模cartometric transformations 量图变换catalog view of database 数据库目录视图census data人口普查数据Census of Population 人口普查central Place Theory 中心区位论central point rule 中点规则central tendency 中心倾向centroid 质心choropleth mapping分区制图choosing a GIS 选择一个地理信息系统class 类别classification generalization 分类综合client 客户端client-server C/S结构客户端-服务器cluster analysis 聚类分析clutter 混乱coastline weave 海岸线codified knowledge 编码知识COGO data 坐标几何数据COGO editing tools 坐标几何编辑工具Collaboration 协作Local level 地方级National level 国家级Collection-level metadata 获取级元数据Commercial-off-the-shelf (COTS) systems 成熟的商业化系统chemas-microsoft-comfficeffice" />>> Commom object request broker architecture (CORBA) 公共对象请求代理体系结构Community, GIS 社区,地理信息系统Competition 竞争Component GIS 组件地理信息系统Component object model (COM) 组件对象模型Computer assisted mass appraisal (CAMA) 辅助大量估价,>>Computer-aided design (CAD)-based GIS 基于计算机辅助制图的地理信息系统Models 数据模型Computer-aided software engineering (CASE) tool 计算机辅助软件工程工具Concatenation 串联Confidence limits 置信界限Conflation 异文合并Conformal property 等角特性Confusion matrix 混淆矩阵Conic projections 圆锥投影Connectivity 连接性Consolidation 巩固Constant term 常数项Contagious diffusion 传染扩散Continuing professional development (CPD) 持续专业发展Coordinates 坐标Copyright 版权Corridor 走廊Cost-benefit analysis 成本效益分析Cost-effectiveness evaluation 成本效率评估Counting method 计算方法Cresswell, PaulCustomer support 客户支持Cylindrical Equidistant Projection 圆柱等距投影Cylindrical projections 圆柱投影> >Dangermond, Jack 美国ESRI总裁>> dasymetric mapping 分区密度制图>>data 数据>>automation 自动化>>capture costs 获取代价>>capture project 获取工程>>collection workflow 采集工作流>> compression 压缩>>conversion 转换>>definition 定义>>geographic, nature of 地理数据,数据的性质>> GIS 地理信息系统>>industry 产业>>integration 集成>>mining 挖掘>>transfer 迁移>>translation 转化>>data model 数据模型>> definition 定义>>levels of abstraction 提取等级>> in practice 实际上>>types 类型>>database 数据库>>definition 定义>>design 设计>>generalization 综合>>global 全球的>>index 索引>>multi-user editing 多用户编辑>> structuring 结构>>database management system (DBMS) 数据库管理系统>>capabilities 能力>>data storage 数据存储>>geographic extensions 地理扩展>>types 类型>>Dayton Accord 达顿协定,1995年12月达顿协定(DAYTON ACCORD)签订,巴尔干和平已经实现,波斯尼亚(包括黑塞哥维那)再被分解成两个国家>>decision support 决策支持>>deductive reasoning 演绎推理>>definitions of GIS 地理信息系统的各种定义>>degrees of freedom 自由度>>density estimation 密度估算>>dependence in space 空间依赖>>desktop GIS 桌面地理信息系统>>desktop paradigms 桌面范例>>Digital Chart of the World (DCW) 世界数字化图>>digital divide 数字鸿沟>>Digital Earth 数字地球>>Digital elevation models (DEMs) 数字高程模型>>Digital line graph (DLG) 数字线划图>>Digital raster graphic (DRG) 数字影像图>>Digital representation 数字表现>>Digital terrain models 数字地形模型>>Digitizing 数字化>>DIME (Dual Independent Map Encoding) program 美国人口调查局建立的双重独立地图编码系统>> Dine CARE >>Discrete objects 离散对象>>Douglas-Poiker algorithm 道格拉斯-普克算法,一种矢量数据抽稀算法>>Dublin Core metadata standard 都柏林核心元数据标准>>Dynamic segmentation 动态分割>>Dynamic simulation models 动态仿真模型>>> >Easting 朝东方>>Ecological fallacy 生态谬误>>e-commerce 电子商业>>editing 编辑>>education 教育>>electromagnetic spectrum 电磁光谱>>ellipsoids 偏振光椭圆率测量仪>>of rotation 旋转的>>emergency evacuation 应急撤退>>encapsulation 封装>>environmental applications 环境应用>>environmental impact 环境影响>>epidemiology 流行病学>>equal area property 等面积特性>>Equator 赤道>>ERDAS ERDAS公司是世界上最大的专业遥感图像处理软件公司,用户遍布100多个国家,软件套数超过17000套。
C++COM编程之什么是组件?什么是组件?一个组件同一个微型应用程序类似,即都是已经编译、链接好并可以使用的了,应用程序就是由多个这样的组件打包而得到的。
各定制的组件可以在运行时同其他组件连接起来以构成某个应用程序。
在需要对应用程序进行修改或改进时,只需要将构成此应用程序的组件中的某个用新的版本替换掉即可。
COM组件COM,即组件对象模型,是一个说明如何建立可动态互变组件的规范,它提供了为保证能够互操作,客户和组件应遵循的一些标准。
COM组件是以Win32动态链接库(DLLs)或可执行文件(EXEs)的形式发布的可执行代码。
COM组件必须满足以下条件:组件是完全与语言无关的;组件可以以二进制的形式发布;组件可以在不妨碍老客户的情况下被升级;COM组件可以透明的在网络上被重新分配位置。
使用组件的优点1.应用程序定制组件架构从本质上讲就是可被定制的,因用户可以用更能满足他们需要的组件来将某个组件替换掉;2.组件库组件架构最引人注目的优点之一是快速应用程序开发。
这一优点可以使开发人员从某个组件库中取出所需要的组件并将其快速地组装到一块以构造所需的应用程序,如同搭积木块一样;3.分布式组件组件架构可以使得开发这类分布式应用的过程得以简化。
实际上,客户机/服务器式的应用就是向组件架构跨出的第一步。
在那里整个应用程序被分成两部分:客户机部分及服务器部分。
总结COM提供了编写组件的一个标准方法。
遵循COM标准的组件可以被组合起来以形成应用程序。
至于这些组件是谁编写的、如何实现的都是无关紧要的。
每一个COM组件均可同其他组件一起使用。
实现这种可动态改变组件的关键问题是信息的封装。
对于封装,COM是通过组件和客户之间的连接或接口来实现的。
对于接口,我下篇博文进行总结。
组件技术COM/DCOM/COM+组件技术COM/DCOM/COM+2010-09-1610:03:38|分类:计算机|标签:com组件dcom对象调用|字号大中小订阅摘要:针对分布、异构的计算环境要求,应用系统的开发遇到了严峻的挑战。
本文较为详细地介绍了微软组件技术的发展过程及相应技术特点,特别是最新的COM+组件技术引入,对今后应用系统的开发可产生不可估量的效益。
关键词:COM;DCOM;COM+;组件组件是独立于特定的程序设计语言和应用系统、可重用和自包含的软件成分。
组件是基于面向对象的,支持托放(drag and drop)和即插即用(plug and play)的软件开发概念。
基于组件技术的开发方法,具有开放性、易升级、易维护等优点。
它是以组合(原样重用现存组件)、继承(扩展地重用组件)、设计(制作领域专用组件)组件为基础,按照一定的集成规则,分期、递增式开发应用系统,缩短开发周期。
在开发过程中遵循以组件为核心原则、组件实现透明原则及增量式设计原则。
目前,在组件技术标准化方面,主要有以下三个比较有影响的规范:OMG起草与颁布的CORBA;微软公司推出的COM/DCOM/COM+;SUN发表的JavaBeans。
由于Windows操作系统的流行,COM/DCOM/COM+组件技术深受程序员偏爱,目前已有大量系统基于此组件技术,因此本文着重针对微软的组件技术作一介绍。
COM是个开放的组件标准,有很强的扩充和扩展能力。
COM规定了对象模型和编程要求,使COM对象可以与其他对象相互操作。
这些对象可以用不同的语言实现,其结构也可以不同。
基于COM,微软进一步将OLE技术发展到OLE2。
其中COM实现了OLE对象之间的底层通信工作,其作用类似于CORBA/ORB。
在OLE2中出现了拖—放技术以及OLE 自动化[1]。
COM 规范包括COM 核心、结构化存储、统一数据传输、智能命名和系统级的实现(COM 库)。
理解对象模型图(ReadingOMDS)引⾔这篇⽂章⼤部分内容是翻译的帮助资料⾥的东西。
学习技术,英语是个好⼯具。
⼀直把英语的地位看得和技术⼀样重,也会强迫⾃⼰看英语版的技术书籍(都是PDF版的,外国的书买不起)、资料。
但⼀开始,这完全是⼀件痛苦万分的事,⼤量的专业词汇和概率总是让我摸不着头脑。
后来,慢慢积累词汇查找概念对英语这块不恐惧了,趁现在还处在记忆⼒黄⾦期希望能多补⼀补专业英语。
这需要长期积累与坚持。
这篇⽂章不光是翻译的内容,还有平常积累的东西和思考总结的东西。
愿有个好的开始……(单是翻译过来的话,⽂章不好理解,有些地⽅稍微改变了⼀下表达⽅式,但内容没变,看内容的时候请记住和对⽐符号。
)资料来源开发帮助:ArcObjects help for .NET(2010)/Learning ArcObjects/Getting started with ArcObjects .NET/Reading OMDS内容对象模型图解采⽤的是UML(统⼀建模语⾔)。
对象模型图是对对象浏览器的补充,它列出了开发环境中没有的类与成员、类与类之间的关系和结构,有了对象模型图能更好的理解AO的组件。
(获得OMDS的途径有两种⼀种是通过开发帮助,找到相应命名空间,在它的内容节点找到Diagrams,另⼀种是在安装路径下“……ArcGIS/DeverloperKit10.0/ Diagrams”)。
1.“类”的类型上图有三种类型的框分别代表是AbstractClass、CoClass、Class三种类型的类。
(⼀定要记住这三种框代表的类)AbstractClass(抽象类):抽象类,不能⽤它创建对象(只能通过⼦类继承)。
⽐如,⼀个“Line”是“primaryLine”和“secondary Line”的抽象类。
抽象类对于想要创造出⾃⼰的⼦类是⾮常重要的(它显⽰了在继承中哪些是特定的接⼝,哪些是可选择的接⼝(optional Interface))。
文章编号:167121742(2004)0320398205COM 原理概述冯正全(成都信息工程学院电子系,四川成都610041) 摘要:组件对象模型(COM )是与平台无关的、分布式的、面向对象的。
COM 是微软OL E ,ActiveX 等的基础技术。
更好的理解COM ,关键是记住COM 不是面向对象的语言,而是创建二进制软件组件的标准。
关 键 词:COM 组件;COM 对象;COM 接口;类厂;COM 库;列集中图分类号:TP313 文献标识码:A收稿日期:2003210213;修订日期:20032122161 引言把一个庞大的应用程序分成多个模块,每一个模块保持功能独立性,在协同工作时,通过相互之间的接口完成实际的任务。
我们把每一个这样的模块称为COM 组件,这些组件可以在不同的计算机上用不同的程序设计语言单独开发,单独编译,单独调试和测试。
当所有的组件开发完成后,把它们组合在一起就得到了完整的应用程序。
2 COM 组件结构在COM 标准中,引入了面向对象的思想,类似与C ++中对象的概念,对象是某个类的一个实例,称为COM 对象。
接口是一组方法的集合,其方法也称为接口成员函数。
COM 组件为COM 对象提供活动空间,COM 对象以COM 接口的方式提供服务。
COM 组件、COM 对象、COM 接口之间的关系如图1所示。
图1 COM 组件、对象、接口关系图每个COM 组件包含多个COM 对象,每个COM 对象提供多个COM 接口供客户使用。
COM 组件有两种,一是进程内组件,是一个DLL (动态连接库)文件;二是进程外组件,是一个EXE (可执行程序)文件。
当另外的组件或普通程序(即组件的客户程序)调用组件的功能时,它首先创建一个COM 对象,然后通过该对象所实现的COM 接口调用它所提供的服务。
组件的内部实现对客户程序是完全隐藏的。
COM 是客户/服务器模型,提供服务的组件是服务器,使用服务的组件和普通程序是客户。
简述对象模型的组成对象模型是计算机科学中的一个概念,用于描述对象的组成和行为。
它是面向对象编程的基础,对于理解和设计软件系统非常重要。
本文将从对象模型的组成及其重要性两个方面进行阐述。
一、对象模型的组成1. 对象:对象是对象模型的基本组成单元,它是一个具体的实体,拥有属性和方法。
对象可以是现实世界中的事物,也可以是抽象的概念。
每个对象都有自己的状态和行为,通过调用对象的方法可以改变其状态或执行特定的操作。
2. 类:类是对象的模板,用于定义对象的属性和方法。
一个类可以创建多个对象,这些对象都具有相同的属性和方法。
类定义了对象的共同特征和行为,是对象模型中的核心概念。
3. 属性:属性是对象的特征,描述了对象的状态。
每个对象可以具有多个属性,属性可以是基本类型(如整数、字符串)或其他对象类型。
属性的值可以在对象的生命周期中发生变化。
4. 方法:方法是对象的行为,用于描述对象可以执行的操作。
方法可以访问和修改对象的属性,并且可以与其他对象进行交互。
通过调用对象的方法,可以触发对象执行相应的操作。
5. 继承:继承是一种机制,允许子类继承父类的属性和方法。
子类可以扩展或修改父类的功能,从而实现代码的复用。
继承是面向对象编程中的重要特性,可以建立对象之间的层次结构。
6. 多态:多态是指同一操作可以作用于不同类型的对象,并且可以产生不同的结果。
多态性可以提高代码的灵活性和可扩展性,使程序更加易于维护和扩展。
二、对象模型的重要性1. 抽象和封装:对象模型提供了一种抽象和封装的方式,可以将复杂的系统分解为多个对象,每个对象负责完成特定的功能。
通过封装对象的属性和方法,可以隐藏对象内部的实现细节,只暴露必要的接口,提高代码的可读性和可维护性。
2. 代码复用:对象模型通过类和继承的机制,实现了代码的复用。
通过定义通用的类和方法,可以在不同的对象中共享代码,减少代码的重复编写,提高开发效率。
3. 灵活性和扩展性:对象模型允许在运行时动态地创建和销毁对象,以及添加、修改和删除对象的属性和方法。
组件对象模型控件和组件是什么一般把Control翻译成控件,把Component翻译成组件。
控件就是具有用户界面的组件。
要说的具体一点,就得回顾早期 Windows 的历史根源,当时控件指任何子窗口——按钮、列表框、编辑框或者某个对话框中的静态文本。
从概念上讲,这些窗口——控件——类似用来操作收音机或小电器的旋钮和按钮。
随着控件数量的增加(组合框、日期时间控件等等),控件逐渐成为子窗口的代名词,无论是用在对话框中还是用在其它种类的主窗口中。
没过多久 BASIC 程序员开始编写他们自己专用的控件,自然而然地人们便想到共享这些控件。
共享代码的方法之一是通过磁盘拷贝,但那样显然效率低下。
必须要有一种机制使开发者建立的控件能够在其它程序员的应用中轻而易举地插入,这便是VBA控件,OLE控件,OCX和最后ActiveX 控件的动机。
这就是控件和组件之间产生混淆之所在。
因为为了解决控件的可复用问题,所有这些技术必须首先解决更为一般的组件重用问题。
(COM,如果你还记得它的话,意思是组件对象模型)。
在软件行话中,组件这个术语指任何可复用的对象或任何可与其它对象交互的代码体。
子程序的发明,曾经一度成为程序员趋之若鹜的软件工程圣杯:一种统一的编程理论,它使程序员从基本构建块——也就是用所选语言编写的各种组件建立大型系统。
从子程序演变到OOP,到DLLs,再到COM,再到.NET框架的每一种新的编程范例都代表了一种不同的提供可重用性的方案。
VBX使用DLLs的固化名称。
COM使用接口和IUnknown。
.NET框架使用微软的中间语言(MSIL)层和公共语言运行时(CLR)来提供统一的粘合。
因此,控件是组件的一个主要样本(并且历史上曾驱动着组件的开发),控件又不仅仅是唯一的一种组件。
组件不需要显示任何信息或用户界面。
组件可能实现科学计算,收集性能数据。
规则1:必须实现IunknownIUnKnown接口的定义: IUnKnown是一个接口。
所有COM接口都继承IUnKnown。
IUnKnown的定义在WIN32 SDK中的UNKNWN头文件中。
深入:COM组件其实是一种特殊的类,遵循一个统一的标准,使到各个软件都可以通过某种方法访问这个类的函数和方法,也就可以做到组件通用. com就是统一的标准--通过接口来调用com组件.接口是你的com组件能被外界所感知的部分,实际就是一组方法(虚函数).IUnknown是所有接口的基础,他负责两项工作:IUnknown::QueryInterface负责得到该组件的其他接口的指针IUnknown::AddRef/Release负责管理该组件的生存期,但有人使用该组件时,保证该组件不会被意外删除;再没人使用该组件时,保证该组件被自动删除COM是组件对象模型,她是继面象对向之后的一种思想,而不是一种简单的实现。
通过IDL,很多具体的工作都可以实现她,如VC、VB等。
一句话:COM是接口(组件)的集合,接口是方法和属性的集合。
要了解COM,就得先了解IUnknown接口,IUnknown接口的C++形式的定义如下:interface IUnknown{virtual HRESULT _stdcall QueryInterface([in]REFIID iid,[out] void * * ppv)=0;virtual ULONG _stdcall AddRef(void)=0;virtual ULONG _stdcall Release(void)=0;}她实现了“接口查询”和“引用计数”,她是一个纯抽象基类。
所有COM定义的接口都必须从她继承。
实现的COM接口都应该遵守一定的原则:1。
查询IUnknown接口得到的必须一样。
2。
接口对称性。
3。
接口相互性。
4。
接口传递性。
5。
时间无关性。
要学好COM,一定得弄清楚COM的原理。
如果你学过C++或类似语言的话,这就比较好理解了。
在C++里,一个子类可以从父类继承,这样子类可以复用父类的函数和成员。
在COM里,一个接口和一个类很相似,一个接口可以从另一个接口继承,但是与C++的区别是,接口的继承只是继承说明,不继承实现。
微软规定了所有的标准接口必须从IUnknow n接口“继承”,以获得组件的两个基本能力:引用计数和查询接口。
一个Free的域名:,现在放了一位老外写的学习心得。
IUnknown接口是一个很普通的类或结构,你甚至可以自己写他,只是他有特殊的规定,必须有QueryInterface,AddRef,Relaese方法。
可以说他是所有C OM类的基类。
原始的IUnknown类是一个纯虚类,什么也不能干,用户必须重载并实现他的所有方法,之所以要用IUnknown虚拟类,只是为了接口统一。
也就是说所有COM类这三个方法的地址在函数虚拟表中是完全一样的。
COM中的接口和C++中的类有些是相同的,但是也有一些区别,在COM中有一些接口他里面有些函数是微软在出厂时就已经编写好了的,但是,他也提供了一些多余的接口,他只做了定义,但是没有实例化,你可以利用VC编写程序了将他实例化,就可以实现自己要求的功能了,但是你也要编写一个注册程序,至于如何编写要看你利用的接口而定了。
有一套教程,非常好,有生动的例子和循序渐进的说明。
最终的结论是,要在Windows平台上实现组件(可独立发布的程序单元)应该是COM现在这种形式。
URL为:/com/contents.asp比较适合于初学者,只需C++的基础,学起来也比较轻松。
学完之后,比看任何一本关于COM的书都要理解得好。
如果一个对象没有至少实现一个最小程度为IUnknown的接口,那它就不是Microsoft的组件对象模型(COM)。
接口设计规则接口必须直接或间接地从IUnknown继承。
接口必须有唯一的识别(IID)。
接口是不变的。
一旦分配和公布了IID,接口定义的任何因素都不能被改变。
接口的成员函数应该有HRESULT类型的返回值,使远端结构可报告远程过程调用(RPC)错误的情况。
接口成员函数的字符串参数应该是Unicode。
实现 IUnknown对象的同一性。
这要求对任何特定IUnknown接口的给定对象实例的QueryInterface调用返回相同的物理指针变量。
这导致了所谓的两个接口的QueryInterface(IID_IUnknown, ...)和结果的比较,以确定它们是否为同一对象(COM对象同一性)。
静态接口的设置。
任何经由QueryInterface来访问对象的接口的设置,必须是静态而不是动态的。
也就是说,假如一旦QueryInterface获得了一个给定的IID,那么它总是对相同的对象(除非有意想不到情况)调用,假如QueryInterface不能获得一个给定的IID,那么随后对相同IID的对象调用必定会失败。
对象完整性。
对于可处理的接口设置,必须有反身性,对称性和过渡性。
即给定代码如下:IA * pA = (some function returning an IA*);IB * pB = NULL;HRESULT hr;hr = pA->QueryInterface(IID_IB,&pB); // line 4Symmetric: pA->QueryInterface(IID_IA, ...) must succeed (a>>a) Reflexive: If, in line 4, pB was successfully obtained, thenpB->QueryInterface(IID_IA, ...)must succeed (a>>b, then b>>a);Transitive: If, in line 4, pB was successfully obtained, and we do IC * pC = NULL;hr = pB->QueryInterface(IID_IC, &pC); //Line 7and pC is successfully obtained in line 7,thenpA->QueryInterface(IID_IC, ...)must succeed (a>>b, and b>>c,then a>>c).最小参考服务大小。
我们需要实现AddRef来维护一个服务台,它足够大以便支持给定对象的所有接口的2 31 –1有出色的整体指示服务。
一个32-位的无符号整型数满足要求。
Release并不意味着失败。
假如客户想知道关于资源已被释放等情况,就必须在调用Release之前使用一些对象接口中的较高的语义。
内存管理规则接口指针的生命期管理总是通过建立在每个COM接口上的AddRef和Release方法来实现。
(参见下面的“引用计数规则”)下面的规则适用于接口成员函数的参数,包括不是“按值”传递的返回值。
对于参数来说,调用程序应分配和释放内存。
出口参数必须由被调用程序分配,由调用程序用标准的COM内存分配程序来释放。
出入参数首先由调用程序分配,必要时由被调用程序释放及重分配。
至于出口参数,调用程序有责任释放最终返回变量。
此时必须使用标准的COM内存分配程序。
假如函数返回调用失败的代码,则通常调用者没办法清除出口和入出口参数。
这导致了一些附加规则:错误返回时,出口参数必须可靠地被设置成可清除变量,它不能对调用程序有影响。
此外,所有的出口指针参数(包括调用分配,被调用委任结构)必须被明显地设为NULL。
最直接的方法是在函数说明项中设成NULL。
返回错误时,所有的入出口参数必须为被调用者所搁置(这样保持为调用程序初始化的值;若调用程序没有对它初始化,则它是个出口参数,不是入出口参数),或者被明显地设为出口错误返回情况。
参考计数规则:规则1:对于接口指针的每一个新的副本,AddRef必须被调用;Release在接口指针的每一个破坏时调用,除了子规则明显允许了其他情况。
以下规则对应于规则1的非例外情况。
规则1a:函数的入口出口参数。
调用程序必须AddRef实际参数,因为当出口变量存放在它之上时,将由被调程序释放。
规则1b:获取全局变量。
从全局变量的已存在的指针副本得到的接口指针的局部副本,必须被独立地引用计数。
因为存在局部副本时,被调函数会破坏全局副本。
规则1c:新指针合成所需资源不多。
函数使用内在知识合成接口指针,而不是从其他资源所得,此时必须对新指针做初始AddRef。
这样的重要例子有事例生成法则,Iunknown::QueryInterface的实现,等等。
规则1d:内部存储指针副本的返回。