关于软件复用领域中一些词的定义

程学先

在代码类软件复用领域中有子程序、宏、函数、类、方法、软构件、软部件、组件等等名词,关于它们的定义有许多不同的说法。

一、百度词条或当前各类文献中的定义

1 类

1)类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。类具有更高的抽象性,类中的数据具有隐藏性,类还具有封装性。类的结构(也即类的组成)是用来确定一类对象的行为的,而这些行为是通过类的内部数据结构和相关的操作来确定的。这些行为是通过一种操作接口来描述的(也即平时我们所看到的类的成员函数),使用者只关心的是接口的功能(也就是我们只关心类的各个成员函数的功能),对它是如何实现的并不感兴趣。而操作接口又被称为这类对象向其他对象所提供的服务。类的定义格式一般地分为说明部分和实现部分。说明部分是用来说明该类中的成员,包含数据成员的说明和成员函数的说明。成员函数是用来对数据成员进行操作的,又称为“方法”。实现部分是用来对成员函数的定义。概括说来,说明部分将告诉使用者“干什么”,而实现部分是告诉使用者“怎么干”。

2)类是对一群有共同特征的事物或事件的集合。而类对象就是类的实例化。一个类的所有对象对应同一个类对象。如现实世界中的动物是一种类,植物也是一种类,可以理解人就是动物类的一种对象,草是植物类的一种对象。类对象的生成过程,包括对象的声明、实例化和初始化。实例化一个对象就是通过new运算符为对象分配空间(类属于复合数据类型,在声明对象时,系统并没有为对象分配空间,用户需要应用new完成分配空间的任务)。既可以在声明对象时实例化(创建)对象,也可以先声明对象,然后再创建。

2 软部件

1) 概念或功能相对独立的一个或一组相关模块定义为一个软部件。可重用的软部件有的可以不加修改直接使用,有的需要修改后再用。可重用软部件应具有清晰的结构和注解,应具有正确的编码和较低的时/空开销。各种可重用软部件还可以按照某种规则存放在软部件库中,供软件工程师选用。

2)计算机软件部件CSU(Computer SoftwareComponent)是计算机软件单元(Computer SoftwareUnit)。例如,操作系统是一种控制计算机不同部件运行的软件。

3 软构件

1) 构件(component)是可复用的软件组成成份,可被用来构造其他软件。构件具有相对独立的功能和可复用价值。它可以是被封装的对象类、类树、一些功能模块、软件框架 (framwork)、软件构架(或体系结构Architectural)、文档、分析文件、设计模式 (Pattern)等。构件分为构件类和构件实例,通过给出构件类的参数,生成实例,通过实例的组装和控制来构造相应的应用软件

2)软件成分包括程序代码、测试用例、设计文档、设计过程、需求分析文档、软件构件的可信性研究、甚至领域知识,通常把这种可复用的软件成分称为软件构件,简称软构件或者构件。

3)将现有系统模块封装起来,等到有新的类似需求时可以不必重复开发,可以把事先封装好的系统模块直接组装进去,这样封装的、易于复用的软件称为构件。要达到这一目的就必须进行域分析,以确定软件的体系结构、框架和构件,从而快速实例化出一系列适应性很强的软件产品族(Product Family),在特定领域进行软件复用相对容易取得成功。这是由特定领域本身的相对内聚性和稳定性所决定的。内聚性保证了领域有足够的共性,可以通过分析、抽象这种共性;稳定性保证了领城工程的投资可以获得足够的回报。领城工程就是创建可复用构件的活动,并在领城中寻求共性和变化性,然后将其表示出来,在设计和实现构件时加以利用,来支持新应用系统的建立。

这一定义的典型例如青鸟工程,青鸟领域工程方法是在青鸟工程的研究和开发工作的基础上,吸收当前领域工程的研究和实践活动中的一些成果而形成的。它是一种面向对象的领城工程方法,描述了领域工程中各个阶段的活动和产品,并给出了相应的指南,其中强调了对领域范围的确定、结合设计模式进行领城设计、组织特定领域的可复用构件库等方面的问题。

