我们先从1999年2月美国总统 IT 顾问委员会的一份报告说起。这是一个非常重要而且很有影响的报告。在报告中列举了大量的事实论证 IT 技术对社会和国家以及人民生活的重要作用。建议美国政府加大对IT 技术发展研究的投入。在建议重点支持的四大项目中,把软件列在首位。因为报告认为软件是信息所时代社会的最重要的基础设施,然而现实上这个基础却相当脆弱和不可靠。软件越来越普及而且越来越复杂,但缺乏开发可靠安全的各种软件的合用技术。软件的生产能力远远满足不了飞速发展的实际需求。为此,报告建议重点支持四个方面的软件技术的发展和研究。第一就是支持软件开发方法和构件技术的基础研究。什么是软件开发的构件技术,为什么把它提得这么高,它究竟对软件的开发和应用有些什么作用,构件技术的突破对软件产业的发展会带来什么影响和机遇,能否利用和抓住这个机遇发展我国年轻的软件产业,正是本文要讨论的问题。
面向对象到构件技术
如果把当前软件技术的新动向归纳一下,我认为可以概括为以下三点,即 媒体数字化、计算机网络化和软件构件化。
所谓软件构件化,就是要让软件开发像机械制造工业一样,可以用各种标准和非标准的零件来进行组装,或者像建筑业一样,用各种建筑材料搭建成各式各样的建筑。软件的构件化和集成技术的目标是:软件可以由不同厂商提供的,用不同语言开发的,在不同硬件平台上实现的软件构件,方便地、动态地集成。这些构件要求能互操作,它们可以放在本地的计算机上,也可以分布式地放置在网上异构环境下的不同结点上。实现软件的构件化,这是软件业界多年来分奋斗的目标,可以说已经经过了几代人的努力。
早在六、七十年代,大型软件系统开发引起的软件危机,导致了 Yourdon 和 De Marco 的结构化分析与结构化设计的软件工程方法的盛行。所谓结构化方法,其本质就是为了保证软件开发的质量、提高软件的零活性和软件生产效率,通过工程化方法,建立系统的软件开发过程,使开发的软件具有好的结构,即所谓可拼装、可裁剪的模块化结构。
后来在八十年代出现了面向对象的方法。面向对象方法的基本思路是用对象来作为描写客观信息的基本单元,它包括封装在一起的对象标识、对象属性(数据)和对象操作(方法、运算)。与此相关的还有如下一些概念:如对象类、类的实例。对象类的继承、父类、子类、多重继承、方法的重载、限制以及接口等。关于面向对象方法已有很多研究,最著名的有:Grady Booch方法,James Rumbaugh 的 OMT(对象模型技术),Ivar Jacobson 的 OOSE(面向对象的软件工程)。这几种方法虽然基本思路相同,但仍有不少差异,从而为实际的软件开发和应用带来诸多不便。于是由 RATIONAL 软件公司发起,从1995年开始,先是 Booch 和 Rumbaugh 合作,后来 Jacobson 也加盟,共同提出了一个统一的建模语言 UML ,得到很多软件公司的支持,逐渐成为面向对象方法的一个事实上的标准。正是由于有了面向对象技术的发展,多年来追求软件构件化的的梦想,才有可能成为现实。下面分别从 CORBA、DCOM和JAVA几个方面来介绍软件构件技术的基本内容。
公共对象请求中介结构CORBA
面向对象方法是软件构件技术的基础。为了真正实现软件构件化,还必须解决分布式计算和对象的互操作问题。因为按上述构件技术的目标,要求构件间能互操作,而且这些构件也允许分布式地放置在网上异构环境下的不同结点上。
为了协调和制定分布式异构环境下应用软件开发的统一标准,1989年成立了一个国际组织,叫对象管理联盟(OMG)。加盟此组织的单位愈来愈多,现已有750多个单位,其中包括软件的开发供应商,软件用户和软件技术的研究院所等。经过多年的努力,已制定了一系列的标准规约,称为 CORBA(公共对象请求中介结构)。 CORBA的核心是对象请求中介(ORB),是分布式对象借以相互操作的中介通道。另外还定义了最基本的对象服务构件和公共设施构件的规约。OMG所定义的CORBA并不规定具体的实现。实现CORBA的软件由各个厂家自行开发。现已有多种可用的产品版本发布。
如上所述,CORBA的核心ORB的作用是将客户对象(Client)的请求发送给目标对象(在CORBA中称为对象实现Object Implementation),并将相应的回应返回至发出请求的客户对象。ORB的关键特征是客户与目标对象之间通信的透明性。在通信过程中,ORB一般隐蔽了目标对象的以下内容:
1.目标对象的位置:客户毋须了解具体目标对象所在的地址。目标对象可在同一机器的相同或不同进程中,也可在网络上另一机器的进程中,。
2.对象实现的方式:客户毋须了解具体目标对象是如何实现的,用何种语言写成的,也毋须了解该对象所在的操作系统和具体的硬件环境。
3.对象执行的状态:当客户发送请求时,它毋须了解目标对象当前是否处于激活状态(即是否处于一个正在执行的进程中)。若有必要ORB可透明地激活该对象。
4.对象通信机制:客户毋须了解ORB使用何种底层通信机制来发送请求和响应回答(如TCP/IP,分享存储器,及本地方法调用等)。
ORB的通信透明性使得应用开发者可较少考虑低级分布式系统的程序设计问题,而更多地关心应用领域问题。ORB的各部分的作用如下图所示。