⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lc_bcb_49.txt

📁 c++ builder 的一些txt文档
💻 TXT
📖 第 1 页 / 共 2 页
字号:

构件对象模型概览
构件对象模型概览 
傅贵 
 构件技术的产生背景
  
    
计算机软硬件技术特别是网络技术的飞速发展使得人们可以建造功能更强大、结构更复杂的应用。这样的一个结果是在应用系统中硬件越来越“瘦小”,而软件越来越“肥大”。 
    
  
  
    由于一个应用常常需要异种的计算机硬件平台及其相连的操作系统平台并且其功能常常需要不断的扩展,大的应用软件常常需要有跨越多个异种平台的能力并且有开放的系统结构。此外,为了提高开发速度和节省开发费用,需要最大限度地重用以有代码。因此,当今的应用软件普遍需要有良好的平台兼容性(互操作性)、结构开放性、规模可变性(可扩展性)及代码重用能力等。 
    
    另一方面,在传统的系统开发技术下,庞大的软件使得开发越来越难、开发周期越来越长、维护费用越来越高并且功能的扩展危险而难行。应用系统严重依赖于操作系统和特定的网络服务因而开放性很差。开发者为每种不同的应用环境(本地应用、网络应用、不同操作平台的应用)开发不同的代码。如为解决这些问题,国际上成立了许多标准化组织来对系统和处理方式加以标准化,但这只是增强软件可操作性和重用性的一种权宜之计,并不能彻底解决问题。在这种情况下,出现了具有互操作能力和可重用能力的构件对象设计模式和具有分散和联合处理能力的开放分布式处理系统。 
    
    构件技术与构件对象模型基本概念 
    
      概述 
    
  
组合软件模型是新一代软件技术发展的标志,它的提出很自然,为了提高软件生产力、不草率地开发应用程序、设计开发人员应尽可能地利用可重用的软件构件、组装构造新的应用软件系统。追根求源,由软件模块构件组织合成软件的思想早在70年代就已提出了,函数就是一种构件,函数通过参数来适应不同应用需求的变化,Ada语言的模块package就是一种构件,实现了内部细节掩藏,模块通过接口规范说明进行连接和组装,package还提供了类属机制,使模块通过类属参数,适应不同应用需求的变化。但是,传统软件系统结构的局限性,以过程为中心设计的功能模块,其扩充和复用的能力都较差,对模块进行应用重组的困难很多。从80年代开始的面向对象技术的研究,使组合软件又萌发出新的生命力。面向对象的软件,以数据为中心设计,对象类既具有模块的封装性和类属等特性,还具有继承特性,极大地提高了类的可扩充性和可再用能力。对象类较之于传统软件的功能模块而另具有的主要优点是: 
  易于理解,具有完整的语义特征; 
    
  易于重用,可方便地被使用到不同的应用中; 
    
  良好的封装性和独立性,相互之间的影响小; 
    
  易于扩充和修改,一个对象类的修改不影响其他的对象; 
    
  易于构造组装,具有规范的外部接口。 
    
最早大量使用面向对象技术的是OO(面向对象)的编程语言,它具有上述前三个优点。但OO中的对象是源代码级的,它没有也不能统一对象间相互作用的工作机制。这意味着它不能克服以下的缺点: 
  在OO中只有能提供源代码的对象/类才可被重用, 
    即它的代码可重用性不能跨越编程语言的限制。因此这对实际应用环境来说是一个十分苛刻的要求,使开发人员只能利用丰富的软件资源中很少的一部分,并且难以挣脱开发商的束缚。 
    
  兼容性限制到代码级的事实意味着OOP不能解决极其重要的软件修改和升级问题。当一个对象被更新或替换时,即使它对外的接口没有被改变,任何使用了该对象的代码也都需要被重新编译,与此相关的应用程序必须被重新生成并重新发行所有相关的地点。这不仅费时、费钱且容易导致版本交叉的混乱。 
    
  由于对象没有标准的对外接口,不能使用组装技术来生成应用程序。 
    