青鸟领域工程分为三个主要的阶段。即领域分析、领域设计和领城实现。领域分析的主要产品是领域分析模型,它包括领城豁求定义、领城面向对象分析棋型(领城OOA模型)、领城术语字典三个部分。领域设计的主要产品是特定领域的软件体系结构(DSSA), DSSA表示为面向对象设计棋型(OOD模型)。领域实现的主要产品是特定于领城的可复用构件库。在各个阶段的产品之间存在可追踪性。

4)其他定义

(1)1996年ECOOP(European Conference on object--Oriented Programming) 将软件构件定义为:一个具有规范接口和确定的上下文依赖的组装单元,它能够被独立部署或被第三方组装。

(2)美国卡内基。梅隆大学的软件工程研究所的构件定义:“构件是一个不透明的功能实体,能够被第三方组织,且符合一个构件模型”。

(3)Szyperski将构件定义为:可单独生产、获取、部署的二进制单元,它们之间可以相互作用构成一个功能系统。

(4)CMU/SEI把构件定义为:一个不透明的功能实现;能够被第三方组装;还符合一个构件模型。

(5)从编写程序代码这个狭义的角度来描述一个构件:构件是一些二进制代码,它隐藏了内部的实现细节。它们是二进制代码的形式,但都符合一种模型--构件模型,且具有可插拔性。

(6)从使用侧面给出定义:一个软件构件是可执行软件的一个可分离的单元;只能通过构件的接口来访问它的服务;可以与其他构件实现互操作;为了能与其他构件一同工作,必须能得到其接口的细节;该构件的应用需要某种环境的支持。

(7)构件是为了复用目的而针对性开发的软件实体,是一个独立发布的功能部分,可以通过它的接口访问它的服务。它体现了包装、服务、完整性等观点。利用软构件技术开发应用系统,一般是先构筑系统的总体框架,然后构造各个构件,并依次把构件安装到系统中去。大部分应用系统,在功能上有类似之处,因而利用软件的复用技术就可以把开发过程大大简化。在开发之初就应该准备软件构件类集合,如可以搜集一些已经开发出的应用系统的总体设计、规范、局部流程以及某些人机界面、通用功能模块、简化开发工具。采用构件软件不需要重新编译,也不需要源代码并且不局限于某一种编程语言。该过程叫做二进制复用(Binary Reuse),因为它是建立在接口而不是源代码级别的复用之上的。虽然软件构件必须遵守一致的接口,但是它们的内部实现是完全自动的。因此,可以用过程语言和面向对象语言创建构件。

由于构件技术是由基于面向对象技术而发展起来的,与面向对象的设计中的对象相类似,它们都是针对软件复用,都是被封装的代码,但它们之间仍存在很大差异。在纯面向对象的设计中,对象(类)、封装和继承三者缺一不可,但对构件可以没有继承性,只要实现封装即可;从构件和对象的生成方式上,对象生成属于实例化的过程,比较单一,而生成构件的方式较多;构件是设计的概念,与具体编程语言无关,不像对象属于编程中的概念,要依赖于具体的编程语言;在对构件操作时不允许直接操作构件中的数据,数据真正被封装了。而对象的操作通过公共接口部分,这样数据是可能被访问操作的;对象对软件复用是通过继承实现的,构件对软件复用不仅可以通过继承还可以通过组装时的引用来实现。因此,构件不是对象,只是与对象类似。

4、组件

1)组件就是对象。C++ Builder中叫组件,Delphi中叫部件,而在Visual BASIC中叫控件。组件是对数据和方法的简单封装。C++Builder中,一个组件就是一个从TComponent派生出来的特定对象。组件可以有自己的属性和方法。属性是组件数据的简单访问者。方法则是组件的一些简单而可见的功能。

