You are on page 1of 4

第35卷 第5期 计算机研究与发展 V o l135, N o 15

1998年5月 COM PU T ER R ESEA RCH & D EV ELO PM EN T M ay 1998

基于构件的软件设计模型

贺 岚 狄玉来3
( 中央民族大学计算机系 北京 100081)
3 ( 北方交通大学计算机科学技术系 北京 100044)

摘 要 构件式软件设计是从根本上实施软件复用的重要途径. 文中结合层次的面向对象设计结
构, 讨论了类属构件 GRC 的模型, 该模型的建立从几方面反映了可复用构件的类属性和应用环境.
论文就类属构件提出了用于软件设计的机制和例化过程.

关键词 类属, 构件, 面向对象

中图法分类号 T P 31115

A COM PO NENT- BASED SO FTW ARE D ES IGN M OD EL


3
H e L an and D i Yu la i
(D ep a rtm en t of C om p u ter S cience , C en tra l U n iversity f or N a tiona lities , B eij ing 100081)
3 (D ep a rtm en t of C om p u ter S cience and T echnology , N orthern J iaotong U n iversity , B eij ing 100044)

Abstract  T he com ponen t fo rm of softw a re design is an im po rtan t w ay in softw a re reu se. H ere
d iscu ssed is a m odel of generic reu se com ponen t w ith h iera rch ica l ob ject 2o rien ted design a rch itec2
tu re. T h is m odel reflects genericity of GRC and its app lica tion environm en t. T he m echan ism of
softw a re design and the p rocess of in stan tia tion w ith GRC is a lso d iscu ssed.

Key words genericity, com ponen t, ob ject 2o rien ta tion

Cla ss num ber T P31115

1 引  言

软件复用技术虽然已走过近30年的历程, 但至今还没有实质性的突破, 其主要原因在于可复用成分还没


有足够的抽象性. 表现在其规模、适用范围和易用性等方面都有很强的约束要求. 在代码复用方面, 只有数学
函数库应用最为成功, 数学函数由于能够采用一字检索的抽象规范形式, 因此在专有领域卓有成效, 但在通
用领域收效甚微. 随着软件复用研究的深入, 复用成分的形式已经从代码扩展到一切可用来构造软件系统的
成分, 包括软件开发方法、需求规格说明、源程序代码与模块或其抽象结构、开发工具与支撑环境、测试和维
护信息等. 实现如此复杂成分的复用, 笔者认为, 在一类问题上, 对组成系统的软件构件的抽象结构的复用是
有效的途径之一. 本文拟从软件复用出发, 讨论一个支持复用式软件设计的构件模型, 并基于该模型提出实
现构件式软件设计的机制 [1—3 ].

  原稿收到日期: 1996209215; 修改稿收到日期: 1997207219. 贺岚, 讲师, 硕士, 主要从事软件工程的教学和科研工作. 狄


玉来, 教授, 主要研究领域: 多值逻辑、计算机安全与保密、软件工程.

© 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
452 计算机研究与发展 1998年

2 建立 GRC 构件模型

面向对象的设计范式采用建模的观点, 保留了明显的独立结构, 人们通过把问题域作为一系列相互作用


的实体, 基于软件模型以及模型间的关系, 实体可以构造出应用程序的基本结构. 这样, 在分析阶段开发的信
息就成为设计阶段的一个主要部分. 这种极其自然的过渡是利用了构件的一致性. 我们所建立的构件是借助
于层次 OO 设计 HOOD (h iera rch ica l ob ject o rien ted design ) 的体系结构之上的, 其结构如图1所示. HOOD 中
的可复用构件 RC 是经过验证、充分开发、有类属可能, 并且能够集成到待开发软件产品中的软件构件. 要使
RC 能满足 OO 设计的要求, 它的结构必须反映已实现的对象的抽象特性. 因为对象本身已经封装了某些作
为参数的类属特性. 因此, 构件的类属化是进行构件抽象的有效途径. 所谓类属构件 GRC ( generic reu sab le
com ponen t ) 是部分地定义了的 RC, 对象的行为依赖于某些未定义部分的行为. 用于 OO 设计的 RC 实际是
GRC 的一个实例, 这样, 在设计层的上面还要有一个抽象层, 使
派生出的不同构件适应不同的设计要求. 我们把 RC 所代表问题
的定义的有关文档 ( 如需求分析、系统规格描述…) 以及构件抽象
行为的形式化描述集中在一起, 形成一个构件模型描述层 (com 2
ponen ts m odel descrip tion, 简称 CM D ) , 如图1 所示 ( 描述语言的
选择本文不作探讨). 同一个 CM D 可以派生出若干不同的 RC 用
于不同的 OO 设计, 其中每一种设计都是问题的一个可能的解,
这样描述的构件更加面向问题而不是面向实现, 且易于识别其潜
在的复用性. 类属描述与 OO 设计中的类的概念很相似, 所以
图 1 GRC 不仅可以与 OO 设计的对象类同步建立, 更重要的意义在
于, 将类属概念引入构件, 可以支持软件开发的主动复用, 这是长
期以来影响软件复用效果的主要问题. 在图 1 的层次结构中, RC 的类属特性主要集中在 CM D 层和设计层
(a rch itectu ra l design, 简称 AD ) , 我们从以下几方面讨论 RC 的类属特性.
211 GRC 的类属性
CM D 层的类属性是指 CM D 所标识的不仅是一个问题, 而是问题的一个空间. GRC 的 CM D 从两个方
面表达构件的类属性:
① 参数声明, 把实体的标识符与其可能的约束一起看成参数列表.
② 构件体描述, 即, 构件的语义描述, ①中的参数必然要出现在该语义描述中.
这种结构表达了设计域上很宽的频谱, 以支持多种描述语言的选择. 在设计层上, 每一个设计都有一个
实现与之对应, 该实现是属于 GRC 中 CM D 所属问题“空间”的, 并由 HOOD 的类的参数机制部分地实现的
( 这与 A da 的类属概念类似).
212 定义 TBR 对象
我们在 HOOD 结构中定义一个未精化的对象来提供类属性, 即, 在语义上提供的服务只是部分定义了
的, 使引用它的对象就描述项而言是类属的, 这就是 TBR ( to be refined ob jects) 对象. 一个 TBR 对象就像层
次 HOOD 结构中的形式化参数, 其规格描述起着对具体实体约束的作用. 显然, 它不包括任何精化的内容,
只描述要提供的和需要的接口以及实现上的约束.
利用 TBR 对象使该对象成为类属的, 在 HOOD 设计中用满足 TBR 对象约束的实际对象代替时, 就可
以产生一个实际的设计实例. 但是, 用 TBR 对象进行 HOOD 设计只是一个元2HOOD 结构 ( 即体系结构模
板) , 这种结构需要相应的工具进行管理, 使产生的 HOOD 设计能进入复用者的开发环境中.
213 外部对象 ( externa l objects)
一个 GRC 除了类属特性外, 还有一点很重要, 就是构件被复用时与其它模块组装的有关特性, 该特性与
外部对象有关, 也与 TBR 对象有关.
© 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
5期 贺 岚等: 基于构件的软件设计模型 453

外部对象与 TBR 对象有相同的特性, 其接口只描述实际对象必须提供的操作. 从设计的观点看, 外部对


象就是被 GRC 设计中根对象所用的 TBR 对象. RC 提供者可以设想构件复用者把外部对象作为与开发环
境中对象交互的伙伴, 不管复用者何时引入构件, 其外部对象必须用复用者设计中的实际对象去替换.
214 设计参数的作用
TBR 对象和外部对象实际上是 HOOD 中的形式化参数, 根据这两种对象的 GRC 类属语义, 它们所起
的作用也不同:
( 1) 体系结构参数 (a rch itectu ra l p a ram eters)
对象包含了一个基本完整的规格描述, 或在设计中有着特殊的作用, 二者任何相符的实例化都不受外部
行为的影响, 即提供的设计层根对象的界面语义不受它们的实例化影响. 体系结构参数的作用是对同一个事
件进行不同的实现, 即从体系结构的观点出发, 把设计参数化.
( 2) 语义参数 ( sem an tic p a ram eters)
对象包含的是不完全描述的语义, 在实例化时语
义要受不同的设计选择的影响. 即提供的构件的界面
语义受 TBR 对象实例化的变化的影响. 也就是说 GRC
的语义是参数的, 并且代表了不同的需求的类.
215 参数可跟踪性
类属性是由规格描述层和设计层共同表达的, 因
此要考虑两层之间参数的通信, 每一个 CM D 参数都与
一个设计语义参数集相关, 这种关系称作参数追踪性
( p a ram eter traceab ility). 提供可追踪性使复用者能够
理解一个 CM D 参数怎样用于某个设计的实现. 由于一
个 GRC 有几种不同的设计, 所以它们之间有不同的关 图 2
系. 文本的或可能的形式化信息 ( 如: 参数映射到何处,
其语义是什么等) , 都可以在参数层之间的每条链上进行追踪. 如图2所示.

3 GRC 的例化过程

部分例化机制可以用来从已有 GRC 获取新的 GRC, 并提供一系列面向提供者的复用. 构件的提供者