与OO编程语言不同,构件技术是一种更高层次的对象技术:它是独立于语言和面向应用程序的, 它只规定构件的外在表现形式,而不关心其内部实现方法;它既可用OO编程语言实现,也可用非OO的过程语言实现。只要遵循构件技术的规范, 各个软件开发商就可以用自己方便的语言去实现可被重用的构件, 
应用程序的开发人员就有可能实现在计算机硬件领域早已实现的梦想:挑选构件、组合新的应用软件。 
构件模型由构件(Component)与容器(Container)两种主要成份构成。所谓构件是指具有某种些功能的独立软件单元,是一种软件“IC”,它的最重要的特性是可重用性。,构件的范围相当广泛,小的构件有像按钮之类的GUI元素,中等规模的有如具有列表功能的小应用程序(如Applet), 而大的构件可以是浏览器这样的完整的应用系统。构件通过其接口向外界提供功能入口。接口是构件内一组功能的集合,它包含的是功能函数的入口,类似于C++中只有虚函数成员的纯虚类。外界通过接口引用或接口指针来调用构件内的功能函数。容器类似于装配车间,是一种存放相关构件的"器皿",用于安排构件、实现构件间的交互,其形式也是多种多样的,如表格(Form)、页面(Page)、框架(Frame)、外壳(Shell)等。另外,容器也可以作为另一个容器的构件。 
推动构件技术发展的最大动力之一是软件重用。软件重用就是利用已有的软件成分来构造新的软件,它可以减少软件开发所需的费用和时间,且有利用提高软件的可维护性和可靠性。构件软件是目前发展最快的软件重用方式。构件软件解决两个重要问题: 
一是重用,即构件具有通用的特性,所提供的功能能为多种系统使用; 二是互操作,即不同来源的构件能相互协调、通信,共同完成更复杂的功能。 
构件软件技术是一种社会化的软件开发方法, 
它使得开发者可将由不同语言、不同供应商开发的构件组合在一起来构造软件。构件软件和Internet一起被列为目前软件产业两个最重要的增长点, 受到了业界的高度重视。许多大公司都先后开发出了已被广泛使用的构件,如Microsoft的VBX、OCX及ActiveX控件,Borland公司的Delphi中数据访问构件等。软件构件的迅速发展使得基本构件装配应用开发模型成为一种深入到软业界的新的应用开发模式与开发环境。 
  
    
      对象和接口 
        
    
  
  
    
      在构件对象模型中,对象是一种功能单元,是一种构件。它既可指对象类又可指对象类的实例。但此处的对象类与OOP中的对象类又有很大的不同:它有自己唯一的标识号(如COM/DCOM中的CLSID)。对象常常以独立的DLL或EXE的形式存在,对象之间只能通过标准的接口调用来相互作用。 
        
        接口是对象中功能相关的一组函数的入口,它类似于C++中只有纯虚成员函数的抽象基类,它的指针或引用指向一接口函数表,该函数表包含着接口的功能函数的入口。如下图所示: 
        
         
        接口为构件对象模型提供对象间互操作能力。接口的定义也是面向对象或基于对象的,它具有继承能力、封装性及多态性等OO特性。 
        对象和接口都有自己唯一的标识。系统通过这两个标识来寻找、识别不同的对象及其接口。对象表示必须在系统中进行登记。接口调用由调用者在调用时显式地给出,而对象标识则在程序中常常有一个名字映射,调用者在调用对象的接口时给出该对象的名字,系统根据对象登记表索引找到该对象。 
        
      
      接口定义语言(IDL) 
      
    
  
接口通常都具有自己的定义语言(Interface Definition 
Language,简称IDL)。接口定义语言只是为了接口设计的方便而采用的,它可使设计者容易读懂彼此的接口设计。IDL编辑器编译IDL代码,生成相应编程语言的头文件及客户代理和服务器代理对象。对象及其接口的描述都在IDL头文件中描述。 
  
  
    分布式构件对象模型 
      
        构件的分布式处理系统模型 
          
      
    
  
  
    
        全球性网络使线上的所有设备和软件成为全球共享的浩瀚的资源,计算机环境也从集中式发展到分布式环境,开放式系统的发展使用户能够透明地应用由不同厂商制造的不同机型不同平台所组成的异构型计算资源,因此,分布式处理和应用集成自然而然地成为人们的共同要求。 
          
          构件对象模式下的分布式处理是指借助计算机网络将分布在不同地点的构件(即对象)组织在一起,进行信息处理的一种方式。分布式处理中的构件可能由不同的厂商开发、生产,因而构件之间可能存在不一致的接口;另外,构件之间的通信也可能使用不同的协议,有延迟和失败的可能。国际上将这种兼容异质成分的分布式处理,称为开放分布式处理(ODP──Open 
          Distributed Processing)。 
          概括地讲,开放分布式处理要达到以下几个方面的透明性: 
          (1)存取透明: 
          隐藏数据表示和调用机制的异同,使用同样的方式存取数据。 
          
          (2)失败透明: 
          将出错和恢复事件隐藏在对象内部,以达到容错的目的。 
          (3)位置透明: 
          隐藏接口的空间位置,用户不需关心接口是哪里提供的。 
          
          (4)迁移透明: 
          外界不需要知道系统为使资源均衡而改变对象的位置。 
          
          (5)持久性透明: 
          对象里隐藏着所用资源的变化,如处理器资源、存贮资源的冻结与解冻。 
          
          (6)重定位透明: 
          改变一个接口的位置不影响与之编联的其它接口。 
          
          (7)复制透明: 
          为提高性能,能同时有多个行为相同的对象支持某一接口, 
          而用户不需要知道有多个对象存在。 
          (8)提交透明: 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -