CORBA组件模型:第一部分,向组件式中间件(component middleware)演化
The CORBA Component Model, C/C++ Users Journal February 2004
Douglas C. Schmidt and Steve Vinoski
cnDeveloperw (ysf_gzb@21cn.net) 译
计算的早期,软件从初稿到完成一个专门的目标是在一台特定的硬件平台上开发出来的。由于计算机要比编程昂贵的多,节约的注意力便被放在系统的软件的重用和从已有的早前软件中组合应用程序上来。在过去的四十年来,以下的两个趋势促使了从以硬件为中心(hardware-centric)到以软件为中心(software-centric)的发展模式(paradigm)。
1.经济上的因素。由于在VLSI(译者注:超大规模集成电路)和硬件的商品化进程,绝大多数计算机现在要比在其上运行的程序便宜得多了。
2.技术上的进展。随着诸如面向对象编程语言和分布式对象计算中间件等软件开发技术的出现,开发更具性能和特色的软件越发容易。
软件发展模式一个主要的共同主题是渴求重用,例如,从先前存在的软件构建块(building blocks)上组合和定制应用。现代的各种软件开发模式,诸如面向对象(object-oriented)、基于组件的(component-based)、产生式(generative)等技术,以形成模式核心的构建块(building blocks)的不同的类型和粒度来奔向此共同目标。中间件技术的发展和演化同样遵从类似的捕获和重用各种层次的软件在过去取得的设计信息。
本栏是首个聚焦于CORBA组件模型( CORBA Component Model, CCM)的系列。首先,我们概述从子过程、对象和组件中编写抽象的演化。然后,描述这个演化是怎样很大程度的反映在中间件上的--从消息传递到远程调用,从分布式对象到组件中间件。我们讨论分布对象计算(distributed object computing, DOC)中间件的局限性,以及由此引发的普遍对组件中间件和CORBA组件模型(CCM)的需求。
编写抽象的演化
从可重用构建块中组建软件,已经成为软件研究者的研究目标三十多年了。举例来说,在1968年Doug Mcllroy引发了对软件"集成电路"(IC)和大规模生产及检测的需求:(1)软件IC的类型可变性;(2)能有效的标准化的IC类型。由于Mcllroy的工作超前于对象和组件的广泛适用时期,他想象,一个软件IC能从一套标准的子过程目录建造,这个目录被从时空性能,大小限制和绑定时间等参数精确健硕的分类。
最初在系统软件,包括操作系统和高级语言编译器,也强调已构建软件(prebuilt software)的使用。这类软件经常包括在OS或编译器运行时本身之中,并且经常性组织从在线文件系统到数学运算库范围内的周边成熟函数的通用计算支持能力。应用程序开发者手工把这些现成的函数编制到新的应用程序中。
后来,实现软件IC梦想的努力,引出了把更多重点放在组织数据而不是过程的设计上的信息隐藏和数据抽象技术。数据抽象把模块(module)概念形式化为一套自身维护的相关的过程和数据,引出了程序的分割,这样数据被隐藏在模块之中。
信息隐藏和数据抽象技术在编程语言里被具体化,比如Clu, Modula2和Ada。这些语言提供了模块作为基础结构,名字域(import/export)的外部控件除外----一种模块的初始化机制,以及一套上面所概述的众所周知和公认的特色用法的风格。虽然这些语言允许程序员创建和应用用户自定义类型,但如果没有修改界都定义和实现,仍然难于把这些类型扩展到新的使用情景。
接下来的编程模式的主要进展来自面向对象设计技术,如OMT和Booch符号/方法(notations/methods)(最后被纳入UML),以及面向对象编程语言,如C++和Java。面向对象技术专注于把软件应用分解到清楚地定义了接口和通过派生、聚合和组合来关联的类和对象。面向对象技术一个关键的优点是直接支持类的通用属性和特殊属性的差别。表达这种差别和利用它的被简化了的程序化----通过面向对象语言支持的继承,允许共性东西在类行为中确述,以及多态,允许基类行为通过动态绑定重载在子类中被定制。
虽然面向对象编程增强了早前的编程模式,但依然有不足。举例来说,面向对象语言通常假设软件系统中不同的实体有如下接口:(1)遵从继承和聚合;(2)用相同的编程语言编写。当今的许多应用程序必须运行在多语言甚至是在多模式的环境下,这就必须要求一种比单一编程语言或设计模式所能提供还要更高层次的抽象。
(代续...)
cnDeveloperw (ysf_gzb@21cn.net)