将已有 GRC 的部分例化看作适于复用的抽象, 因此, 不必从边界重新实现, 而是例化其参数子集就可以产生
新的 GRC. 对 GRC 的部分实例建立树结构, 可以在 CM D 和 AD 层提取构件信息, 有利于构件的理解和有效
的存储, 这是因为, 在可复用构件库中, 共同的概念和体系结构的选择是不会重复的. 例化关系还提供了在构
件库中用于复原操作 ( retrieva l op era tion ) 的分类模
式, 通过例化关系进行导航 ( naviga ting ) , 使构件复原
操作更加有效灵活.
由于 GRC 的这种两层结构, 例化关系既存在于规
格描述层, 也存在于不同的体系结构的设计中. 在上述
CM D 例化之后, 必然是其设计的例化, 即, 一旦一个新
的 CM D 被一个部分例化所包含, 就有可能从部分例
化的边界对它进行设计. 因此被部分例化的 CM D 可
以有两种设计: ① 导出的设计, 即通过对原设计的部
分参数例化而得到; ② 基本设计, 即从边界开始的设
计. 描述层与设计层的关系是, 当 CM D 之间存在例化
图 3
关系时, 其设计之间也存在相应的例化关系. 如图 3
© 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
454 计算机研究与发展 1998年

所示.
图 3 是一个例化关系实例. CM D 1 是存于构件模型库中的“汽车配件订货”的 CM D , 因此可以例化出“建
材订货”
的 CM D 即 CM D 2、
“家电零配件订货”
的 CM D 即 CM D 3 和“通信器材订货”的 CM D 即 CM D 4. 显然
这类问题的订货业务是类似的, 因而可以复用已有的设计. 从图中可以看出 CM D 2 的 D 1′
和 D 2′
, CM D 3 的
D 3′
以及 CM D 4的 D 3″
分别例化了 CM D 1的设计 D 1, D 2和 D 3, 而 CM D 3和 CM D 4同时也含有基本设计 D 4, D 5
和 D 6.

4 从 GRC 获得 HOOD 设计的机制

类属特性有很好的复用性, 它允许把模块之间的共同特征放在一处即类属模块之中. 但是上节的


HOOD 只有两种模块层次, 类属模块或者完全实例化的模块, 捕获不到模块之间较细小的共同特征, 因而也
不能描述较复杂的模块层次. 然而, 一个 GRC 比另一个更易进行规格描述, 意味着前者已经被后者的参数子
集例化关系 ( in stance of rela tion sh ip ) 所包含. 所以通过对 GRC 的部分参数进行规格描述, 能够得到灵活易
用 的复用模块. 构件库中的每一个 GRC 可以处于与更通用的 ( 父) 构件或更易规格化的 ( 子) 构件的关系之
中.
当复用者浏览类库时, 发现一个可能有用的可复用构件, 就选择该构件的 GRC, 对它进行实例化, 步骤
如下:
第一步, 实例化规格. GRC 的形式参数用实际规格描述所取代, 这样就定义了实际问题, 但还没有具体
实现.
第二步, 选择设计. 选择 GRC 的设计取决于复用者对体系结构的要求.
第三步, 选择实现. 所选择的实现必须与所选择的设计相关.
第四步, 为语义参数定义实际参数规格 ( actua l ob ject sp ecifica tion 即 AO S ). 这是例化中关键的一步. 复
用者必须定义实际对象的规格描述, 即 AO S, 这个实际对象的设计参数将被 AO S 替换. 这样的定义必须考
虑第一步所给出的实例规格, 也就是说实例的规格必须由实际参数规格定义, 因此, 就可以在实例化过程中
产生它的设计. GRC 的抽象参数与具有语义参数的设计对象之间的可追踪性, 在设计中自行生成文档, 复用
者可以检验实例的正确性. 从概念上讲, 设计和实现两者的实际对象参数 (AO S ) 都可以在不需了解 GRC 设
计体系结构细节的情况下被替换.
第五步, 为体系结构参数选择可能的实现. 由于 GRC 结构允许一个体系结构参数有几个实现存储于构
件库中, 用户可以选择其中一个, 而不是推迟到构件组装的后期.

5 结束语

本文论述了一个从 GRC 获得 HOOD 设计的方法, 此方法从 GRC 模型出发, 覆盖了从构件规格描述开


始直至实现步的各开发阶段, 提供了从软件生存周期早期实施软件复用的重要途径, 特别是从设计步开始是
解决软件复用的最佳框架结构选择, 然而, 这也是建立在多层次软件复用环境工具的支持基础之上的.

参 考 文 献

1 贺岚1基于面向对象的软件可复用构件技术研究 [ 硕士论文 ] 1北方交通大学, 北京, 1996


2  D e A n tonellis V et a l. A con structive app roach to reu se of concep tual com ponen ts. In: P roc A dvances in Softw are
R eu se. L o s A lam ito s, Califo rn ia: IEEE Com p u ter Society P ress, 1993. 19—28
3  D ’A lessand ro M et a l. T he generic reu sab le com ponen t: A n app roach to reu se h ierarch ical OO design s. In: P roc A d 2
vances in Softw are R eu se. L o s A lam ito s, Califo rn ia: IEEE Com p u ter Society P ress, 1993. 39—46

© 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.

You might also like