关于类与对象、软构件、软部件的定义
程学先
在代码类软件复用领域中有子程序、宏、函数、类、方法、软构件、软部件、组件等等名词,关于它们的定义有许多不同的说法。
一、百度词条或当前各类文献中的定义
1类
2软部件
2)计算机软件部件CSU(ComputerSoftwareComponent)是计算机软件单元(ComputerSoftwareUnit)。例如,操作系统是一种控制计算机不同部件运行的软件。
3软构件
2)软件成分包括程序代码、测试用例、设计文档、设计过程、需求分析文档、软件构件的可信性研究、甚至领域知识,通常把这种可复用的软件成分称为软件构件,简称软构件或者构件。
3)将现有系统模块封装起来,等到有新的类似需求时可以不必重复开发,可以把事先封装好的系统模块直接组装进去,这样封装的、易于复用的软件称为构件。要达到这一目的就必须进行域分析,以确定软件的体系结构、框架和构件,从而快速实例化出一系列适应性很强的软件产品族(ProductFamily),在特定领域进行软件复用相对容易取得成功。这是由特定领域本身的相对内聚性和稳定性所决定的。内聚性保证了领域有足够的共性,可以通过分析、抽象这种共性;稳定性保证了领城工程的投资可以获得足够的回报。领城工程就是创建可复用构件的活动,并在领城中寻求共性和变化性,然后将其表示出来,在设计和实现构件时加以利用,来支持新应用系统的建立。
这一定义的典型例如青鸟工程,青鸟领域工程方法是在青鸟工程的研究和开发工作的基础上,吸收当前领域工程的研究和实践活动中的一些成果而形成的。它是一种面向对象的领城工程方法,描述了领域工程中各个阶段的活动和产品,并给出了相应的指南,其中强调了对领域范围的确定、结合设计模式进行领城设计、组织特定领域的可复用构件库等方面的问题。
青鸟领域工程分为三个主要的阶段。即领域分析、领域设计和领城实现。领域分析的主要产品是领域分析模型,它包括领城豁求定义、领城面向对象分析棋型(领城OOA模型)、领城术语字典三个部分。领域设计的主要产品是特定领域的软件体系结构(DSSA),DSSA表示为面向对象设计棋型(OOD模型)。领域实现的主要产品是特定于领城的可复用构件库。在各个阶段的产品之间存在可追踪性。
4)其他定义
(1)1996年ECOOP(EuropeanConferenceonobject--OrientedProgramming)将软件构件定义为:一个具有规范接口和确定的上下文依赖的组装单元,它能够被独立部署或被第三方组装。
(2)美国卡内基。梅隆大学的软件工程研究所的构件定义:“构件是一个不透明的功能实体,能够被第三方组织,且符合一个构件模型”。
(3)Szyperski将构件定义为:可单独生产、获取、部署的二进制单元,它们之间可以相互作用构成一个功能系统。
(4)CMU/SEI把构件定义为:一个不透明的功能实现;能够被第三方组装;还符合一个构件模型。
(5)从编写程序代码这个狭义的角度来描述一个构件:构件是一些二进制代码,它隐藏了内部的实现细节。它们是二进制代码的形式,但都符合一种模型--构件模型,且具有可插拔性。
(6)从使用侧面给出定义:一个软件构件是可执行软件的一个可分离的单元;只能通过构件的接口来访问它的服务;可以与其他构件实现互操作;为了能与其他构件一同工作,必须能得到其接口的细节;该构件的应用需要某种环境的支持。
4、组件
自己开发的组件通常有三种类型:复合组件(CompositeControls),扩展组件(ExtendedControls),自定义组件(CustomControls)。
复合组件:将现有的各种组件组合起来,形成一个新的组件,将集中组件的性能集中起来。
扩展组件:在现有组件的组件的基础上派生出一个新的组件,为原有组件增加新的性能或者更改原有组件的控能。
自定义组件:直接从System.作windows.Forms.Control类派生出来。Control类提供组件所需要的所有入门性能,包括键盘和鼠标的事件处理。
组件与构件之间有细致的区别。组件是封装粒度小的构件。C++Builder中叫组件,Delphi中叫部件,而在VisualBASIC中叫控件。组件是对数据和方法的简单封装。C++Builder中,一个组件就是一个从TComponent派生出来的特定对象。组件可以有自己的属性和方法。属性是组件数据的简单访问者。方法则是组件的一些简单而可见的功能。使用组件可以实现拖放式编程、快速的属性处理以及真正的面向对象的设计。VCL和CLX组件是C++Builder系统的核心。
3)计算机百科全书:组件是软件系统中具有相对独立功能、接口由契约指定、和语境有明显依赖关系、可独立部署、可组装的软件实体。
组件具备单个可移植性,即“随加载随用”,不需要为其准备复杂的基础条件(如引入样式、引入框架等)。然而这一点现有那些所谓组件库做得并不好,技术上也不大现实
6)从软件模型的角度考虑,
人们希望把庞大的应用程序分割成为多个模块,每个模块完成独立的功能,模块之间协同工作。这样的模块我们称为组件。这些组件可以进行单独开发、单独编译、单独测试;把所有的组件组合在一起得到了完整的系统。许多人都认为,未来的应用程序都将利用组件实现。一个组件可以实现多个组件接口,而一个特定的组件接口也可以被多个组件来实现。组件接口必须是能够自我描述的。这意味着组件接口应该不依赖于具体的实现
从以上分析可以看出,以上定义十分繁杂,彼此存在交叉或矛盾,定义不够清晰,对于学习与使用不利。
二、中文字义
从1989辞海缩印本可以查到关于某些词的和上面某些定义有关的解释。
1、类:把相类的事物概括为一类。
2、对象:观察或思考的客体,也指行动的目标。
3、函数:简述如下:当自变量改变时函数有确定的值与之对应。
4、构件:
1)机构的组成单元,如滑块机构中的曲柄、连杆、滑块和机架。构件是研究机械运动时经过抽象和概括而形成的概念,它是一个和其相邻构件有相对运动的刚体。
2)结构物的组成单元。如梁、柱、板、大型板材等。
5、部件:机器中的一个组成部分,由若干零件装配而成。
6、组:结合、构成。
组装:把零件组合起来构成部件,或把部件与零件组合起来构成器诫或装置。
在2002现代汉语词典中解释构件
1)是组成机构的单元,可以是一个零件,也可以是许多零件构成的刚体。
2)是组成建筑物某一结构的单元,例如梁、柱。
从这些名词的中文解释可见,组件是一个大的笼统的概念,可以是零件的组合、可以是构件的组合、也可以是部件的组合,涵盖构件与部件;构件也是较为笼统的概念,可以是零件、可以是多个零件、可以是零件与部件的组合,涵盖部件的概念;而部件是比较明确的概念,就是零件组合而成的机器的组成部分。
为适应软件生产工业化等应用的需要,为方便学习与讨论,建议站在程序员角度对这些名词进行统一的定义,要求尽量一词一意,在借用中文词汇时,不妨作适当限定,形成软件复用领域的专用词汇。
三、站在程序员角度进行定义。
1、语句
语句是组成具有一定功能的程序的基本单位,其主要内容由某具体语言的指令和操作数构成,指令说明做什么,操作数说明怎样做并向操作提供所需要的信息。
2、子程序
子程序是能被其他程序调用,在实现某种功能后能自动返回到调用程序去的程序。它由多条语句构成,按固定的格式写成,可在主程序中用指令调用执行,执行时程序指针转移到子程序执行,其最后一条指令一定是返回指令,使能保证重新返回到调用它的程序中去。可约定若干变量传递参数,当参数不同时,子程序的功能及运行结果可不相同。
可以建立子程序库,存放多个子程序,应用时在不同程序中打开子程序库,应用转子语句及子程序名可调用子程序,重复执行其中语句。
3、函数
函数是允许设置固定的参数的子程序,其格式包括函数头与括号括起的参数描述。在定义时的参数称为形式参数,调用时直接用函数名调用,并给出具体参数值,称为实际参数。当实际参数不同时,函数的功能及运行结果可不相同。
可以建立函数库,在不同程序中打开函数库,应用函数名调用并执行函数程序,重复执行其中语句。
4、宏
宏是能被其他程序调用的程序,由多条语句按固定的格式写成,在主程序中调用时宏名相当于指令,在预编译时根据预定义的规则将宏中的语句等内容转换成对应的内容嵌入到主程序调用处,之后在执行程序时可以复用宏中的内容。在宏定义时可以按格式定义形式参数,在调用时以实际参数替代形式参变量,使每次执行的功能、结果不同。
5、方法
类似于函数,在“类”中定义,调用时用类名或对象名加点加方法名调用。方法可以有自己的参数,可以没有。如果方法有自己的参数(变量),在调用时系统会分配一定的空间给予这些变量,并带入实际参数值,此时的表现与格式与函数相似。
6、类
类是可被复用的程序,由一到多个方法组合而成,在每个类中可以定义多个变量,在运行时会被分配一定的空间。类被集中到类库中保存,在应用时只要打开类库就可复用类的方法与变量。
在程序中可以复用类中的方法与变量,复用时采用的一种方法是以类名加方法名调用类的方法,类似于子程序执行过程,其中变量按某约定范围使用。另一种方法是复制类的定义在内存中,用另外的名字命名,称为对象,同时为变量另外分配空间。可以用对象名加点加方法名或对象名加点加变量名进行访问,实现复用,运行结束时释放在内存中所占用的空间。
可以对类局部进行修改后形成一个子类,所依据的类称为父类,必须在父类存在的情况下才可使用子类。在程序中可以访问子类中新定义的方法与变量,也可访问未被修改的父类中的方法与变量,称为继承。
7、控件
控件是一种包括界面设计与实现的特殊的类,是对数据和方法的封装,提供了一系列可用的接口。它可以有自己的属性和方法。属性是控件数据的简单访问者,方法则是控件的一些简单而可见的功能。
8、软部件
软部件将一到多个类及若干语句组合为可执行程序文件,可被应用系统控制器直接调用,成为应用系统组成部分。在编译时部件的全部内容被编译到系统中。在调用时可以定义不同的参数,在编译时根据参数内容选用其中不同的功能并表现出不同的性能,使得同一软部件在使用不同参数被调用时有不同的程序表现。在执行时常被分配一个进程,安排一定空间。
通用软部件可简称为软部件,是实现软件生产工业化、建立软件生产线的基本单位。采用从上而下方式设计,首先对所知的一切实际应用系统进行需求分析,设计不同的但数量有限的软部件程序覆盖全部应用。每个部件程序集成多个功能与多种性能,相当于多道程序,可以通过实际参数值使被编译时实现不同功能、表现不同性能。
软部件可存放到部件库中,部件库实际上只是一个文件夹,在其中存放了多个部件程序文档。
应用软部件技术开发应用系统,可先将部件库中所需要的软部件文件拷贝到系统文件夹中,设计并建立数据模型,选择不同部件,设置必要的参数,构筑系统的控制器,就能全自动地建立应用系统。
可以对软部件文件进行修改,修改后成为完全独立的部件文档,存放到部件库中,与原部件文件不存在逻辑、继承关系,可以与原部件并行地被使用。
9、软构件
软构件将一到多个类及若干语句组合封装为软件实体,是一个独立发布的功能部分,可以通过它的接口访问它的服务。它体现了包装、服务、完整性等观点。利用软构件技术开发应用系统,一般是先构筑系统的总体框架,然后构造各个构件,并依次把构件安装到系统中去,通过组装时的引用实现复用。
可将领域构件称为软构件。领域构件采用自下而上方式设计,首先对某一领域进行分析,归纳与综合该域中一到多个应用程序设计为一个软构件。
10、组件
组件是不被称为软构件和软部件的将一到多个类及若干语句组合封装而成的软件实体。
四、结束语
以上定义是我们的初步设想,希望广泛接受批评意见并修改后能得到大家认可,并形成最终定义。