组件和构件是一个概念只是翻译问题,E文都是(Component)
剩下的只有一个问题“模块和组件”
其实模块和组件的是系统粗、细粒度不同复用块;
在概要设计中,模块的划分是其中一个核心内容,这里的模块应该是指功能方面的划分,所以我不认为“模块是源码级”的(相反,我认为模块和源码没关系)
这话是没错,可是你那是设计级别的“功能模块”,不是那段英文的意思。
而且在设计级别是没有组件和构件的。
它们实际上是“功能模块”的几种实现方式。
1、组件,模块:相同:都是基于功能划分的单位。比如说完成网络功能的组件、模块、完成统计功能的组件、模块;这二者没有上下级的包含关系,模块可以由多个组件构建,独立的组件也通常由多个模块实现。不同:组件,偏向发行的概念(outside): 1、强调的是“跨项目的可重用性”这层意思。比如“XXX采集卡通用远程监控组件”,表示这个东东是完成远程监控功能,并且是为了可重用而开发的.这个组件本身由采集卡驱动、网路传输、信号处理等诸多模块共同实现。 2、作为需要被第三方客户使用的独立工具,组件一般都有独立的封装。比如一个组件用符合COM接口规范的DLL发行,某些时候发行库大到包含一系列可执行文件、系统服务。模块,偏向设计的概念(inside): 1、用于在项目中划分相对独立的功能。比如说公司为了开发一套组件,请您设计了几个算法模块;在一些场合,模块本身就要引用多个组件,典型的是远程医学系统中视频会议模块就利用了多种第三方开发的组件。 2、模块更偏重逻辑上区分,封装上可以和其他模块混合,也许发行的时候,把所有模块合并为一个DLL一起发行(客户通常没必要知道你的系统由哪些模块组成)。 2、对象:和上面二者没有并列关系,只是自然事物在计算机上的简化表示的集合,比如描述学生的属性(名字、年龄、成绩等)和维护属性的方法(如对成绩排序等);组件和模块都可以使用面向对象的方法来实现,通过处理一定的对象,完成自身的功能。
早期结构化编程流行的阶段,软件是一个被层层分解的函数,每个函数都被划分成更多,具备平行含义的子函数。整个程序的结构就好像一本分类学书籍,由一个主题目main(),划分成非常多的子标题,子标题下面又分为更小的标题,形成一个树状的结构。
如果我们需要对这样一个程序的某部分代码重用,也就是说抽取其中一部分代码,放到其他程序里面,那么,一般来说都要以“函数”为包装形式,否则,拷贝整段代码的缺点是显而易见的。函数用作来重用代码,天然的有其接口形式:参数与返回值(或者是输入参数与输出参数)。因此,一个函数,就能成为一个封闭的代码块,具备固定的输入和输出接口,我们称之为模块。
然而,当我们在编写“函数模块”的时候,往往会发现,针对同一块数据,往往需要多个函数来一起操作。比如我们操作文件,针对特定的一个文件,我们需要打开、添加、删除、关闭这个文件。如果每个操作都是一个函数,那么我们的输出参数往往都需要一个代表文件的指针;而这个指针,又往往是其他函数的输入参数。——这种做法,实际上是破坏了模块的重用性,因为针对“模块”这个概念,我们设想的是,能简单使用一些输入参数,就能获得操作结果,而不希望还要关心输入参数的状态,以及维护输出参数的状态。由于我们编写的大多数商业系统中,都是针对一些数据进行操作,而不仅仅是进行某些数据的运算,所以数据状态反而成了程序的核心,各种所谓的“模块”,都是为了修改、操作某些特定数据的工具而已。
对象这个概念,对于那些希望把数据+操作构建成模块的情况,是非常合适的。但是,他也有一些缺点。其中有一个非常典型,就是对象模型是一个编程语言的概念,本质上一个对象只是内存中的一堆数据。然而我们要使用的模块,往往不止是内存中的一堆数字就能解决问题的。比如我们需要管理数据库中的一个表,或者操作一个GUI的按钮,又或者控制一个游戏里面的动画角色……这些都不止用内存中的“属性”能满足。
这个时候,人们依托IDE工具,把许多需要复用的复杂数据,和对象模型关联起来,封装成一个个可以根据预先约束的用法去使用的模块,这就是组件了。组件一般会比对象的约束要多,因为每一类组件,都有明确的使用接口,以便能“组合”到某个框架里面。比如JavaBean规范规定,所有这类的组件,必须要以getter/setter的形式对外提供属性的读写。又比如Flex规范中,组件甚至可以仅仅用XML来描述,而不必要是某种程序代码。
因此,我们可以看出,模块、对象、组件之间是有一定的关系,但并不完全等同。一般来说,我们喜欢把任何可重用的代码都成为模块,我们希望模块是简单的、仅仅通过输入输出就能控制的重用代码,所以其含义是最广泛而通用的。可惜现实中能很简单使用的模块并不多,为了能处理复杂的问题,人们开发了很多编程的工具,其中一些为了解决特定问题,比如数据库、GUI、游戏,都强化了一些模块的使用方法,让可重用的代码,能更简单的投入使用,而这些易用性上的好处,都需要付出遵守一定的规范的代价。
转载请注明:片头模版 » 模块与组件(组件和模块的区别)