对象管理小组(ObjectManagementGroup,OMG)的“建模语言规范”中将组件定义为:“系统中一种物理的、可代替的部件、它封装了实现并提供了一系列可用的接口。一个组件代表一个系统中实现的物理部分,包括软件代码源代码二进制代码,可执行代码)或者一些类似内容,如脚本或者命令文件。”

自己开发的组件通常有三种类型:复合组件(CompositeControls),扩展组件(Extended Controls),自定义组件(Custom Controls)。

复合组件:将现有的各种组件组合起来,形成一个新的组件,将集中组件的性能集中起来。

扩展组件:在现有组件的组件的基础上派生出一个新的组件,为原有组件增加新的性能或者更改原有组件的控能。

自定义组件:直接从System.作windows.Forms.Control类派生出来。Control类提供组件所需要的所有入门性能,包括键盘和鼠标的事件处理。

组件与构件之间有细致的区别。组件是封装粒度小的构件。C++ Builder中叫组件,Delphi中叫部件,而在Visual BASIC中叫控件。组件是对数据和方法的简单封装。C++ Builder中,一个组件就是一个从TComponent派生出来的特定对象。组件可以有自己的属性和方法。属性是组件数据的简单访问者。方法则是组件的一些简单而可见的功能。使用组件可以实现拖放式编程、快速的属性处理以及真正的面向对象的设计。VCL和CLX组件是C++Builder系统的核心。

2)来自卡耐基梅隆大学的定义:组件是一个不透明的功能实体,能够被第三方组装,且符合一个构件模型。

3)计算机百科全书:组件是软件系统中具有相对独立功能、接口由契约指定、和语境有明显依赖关系、可独立部署、可组装的软件实体。

4)软件构件著作中定义组件是一个组装单元,它具有约定式规范的接口,以及明确的依赖环境。构建可以被独立的部署,由第三方组装。它是对逻辑的封装,不限于图形元素。即我们可以把if做成组件、把一个倒计时做成组件、把一段动画做成组件、把路由做成组件、把数据架构做成组件,而这些并不能称为控件。

组件具备单个可移植性,即“随加载随用”,不需要为其准备复杂的基础条件(如引入样式、引入框架等)。然而这一点现有那些所谓组件库做得并不好,技术上也不大现实

组件是声明式定义的,而非命令式。

组件与传统开发框架的最大区别就是统一了图形元素与非图形元素。在这个概念下,包括router、ajax、module loader、timer、animation、interval等都是组件,共享统一的生命周期管理和对外接口,且都是声明式地进行组合。

5)软件组件开发主要是开发与维护系统构造过程中用到的组件。将软件组件作为一个单独的过程,目的是将组件作为构造软件的“零部件”。随着软件技术的不断发展及软件工程的不断完善,软件组件将会作为一种独立的软件产品出现在市场上,供应用开发人员在构造应用系统时选用。

6)从软件模型的角度考虑,

人们希望把庞大的应用程序分割成为多个模块,每个模块完成独立的功能,模块之间协同工作。这样的模块我们称为组件。这些组件可以进行单独开发、单独编译、单独测试;把所有的组件组合在一起得到了完整的系统。许多人都认为,未来的应用程序都将利用组件实现。一个组件可以实现多个组件接口,而一个特定的组件接口也可以被多个组件来实现。 组件接口必须是能够自我描述的。这意味着组件接口应该不依赖于具体的实现

从以上分析可以看出,以上定义十分繁杂,彼此存在交叉或矛盾,定义不够清晰,对于学习与使用不利。

二、中文字义

从1989辞海缩印本可以查到关于某些词的和上面某些定义有关的解释。

1、类:把相类的事物概括为一类。

2、对象:观察或思考的客体,也指行动的目标。

3、函数:简述如下:当自变量改变时函数有确定的值与之对应。

4、构件:1)机构的组成单元,如滑块机构中的曲柄、连杆、滑块和机架。构件是研究机械运动时经过抽象和概括而形成的概念,它是一个和其相邻构件有相对运动的刚体。2)结构物的组成单元。如梁、柱、板、大型板材等。

