【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. Fiddler-002-常用配置修改

    日常在应用 Fiddler 进行网络抓包时,有时需要查看服务器的类型或者其他信息,此文主要讲述实际应用中针对 Fiddler 进行的定制化配置,以方便日常的工作学习. 第一:显示服务器的类型和请求域名 ...

  2. Linux绑定双网卡

    Linux绑定双网卡 1. 配置参数文件 版本在centos6以下在/etc/modproe.conf文件中配置,版本是centos6.x或以上在/etc/modproe.d/目录下配置. 2.    ...

  3. 通过 ec2-api / boto 调用 OpenStack 功能

    通过 ec2-api / boto 调用 OpenStack 功能 OpenStack 支持 amazon ec2 的 api,并能通过 python 库 boto 来进行调用.目前,社区在把 ec2 ...

  4. Kafka使用入门教程 简单介绍

    介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢?   首先让我们看几个基本的消息系统术语: Kafka将消息以 ...

  5. 第五篇 SQL Server安全架构和安全

    本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学 ...

  6. postgress Sql数据库的复制

    1.保证本地可正常执行pg_dump,即就是本地有安装postgress数据库,最好把bin目录添加到环境变量path中2.在命令行中执行如下语句: pg_dump -U zhangsan -h 19 ...

  7. jQuery.proxy()函数

    jQuery.proxy(),接受一个函数,然后返回一个新函数,并且这个新函数始终保持了特定的上下文(context)语境.   context 代表上下文 name是上下文的某个属性 jQuery. ...

  8. Java基础之处理事件——使窗口处理自己的事件(Skethcer 1 handing its own closing event)

    控制台程序. 为表示事件的常量使用标识符可以直接启用组件对象的特定事件组.调用组件的enableEvent()方法,并把想要启用事件的标识符传送为参数,但这只在不使用监视器的情况下有效.注册监听器会自 ...

  9. UITabBarController底层实现

    1.首先要了解:任何控制器,都能添加子控制器      UIViewController里面有一个方法:     - (void)addChildViewController:(UIViewContr ...

  10. 利用JAVA计算TFIDF和Cosine相似度-学习版本

    写在前面的话,既然是学习版本,那么就不是一个好用的工程实现版本,整套代码全部使用List进行匹配效率可想而知. [原文转自]:http://computergodzilla.blogspot.com/ ...