- 写在前面的话
- 引言
- 第 1 章 对象入门
- 第 2 章 一切都是对象
- 第 3 章 控制程序流程
- 第 4 章 初始化和清除
- 第 5 章 隐藏实施过程
- 第 6 章 类再生
- 第 7 章 多形性
- 第 8 章 对象的容纳
- 第 9 章 违例差错控制
- 第 10 章 Java IO 系统
- 第 11 章 运行期类型鉴定
- 第 12 章 传递和返回对象
- 第 十三 章 创建窗口和程序片
- 第 14 章 多线程
- 第 15 章 网络编程
- 第 16 章 设计范式
- 第 17 章 项目
- 附录 A 使用非 JAVA 代码
- 附录 B 对比 C++和 Java
- 附录 C Java 编程规则
- 附录 D 性能
- 附录 E 关于垃圾收集的一些话
- 附录 F 推荐读物
A.5 Java/COM 集成
COM(以前称为 OLE)代表微软公司的“组件对象模型”(Component Object Model),它是所有 ActiveX 技术(包括 ActiveX 控件、Automation 以及 ActiveX 文档)的基础。但 COM 还包含了更多的东西。它是一种特殊的规范,按照它开发出来的组件对象可通过操作系统的专门特性实现“相互操作”。在实际应用中,为 Win32 系统开发的所有新软件都与 COM 有着一定的关系——操作系统通过 COM 对象揭示出自己的一些特性。由其他厂商开发的组件也可以建立在 COM 的基础上,我们能创建和注册自己的 COM 组件。通过这样或那样的形式,如果我们想编写 Win32 代码,那么必须和 COM 打交道。在这里,我们将仅仅重述 COM 编程的基本概念,而且假定读者已掌握了 COM 服务器(能为 COM 客户提供服务的任何 COM 对象)以及 COM 客户(能从 COM 服务器那里申请服务的一个 COM 对象)的概念。本节将尽可能地使叙述变得简单。工具实际的功能要强大得多,而且我们可通过更高级的途径来使用它们。但这也要求对 COM 有着更深刻的认识,那已经超出了本附录的范围。如果您对这个功能强大、但与不同平台有关的特性感兴趣,应该研究 COM 和微软公司的文档资料,仔细阅读有关 Java/COM 集成的那部分内容。如果想获得更多的资料,向您推荐 Dale Rogerson 编著的《Inside COM》,该书由 Microsoft Press 于 1997 年出版。
由于 COM 是所有新型 Win32 应用程序的结构核心,所以通过 Java 代码使用(或揭示)COM 服务的能力就显得尤为重要。Java/COM 集成无疑是 Microsoft Java 编译器以及虚拟机最有趣的特性。Java 和 COM 在它们的模型上是如此相似,所以这个集成在概念上是相当直观的,而且在技术上也能轻松实现无缝结合——为访问 COM,几乎不需要编写任何特殊的代码。大多数技术细节都是由编译器和/或虚拟机控制的。最终的结果便是 Java 程序员可象对待原始 Java 对象那样对待 COM 对象。而且 COM 客户可象使用其他 COM 服务器那样使用由 Java 实现的 COM 服务器。在这里提醒大家,尽管我使用的是通用术语“COM”,但根据扩展,完全可用 Java 实现一个 ActiveX Automation 服务器,亦可在 Java 程序中使用一个 ActiveX 控件。
Java 和 COM 最引人注目的相似之处就是 COM 接口与 Java 的“interface”关键字的关系。这是接近完美的一种相符,因为:
- COM 对象揭示出了接口(也只有接口)
- COM 接口本身并不具备实施方案;要由揭示出接口的那个 COM 对象负责它的实施
- COM 接口是对语义上相关的一组函数的说明;不会揭示出任何数据
- COM 类将 COM 接口组合到了一起。Java 类可实现任意数量的 Java 接口。
- COM 有一个引用对象模型;程序员永远不可能“拥有”一个对象,只能获得对对象一个或多个接口的引用。Java 也有一个引用对象模型——对一个对象的引用可“造型”成对它的某个接口的引用。
- COM 对象在内存里的“生存时间”取决于使用对象的客户数量;若这个数量变成零,对象就会将自己从内存中删去。在 Java 中,一个对象的生存时间也由客户的数量决定。若不再有对那个对象的引用,对象就会等候垃圾收集器的处理。
Java 与 COM 之间这种紧密的对应关系不仅使 Java 程序员可以方便地访问 COM 特性,也使 Java 成为编写 COM 代码的一种有效语言。COM 是与语言无关的,但 COM 开发事实上采用的语言是 C++和 Visual Basic。同 Java 相比,C++在进行 COM 开发时显得更加强大,并可生成更有效的代码,只是它很难使用。Visual Basic 比 Java 简单得多,但它距离基础操作系统太远了,而且它的对象模型并未实现与 COM 很好的对应(映射)关系。Java 是两者之间一种很好的折衷方案。
接下来,让我们对 COM 开发的一些关键问题进行讨论。编写 Java/COM 客户和服务器时,这些问题是首先需要弄清楚的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论