5、部件:机器中的一个组成部分,由若干零件装配而成。

6、组:结合、构成。

组装:把零件组合起来构成部件,或把部件与零件组合起来构成器诫或装置。

在2002现代汉语词典中解释构件1)是组成机构的单元,可以是一个零件,也可以是许多零件构成的刚体。2)是组成建筑物某一结构的单元,例如梁、柱。

从这些名词的中文解释可见,组件是一个大的笼统的概念,可以是零件的组合、可以是构件的组合、也可以是部件的组合,涵盖构件与部件;构件也是较为笼统的概念,可以是零件、可以是多个零件、可以是零件与部件的组合,涵盖部件的概念;而部件是比较明确的概念,就是零件组合而成的机器的组成部分。

为适应软件生产工业化等应用的需要,为方便学习与讨论,建议站在程序员角度对这些名词进行统一的定义,要求尽量一词一意,在借用中文词汇时,不妨作适当限定,形成软件复用领域的专用词汇。

三、站在程序员角度进行定义。

1、语句

语句是组成具有一定功能的程序的基本单位,其主要内容由某具体语言的指令和操作数构成,指令说明做什么,操作数说明怎样做并向操作提供所需要的信息。

2、子程序

子程序是能被其他程序调用,在实现某种功能后能自动返回到调用程序去的程序。它由多条语句构成,按固定的格式写成,可在主程序中用指令调用执行,执行时程序指针转移到子程序执行,其最后一条指令一定是返回指令,使能保证重新返回到调用它的程序中去。可约定若干变量传递参数,当参数不同时,子程序的功能及运行结果可不相同。

可以建立子程序库,存放多个子程序,应用时在不同程序中打开子程序库,应用转子语句及子程序名可调用子程序,重复执行其中语句。

3、函数

函数是允许设置固定的参数的子程序,其格式包括函数头与括号括起的参数描述。在定义时的参数称为形式参数,调用时直接用函数名调用,并给出具体参数值,称为实际参数。当实际参数不同时,函数的功能及运行结果可不相同。

可以建立函数库,在不同程序中打开函数库,应用函数名调用并执行函数程序,重复执行其中语句。

4、宏

宏是能被其他程序调用的程序,由多条语句按固定的格式写成,在主程序中调用时宏名相当于指令,在预编译时根据预定义的规则将宏中的语句等内容转换成对应的内容嵌入到主程序调用处,之后在执行程序时可以复用宏中的内容。在宏定义时可以按格式定义形式参数,在调用时以实际参数替代形式参变量,使每次执行的功能、结果不同。

5、方法

类似于子程序,在“类”中定义,调用时用类名或对象名加点加方法名调用。方法可以有自己的参数,可以没有。如果方法有自己的参数(变量),在调用时系统会分配一定的空间给予这些变量,并带入实际参数值,此时的表现与格式与函数相似。

6、类

类是可被复用的程序,由一到多个方法组合而成,在每个类中可以定义多个变量,在运行时会被分配一定的空间。类被集中到类库中保存,在应用时只要打开类库就可复用类的方法与变量,在JAVA语言环境下,类以CLASS文件形式保存,类库实际上是文件夹。

在程序中可以复用类中的方法与变量,复用时采用的一种方法是以类名加方法名调用类的方法,类似于子程序执行过程,其中变量按某约定范围使用。另一种方法是复制类的定义在内存中,用另外的名字命名,称为对象,同时为变量另外分配空间。可以用对象名加点加方法名或对象名加点加变量名进行访问,实现复用,运行结束时释放在内存中所占用的空间。

可以在程序中对类局部进行修改后形成一个子类,所依据的类称为父类。在程序中可以访问新定义的方法与变量,也可访问未被修改的父类中的方法与变量,称为继承。(采用某种方法也能访问在子类中被修改了的原来的父类中的方法与变量。)

7、控件

