【1】组件产生的背景

一个应用程序通常是由单个二进制文件组成的。

当应用程序版本发布后一般不会发生任何变化,对于操作系统、硬件以及客户需求的改变都必须要等到修复源代码后且整个应用程序被重新编译才可处理。

很显然这种状况极不理想。矛盾总是推动事物向前发展的源动力。

当人们认识到应用程序在发行之后不应该保持那种静止的状态之后,开发人员找出一种方法,以能够给已发行软件不断注入新的活力。

其解决方案就是将单个应用程序分隔为多个独立的部分,每个部分也即组件。如下图所示:


这种做法的好处是可以随着技术及需求的不断发展而只需用新的组件取代已有的组件即可。

COM就是关于如何建立组件以及如何通过组件构建应用程序的规范。

传统的做法是将应用程序分割为文件、模块或类,然后将它们编译并链接成一个铁板一块的应用程序。而由组件建立应用程序的过程称为组件架构。

组件架构最引人注目的优点之一是快速应用程序开发。

【2】何谓分布式组件?

所谓分布式组件,组成应用程序的组件不一定都在一个机器上,可以在网络上任意的一台机器。如下图所示:


【3】对组件的要求?

组件的优点直接来源于可以动态的将它们插入或卸出应用程序。为了实现这种功能,组件必须满足两个条件:

1、组件必须动态链接。

2、组件必须隐藏其内部实现细节,对客户完全透明。

【4】为了将客户与组件相应隔离对于组件有哪些限制?

1、组件必须封装其所用的编程语言。任一客户都应能使用任一组件,不论它们是用什么编程语言实现的。

将实现用的编程语言暴露出来只会在组件及客户间引入新的依赖。

2、组件必须以二进制的形式发布。如果想将实现组件的编程语言隐藏起来,那么在发布时,它们必须是已被编译、链接好并且马上就可以投入使用的。

3、组件必须可以在不妨碍已有用户的情况下被升级。一个组件的新版本必须既能够同老版本的客户一起使用,也可以同心版本的客户一起使用。

4、组件在网络上的位置必须可以被透明的重新分配。组件及使用它的程序应能够在同一进程中、不同的进程中或不同的机器上运行。

否则,当将某个本地组件移动到网络上的另外某个地方时,客户程序必须被重新编译。

【5】COM组件是什么?

1、COM组件是以Win32动态链接库(DLL)或者可执行文件(EXE)的形式发布的可执行二进制代码所组成的。

2、COM组件是动态链接的。

3、COM组件是完全与语言无关的。

4、COM组件是可以在网络上透明的被重新分配位置的。

5、COM组件是在兼容老客户的情况下悄然升级的。

6、COM组件是一种给其它应用程序提供面向对象的API或服务的极好方法。

理解COM以下几点:

1、COM不是一种计算机语言。

2、COM不是DLL。

3、COM不是函数集。

4、COM不是类库。

【7】使用COM有那些好处?

1、提供了一个所有组件都应遵循的标准。

2、允许使用组件的多个不同的版本,而这一点对于用户而言几乎是透明的。

3、使得可以按相同的方式来处理类似的组件。

4、定义了一个与语言无关的架构。

5、支持对远程组件的透明连接。

【8】进程内组件与进程外组件?

组件按照执行类型可以有两个基本形式,既可以是进程内组件也可以是进程外组件。

进程内组件就像动态链接库DLL一样,它们与调用组件的应用程序运行在同一块存储空间当中。

也就是说,当ASP应用程序调用DLL时,DLL和该ASP是处于同一存储空间的。

可以从两个方面来说明这样做是有好处的。首先内部调用范围不会超出系统给应用程序分配的存储空间,所以程序将会执行得更快一些。

另外,既然是在同一存储空间,那么组件也就不大可能去破坏其他正在运行的进程,这样进程就有很好的独立性。

第二个优点是如果你有许多组件程序,那么这些物理文件(组件程序)就只需要一次性装载到内存当中就够了。

进程外组件的服务是以一个可执行文件(EXE格式)来实现的,它与调用组件的应用程序是不同的,它们不在同一存储空间里,而且进程外服务使用了更多的资源,

这是因为组件的多个实例要求多次的内存装载。另外进程外服务在自己独立的存储空间运行,所以如果运行失败的话,影响到其他应用程序也是很有可能的。

备注:一个应用程序或者组件,如果它使用了其它组件,相对于被使用的组件而言,我们将它称之为客户。

Good Good Study. Day Day Up.

顺序  选择  循环  总结

