首页 理论教育 面向对象方法及组件开发技术

面向对象方法及组件开发技术

时间:2022-02-14 理论教育 版权反馈
【摘要】:COM组件技术存在许多问题,其中有一些是关键的,有的甚至是致命的。组件技术主要强调在独立开发和部署的程序之间的一套约定,COM则是微软公司将这些约定规范化的首次尝试。COM既能作为设计范例,也可用作支持平台技术。这使得COM组件,难以进行语义修改和版本升级。CLR元数据中还包括组件的依赖关系和版本信息,从而允许使用新技术来处理版本控制问题。当所有的模块开发完成后,把它们组合在一起就得到了完整的数字油藏系统。

组件技术是各种软件重用方法中最重要的一种方法,也是分布式计算和Web服务的基础。组件技术的应用现在已经十分广泛,从Windows编程中使用的各种控件和公用对话框,到Active X控件和Direct X的应用;从微软公司的COM,到Sun公司的Java Bean。在网络及其应用都很发达的今天,对组件服务的需求十分强烈,因此组件技术近年来得到了飞速的发展和广泛的应用。

每个组件会提供一些标准且简单的应用接口,允许使用者设置和调整参数及属性。用户可以将不同来源的多个组件有机地结合在一起,快速构成一个符合实际需要的复杂应用程序。组件区别于一般软件的主要特点是其重用性、可定制性、自包容性和互操作性。可以简单方便地利用可视化工具来实现组件的集成,也是组件技术的一个重要优点。

软件组件的核心技术是组件模型,它定义了组件的体系结构及如何操作此结构并与外部交互。组件模型的两个基本要素——组件和容器。模型的组件部分提供构造组件的模板,是各种组件创建和使用的基础;模型的容器部分定义了将多个组件结合成有用结构的方法,为组件的结合和交互提供环境支持。

组件应用的基础是标准,没有统一的接口描述、没有规范的组件通信、没有标准的对象请求和远程调用,就没有组件应用的可能。只有组件遵循了统一的标准,软件才能正常运行。目前的主要标准有CORBA(国际通用)、EJB(Sun的Java)、COM和CLR(Microsoft的Windows和.NET)。下面介绍组件所依赖的技术基础。

1.COM技术

COM(Component Object Model组件对象模型)的核心是一组组件对象间交互的规范,它定义了组件对象如何与其使用者通过二进制接口标准进行交互,COM的接口是组件的球类型纽带。

除了规范之外,COM还是一个称为COM库的实现,它包括若干API函数,用于COM程序的创建。COM还提供定位服务的实现,可以根据系统注册表,从一个类标识(CLSID)来确定组件的位置。

COM采用自己的IDL来描述组件的接口(interface),支持多接口解决版本兼容问题。COM为所有组件定义了一个共同的父接口IUnknown。GUID是一个128位整数(16字节), COM将其用于计算机和网络的唯一标识符。

COM组件技术存在许多问题,其中有一些是关键的,有的甚至是致命的。组件技术主要强调在独立开发和部署的程序之间的一套约定,COM则是微软公司将这些约定规范化的首次尝试。COM既能作为设计范例(它将组件的约定,表示为类型定义),也可用作支持平台技术。作为前者,COM编程模型相当成功;但是后者却存在诸多问题,正是由于缺乏稳固的平台技术,COM时代面临着终结。

COM用类型的形式表示组件约定,但是该约定存在如下两个关键问题,使得其对语义的表示并不是最优的。

(1)约定的描述:COM缺乏对组件依赖性的描述。因此,没有办法来解析COM组件(或者其约定的定义),也不能确定它所需要的其他组件,从而无法保证它的正确运行。由于缺少相关信息,使得部署基于COM的应用程序,很难确定它需要哪些DLL,也不能静态确定所需要的是哪个版本的组件,这对版本问题的诊断变得极其复杂;COM约定的描述格式缺乏扩展性。IDL是基于文本的,极少随组件部署,通常只有C++程序员才会使用。

