西安秦岭自驾游:什么是构件?

来源:百度文库 编辑:神马品牌网 时间:2024/04/28 00:30:31

构件是系统中实际存在的可更换部分,它实现特定的功能,符合一套接口标准并实现一组接口。构件代表系统中的一部分物理实施,包括软件代码(源代码、二进制代码或可执行代码)或其等价物(如脚本或命令文件)。在图中,构件表示为一个带有标签的矩形。在工程实际中,各种机械与结构得到广泛应用。组成机械与结构的零、构件,在工程力学中统称为构件。
构件具有以下几个特点:
(1)自描述:构件必须能够识别其属性、存取方法和事件,这些信息可以使开发环境将第三方软件构件无缝地结合起来;
(2)可定制:允许提供一个典型的图形方式环境,软件构件的属性只能通过控制面板来设置;
(3)可集成:构件必须可以被编程语言直接控制。构件也可以和脚本语言或者与从代码级访问构件的环境连接,这个特点使得软件构件可以在非可视化开发项目中使用;
(4)连接机制:构件必须能产生事件或者具有让程序员从语义上实现相互连接的其他机制。
采用构件软件不需要重新编译,也不需要源代码并且不局限于某一种编程语言。该过程叫做二进制复用(Binary
Reuse),因为它是建立在接口而不是源代码级别的复用之上的。虽然软件构件必须遵守一致的接口,但是它们的内部实现是完全自动的。因此,可以用过程语言和面向对象语言创建构件。
由于构件技术是由基于面向对象技术而发展起来的,与面向对象的设计中的对象相类似,它们都是针对软件复用,都是被封装的代码,但它们之间仍存在很大差异。
差别
(1)在纯面向对象的设计中,对象(类)、封装和继承三者缺一不可,但对构件可以没有继承性,只要实现封装即可;
(2)从构件和对象的生成方式上,对象生成属于实例化的过程,比较单一,而生成构件的方式较多;
(3)构件是设计的概念,与具体编程语言无关,不像对象属于编程中的概念,要依赖于具体的编程语言;
(4)在对构件操作时不允许直接操作构件中的数据,数据真正被封装了。而对象的操作通过公共接口部分,这样数据是可能被访问操作的;
(5)对象对软件复用是通过继承实现的,构件对软件复用不仅可以通过继承还可以通过组装时的引用来实现。
因此,构件不是对象,只是与对象类似。
从力学角度来说,结构是指可以承受一定力的结构形态,它可以抵抗能引起形状和大小改变的力。每种事物都有它的架构形态,这种架构形态体现着它的结构。一个较复杂的结构由许多不同的部分组成,这些组成部分通常成为构件。

要想弄懂CBD(component-based development,基于构件的软件开发)的原理,首先要搞清楚什么是构件(component,也译为组件)。这个问题看起来简单,却是CBD中最难回答的问题之一,因为构件的内涵十分丰富,CBD又处在一个发展阶段,所以出现了许多不很一致的构件定义,也出现许多容易混淆的概念,例如对象、中间件、框架(framework)、构架(Software Archiecture)、子系统(subsystem)、COTS、产品线,下面是一些理论家和实践者们从不同的角度、不同的层次提出对构件看法。

一、构件的描述性定义

(1)著名的Brown和Wallnau描述构件为“一个非平凡的、几乎独立的、可替换的系统组成部分,它在定义完善的体系结构环境中实现某一清晰的功能”(a nontrivial, nearly independent, and replaceable part of a system that fulfils a clear function in the context of a well defined architecture)。同时他们进一步认为软件构件只能是“一个说明了合同并且明显地与语境无关的组合单元”(A unit of composition with contractually specified and explicit context dependencies only”)。

(2)Clemens认为:构件是一个独立部署的的单元,是一个第三方合成的单元,构件没有一致性的状态(A component is a unit of independent deployment .A component is a unit of third-party composition. A component has no persistent state).〔见《构件是什么,不是什么》〕

(3)OMG的定义更通俗、详细一些,在Modeling Language Specification(Revision1.3)写道:构件是一个物理的、可替换的系统组成部分,它包装了实现体且提供了对一组接口的实现方法。构件表示了系统实现体的一个物理片段,包括软件代码(源代码、二进制代码或可执行代码),或者等同体,例如脚本或命令文件。由之,构件自身必须相容于接口且实现接口,接口表示了驻留在构件内的成分所实现的服务。这些服务定义了的一个整合的行为,从一些构件实例提供给其它客户端构件实例。UML里,构件是一个分类器(classifier),是一个建模成分的聚集,它也许实现了接口,有着可执行行为和状态,在执行时驻留在一个节点上。

(4)Gartner Group定义:运行时软件构件是一个可动态绑定的、含一个或多个程序的软件包,它作为一个独立单位,通过运行时可辨别的文档化接口加以管理和存取(A runtime software component is a dynamically bindable package of one or more programs managed as a unit and accessed through documented interfaces that can be discovered at runtime.)。

(5)BertrandMeyer定义了构件的七个条件,

a.也许被其它软件成分使用(客户)。

b.也许客户的使用并不干扰构件的开发者。

c.包括以来的全部说明(硬软件平台、版本、其它构件)。

d.包括它提供功能的精确说明。

e.说明是它的唯一使用依据。

f.可以和其它构件合成。

g.可以快速且平滑地集成到系统。

二、构件的理论模型

理论上,一直没有停止对构件模型的争论,有代表性的理论模型包括:

(1)3C模型

3C模型是学术界普遍认同的一个具有指导性作用的构件模型。该模型从概念(concept)、内容(content)和语境(context)三个不同方面来描述构件。

*概念 关于“构件做什么”的抽象描述,可以通过概念去理解构件的功能。概念包括接口规约和语义描述两个部分;

*内容 概念的具体实现,描述构件如何完成概念所刻划的功能;

*语境 构件和外围环境在概念级和内容级的关系。语境刻划构件的应用环境,为构件的选用和适应性修改提供指导。

(2)REBOOT模型(刻面模型)

REBOOT模型是基于已有软构件的一种刻面分类和检索模型,从各个角度,即刻面(Facet)刻画软构件属性。

(3)青鸟模型

北京大学青鸟工程以三个视角(形态、层次和表示)和九个方面定义构件模型。

(1) 概念 :对构件功能的抽象描述。

(2) 操作规约:用来指称构件对外提供的、可被请求的服务。

(3) 接口:给出了构件的对外行为描述。

(4) 类型:用于定义“什么值可用作为操作参数”。

(5) 实现体:这是构件的具体实现部分,是实际完成被请求服务的系统。

(6) 构件复合:构件通过复合组成系统。

(7) 构件性质:指明构件的形态、层次和表示。

(8) 构件注释:描述和构件库相关的其他性质。

(9) 构件语景:描述构件的软、硬件使用环境和实现依赖。

青鸟构件模型更多地关心构件的易理解性、封装性及间关系,通过给构件提供明确的对外接口实现服务提供者和其服务请求者的分离,更多地关心构件及其使用者间的交互,特别是对构件使用者有意义的部分。