是一种包括界面设计与实现的特殊的类,是对数据和方法的封装,提供了一系列可用的接口。它可以有自己的属性和方法。属性是控件数据的简单访问者,方法则是控件的一些简单而可见的功能。

8、软部件

软部件将一到多个类及若干语句组合为可执行程序文件,可被应用系统控制器直接调用,成为应用系统组成部分。在编译时部件的全部内容被编译到系统中。在调用时可以定义不同的参数,在编译时根据参数内容选用其中不同的功能并表现出不同的性能,使得同一软部件在使用不同参数被调用时有不同的程序表现。在执行时常被分配一个进程,安排一定空间。

通用软部件可简称为软部件,是实现软件生产工业化、建立软件生产线的基本单位。采用从上而下方式设计,首先对所知的一切实际应用系统进行需求分析,设计不同的但数量有限的软部件程序覆盖全部应用。每个部件程序集成多个功能与多种性能,相当于多道程序,可以通过实际参数值使被编译时实现不同功能、表现不同性能。

软部件可存放到部件库中,部件库实际上只是一个文件夹,在其中存放了多个部件程序文档。

应用软部件技术开发应用系统,可先将部件库中所需要的软部件文件拷贝到系统文件夹中,设计并建立数据模型,选择不同部件,设置必要的参数,构筑系统的控制器,就能全自动地建立应用系统。

可以对软部件文件进行修改,修改后成为完全独立的部件文档,存放到部件库中,与原部件文件不存在逻辑、继承关系,可以与原部件并行地被使用。

9、软构件

软构件将一到多个类及若干语句组合封装为软件实体,是一个独立发布的功能部分,可以通过它的接口访问它的服务。它体现了包装、服务、完整性等观点。利用软构件技术开发应用系统,一般是先构筑系统的总体框架,然后构造各个构件,并依次把构件安装到系统中去, 通过组装时的引用实现复用。

可将领域构件称为软构件。领域构件采用自下而上方式设计,首先对某一领域进行分析,归纳与综合该域中一到多个应用程序设计为一个软构件。

10、组件

组件是不被称为软构件和软部件的将一到多个类及若干语句组合封装而成的软件实体。

四、结束语

以上定义是我们的初步设想,希望广泛接受批评意见并修改后能得到大家认可,并形成最终定义。

时间: 2024-10-19 11:57:50

关于软件复用领域中一些词的定义的相关文章

JetBrains发布DataGrip 1.0——数据库与SQL领域中的瑞士军刀

本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/12/datagrip-released 近日,来自捷克的软件公司JetBrains发布了全新的重量级产品DataGrip 1.0--号称数据库与SQL领域中的瑞士军刀.DataGrip的前身0xDBE已经发布一年多的时间了,这也是JetBrains向广大用户提供的开发版本,每个版本都有一定的使用期限,过期后用户可以从JetBrains网站上下载新的开发版本.经过了长时间的开

数据容灾在数据库容灾领域中的比重及其意义

数据容灾只是确保数据安全的一个方案,当这个方案无法保障数据安全时,需要专业的数据恢复工具对其原有数据或者备份数据进行数据恢复.无论采用哪种容灾方案,数据备份还是最基础的,没有备份的数据,任何容灾都没有现实意义.但光有备份是不够的,容灾也必不可少.容灾对于IT而言,就是提供一个防止各种灾难的计算机信息系统.     数据容灾根据不同时机需求可以有不同的等级.中小企业通常只需采用本地容灾即可.所谓本地容灾就是在企业网络本地所进行的容灾措施,其中包括在本地备份.存储.保管备份媒体.在一些大众型企业,所

进化计算领域中优势个体的选择方法

进化计算领域中优势个体的选择方法 I : 轮盘赌选择  Roulette Wheel Selection 这是一种基于比例的选择.由于随机操作的原因,误差较大,有时即便适应度较高的个体也选择不上 II:   锦标赛选择 Tournament Selection 每次选取几个个体中适应度最高的一个个体遗传到下一代群体中.优点是对个体适应度取正负值无要求,但此方法的随机性更强,存在更大的随机误差,但是有较高概率保证最优个体被选择,最差个体被淘汰. III:随机遍历选择 IV:基于种群交流选择 遗传算