(2)约定的工作方式:COM组件的约定是基于类型描述的,所采用的类型系统是C++的可移植子集。就底层技术而言,COM组件的约定,最终只是在内存中形成堆栈结构的协议,根本没有(按组件所要求的那样来)描述语义内容。二进制的物理约定,过度关心细节,使COM难于使用和开发。尤其在针对COM组件的版本控制问题上,物理性约定所产生的问题就更大了。这使得COM组件,难以进行语义修改和版本升级。

2.NET/CLR

NET的核心是CLR,它可以视为是COM技术的继承和发展,它解决了COM组件模型中存在的主要问题。

与COM平台一样,CLR也注意组件间的约定,而且这些约定也是基于类型的。但是与COM不同的是,CLR有完全规范的格式来描述组件之间的约定——元数据。CLR的元数据是机器可读的,其格式是公开的、国际标准化的、完全规范的。CLR还提供了读写元数据的实用工具,使用者不需要了解元数据的底层文件格式。不像COM的元数据难以定制和扩展;而且其元数据中又缺少依赖和版本信息,使得对组件的部署和版本的控制都十分困难;另外,COM元数据的存在是可选的,而且经常会被忽略掉,这对组件应用的构建会造成很多问题。CLR通过定制(本身就是强类型的)特性,使其元数据可以达到清晰容易的可扩展性。CLR元数据中还包括组件的依赖关系和版本信息,从而允许使用新技术来处理版本控制问题。另外,CLR元数据的存在是强制性的,部署或加载组件都必须访问元数据。因此,构建基于CLR的基础架构和各种工具,显然要比COM容易得多。

在CLR中,约定被描述为类型的逻辑结构,而不是物理的二进制格式。因此,在CLR的约定中,并没有暗示访问字段和方法的精确代码顺序。所以,在考虑虚方法布局、堆栈规则、对齐方式及参数传递方式时,CLR具有极大的灵活性。CLR是通过名字和签名来引用字段与方法,而不是偏移量。这样,CLR就避免了困扰COM的声明顺序问题,组件成员的实际地址/偏移量,需要等到运行时在类型被加载及初始化时,才能够确定。

软件工程的角度来考虑,每个模块都保持一定的功能独立性,这些模块可以单独开发、单独编译,甚至单独调试和测试。当所有的模块开发完成后,把它们组合在一起就得到了完整的数字油藏系统。当系统工作时,模块通过相互之间的接口来完成实际的任务。模块之间的良好协同工作就构成了应用系统。把每一个这样的模块称之为组件。组件是模块化程序设计方法发展到一定阶段的产物。数字油藏系统可以划分成9个组件(图8-6),数据抽取组件、数据编辑组件和数据查询组件组成为数据管理;基本图形显示和地质图编制组件为精细储层地质研究服务;数据挖掘组件主要包括多种数据挖掘算法,为储层知识获取和应用服务;储层知识管理组件提供储层知识的管理功能;地质统计学方法组件主要为储层建模提供功能。

图8-6 数字油藏系统的组件构成

把数字油藏系统按功能划分成许多组件以后,每个组件的设计采用面向对象的设计方法,因为面向对象技术采用封装机制把对象的特性和对象的功能合为一体,并通过派生、继承、重载和多态性等特性,使软件的设计和开发能更自然地反映事物的实际面貌,实现了软件的重用,使得数字油藏软件的构造和维护变得更加有效和容易,从而大大提高了软件开发的效率和质量。面向对象方法是把对象作为最基本的元素来分析问题、解决问题。其基本出发点是尽可能地按照人类认识世界的方法和思维方式来分析和解决问题。其精髓可概括为两点:①首先不是追求系统的功能,而是划分系统有哪些对象;②把软件看作是结构化的抽象数据类型的集合,抽象数据类型的实现即对象类是构成软件的基本模块。图8-7就是地质统计学方法组件的模拟方法类层次结构,从该图可以看出,所有的地质统计学的插值及模拟算法都从Geostat_algo类派生出来,这样既保证了各种算法的共性与个性,又便于以后开发新的插值及模拟算法。

图8-7 地质统计学插值及模拟算法的对象层次结构

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