COM编程之一 组件的更多相关文章

  1. 第34天学习打卡(GUI编程之组件和容器 frame panel 布局管理 事件监听 多个按钮共享一个事件 )

    GUI编程 组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1 简介 GUi的核心技术:Swing AWT 1.界面不美观 2.需要jre环境 为什么要学习GU ...

  2. Android编程: fragment组件、菜单和Intent组件

    学习内容:fragment组件.菜单和Intent组件 ====fragment组件====1.fragment是一种自我容纳,模块化的,嵌入在一个Activity里面的视图组件    可以在运行时动 ...

  3. ABB-robotstudio离线编程-Smart组件资料-笔记

    Smart组件 目录: 1.“信号与属性”子组件. 2.“参数与建模”子组件. 3.“传感器”子组件. 4.“动作”子组件. 5.“本体”子组件. 6.“其他”子组件. 一.“信号与属牲”子组件 1. ...

  4. DELPHI下的SOCK编程(转)

    DELPHI下的SOCK编程      本文是写给公司新来的程序员的,算是一点培训的教材.本文不会涉及太多的编程细节,只是简单讲解在DELPHI下进行Winsock编程最好了解的知识. 题外话:我认为 ...

  5. COM编程VS实践

    目录 1. 2. 2.1. 2.2. 2.3. 3. 3.1. 3.2. 3.3. 1.COM实践简介 因需要对Office系列进行程序操作,特研究了一下COM相关的编程. 个人体会:COM面向接口编 ...

  6. DELPHI下的SOCK编程

     DELPHI下的SOCK编程(转自http://www.cnblogs.com/devcjq/articles/2325600.html) 本文是写给公司新来的程序员的,算是一点培训的教材.本文不会 ...

  7. TinyOS编程思想和Nesc基础语法

    TinyOS操作系统由nesc语言写成,从程序员角度看,它的基本作用就是提供了一组API接口以及一些编程规则. 具体来说,基于nesc语言的TinyOS编程行为具有以下特点: a.兼容C语言:使用ne ...

  8. 我所理解的Android组件化之通信机制

    之前写过一篇关于Android组件化的文章,<Android组件化框架设计与实践>,之前没看过的小伙伴可以先点击阅读.那篇文章是从实战中进行总结得来,是公司的一个真实项目进行组件化架构改造 ...

  9. boost并发编程boost::atomic

    三个用于并发编程的组件: atomic,thread,asio(用于同步和异步io操作)   atomic atomic,封装了不同计算机硬件的底层操作原语,提供了跨平台的原子操作功能,解决并发竞争读 ...

随机推荐

  1. MVC中”从客户端检测到有潜在危险的Request.Form值“的解决方法

    从客户端检测到有潜在危险的Request.Form值: 在webForm中,可以在aspx页面顶部 <%@ Page Language="C#" AutoEventWireu ...

  2. 树莓派连接wifi

    使用树莓派,通过无线网卡连接wifi,再通过远程桌面或者ssh的连接树莓派比较方便,本文记录树莓派wifi如何设置. 参考链接: http://www.jianshu.com/p/b42e8d3df4 ...

  3. 移动端公共css样式

    @media screen and ( min-width: 319px){html{ font-size: 100px;}}@media screen and ( min-width: 359px) ...

  4. python基础篇-day1

    python基础篇 python是由C语言写的: pass 占位符: del,python中全局的功能,删除内存中的数据: 变量赋值的方法: user,pass = 'freddy','freddy1 ...

  5. 3.IP地址分类_规划_子网掩码

    IP地址分类_规划_子网掩码 3.1MAC地址 网卡的身份证号———MAC地址 MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08:00:20: ...

  6. python or not python

    python or not python 我挺喜欢 python 这种编程语言,它本身的丰富的动态特性让这种语言的表达能力很强,基本上 python 上写的一行代码,可实现 java 上 1.5 到 ...

  7. 第二篇 Integration Services:SSIS数据泵

    本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...

  8. Fix the “No Private Key” Error Message

    This article will show you how to correct the “No Private Key” error message in Windows Internet Inf ...

  9. 线性空间光照(即Gamma)

    在渲染管线中正确使用Gamma校正是决定渲染效果的一个非常重要的因素,现在商业引擎包括很多国内引擎都已经是在线性空间计算光照.当然也包括我们之前公司设计的引擎.关于gamma校正的定义可以查看wiki ...

  10. RAC和ASM环境下修改控制文件control file

    1,目前控制文件只有一个,为了安全性,增加到3个 SQL> select name from v$controlfile; NAME ------------------------------ ...