IOS开发中常用的宏定义

有些时候,我们需要将代码简洁化,这样便于读代码.我们可以将一些不变的东东抽取出来,将变化的东西作为参数.定义为宏,这样在写的时候就简单多了. 下面例举了一些常用的宏定义和大家分享: 1. 判断设备的操作系统是不是ios7 #define IOS7 ( [[[UIDevice currentDevice].systemVersion doubleValue] >= 7.0] ) 2. 判断当前设备是不是iPhone5 #define kScreenIphone5 (([[UIScreen main

自动化双臂机械手在自动化生产线领域中的发展

自动化双臂机械手在自动化生产线领域中的发展如何 中国的双臂机械手产业正在迎来高速发展期,从国内冲压机器人的应用来看,汽车.电子工业仍是主要的应用领域.机械手应用规模正在迅速扩大,中国冲压产业化正处于关键的转折点,在国家政策的推动下,国内冲压自动化将跨上一个新的台阶,进入快速发展阶段. 近年来自动冲压机械手是现在企业追求的方向,为了节约人力.降低产品单位成本,越来越多的企业通过改造现有生产方式为自动化生产,或者直接导入自动化生产.冲压自动化生产同样是企业急需导入的策略.本公司自主研发.制造的自动冲

这七种数据分析领域中最为人称道的降维方法

这七种数据分析领域中最为人称道的降维方法 感谢王穆荣的投稿,转自数盟社区 近来由于数据记录和属性规模的急剧增长,大数据处理平台和并行数据分析算法也随之出现.于此同时,这也推动了数据降维处理的应用.实际上,数据量有时过犹不及.有时在数据分析应用中大量的数据反而会产生更坏的性能. 最新的一个例子是采用 2009 KDD Challenge 大数据集来预测客户流失量. 该数据集维度达到 15000 维. 大多数数据挖掘算法都直接对数据逐列处理,在数据数目一大时,导致算法越来越慢.该项目的最重要的就是在

人工智能领域中声源定位的研究与发展------第一章 绪论

1.1 引言 在人工智能领域中,听觉与视觉相比,仍旧处在一个初期阶段的研究课题.随着时代的发展,听觉已经成为人工智能领域中重要的研究课题.它是智能机器人的重要标志之一,也是实现人机交互,与环境交互的重要手段. 在之前机器人的导航主要使用测距传感器(如声纳),而跟踪和定位主要靠视觉.这种形式在视觉场景内被广泛作为定位目标的方式.但是像人和大部分动物那样,视觉场被限制在小于180度的范围内.在真实世界中,听觉能带来360度的"听觉场景".它能定位不在视觉场景内的声音目标,即定位由物体遮挡造

存储系统在视频监控领域中的应用

存储系统在视频监控领域中的应用 作者:Sean Lin 随着平安城市等项目的推动,国内的安防领域近年来得到了快速发展,在过去几年内一直保持每年20%的增长速度.视频监控作为安防的核心部分也随之迅速兴起.相较于传统的模拟监控,数字监控以其高质量的图像.方便的传输和管理在视频监控中的地位正日益凸显,同时,也对视频监控系统的各个环节提出了挑战. 视频监控系统一般可以分为采集.传输.存储显示以及控制系统几部分.随着视频数字化和高清化的趋势,视频数据量突飞猛进,对存储提出了更高要求,主要体现在以下几个方面

只能从脚本中调用在类定义上有[ScriptService]属性的Web服务问题的解决方案

ajax调用webservice中的接口时, 会出现[只能从脚本中调用在类定义上有[ScriptService]属性的...]的异常. 这是因为, 在.net3.5中, 访问web服务, 要对web服务添加修饰: [System.Web.Script.Services.ScriptService]