《软件开发专业名词解释》由会员分享,可在线阅读,更多相关《软件开发专业名词解释(12页珍藏版)》请在金锄头文库上搜索。
1、“Win32 编程编程”很不幸,我从开始学习编程到理解这个名词中间隔了很长的时间(上个世纪的学习环境可见一斑) 。很长时间里我都不明白 32是指什么,我用过 Dos, Win31,win95,win97.但好像没用过名为 Win32 的操作系统啊?很久以后我才知道,32 在这里并不是指操作系统的版本号,而是指 32 位。微软操作系统在 win31 及其以前都是 DOS 系统,windows 只是在 dos 下运行的一个大程序而已。在其后 win95 则稍有改变,windows 除了 DOS 核心以外也真正成为了操作系统的一部分,提供着各类操作系统提供的服务。应该说,在 win95 之后的 wi
2、ndows(新近的 64 位 win 系统以 前)都可以称之为 win32 系统平台(95/98 实际上是 16 与 32 位混合)。所以在这样的平台上,直接或间接使用系统提供的 API 编程,就称之为 Win32 编程。对 Visual Studio 而言,Win32 编程一般指 SDK、MFC、ATL 这几类开发方法,其中 ATL 在国内应用不是很广泛,一般 应用于以 COM 组件为架构的中大型软件产品。“SDK“ :Software Development Kit,常译为软件开发(工具)包常译为软件开发(工具)包在 Win32 编程领域一般指与 MFC 这类框架编程相区别的,直接调用 W
3、indows 提供的 API 的开发方式,与字面原意有一些区别。另外一个经常见到 的说法就是某软件(硬件)带有自己的一套 SDK,这里其实一般是指一套 API 库函数或者类库,供上一层的开发者调用。又譬如常说的 DX 的 SDK,其实是微 软开发的一套 COM 组件,供上层开发者使用。总之,供程序员使用的比较完备的代码库,就可以称之为 SDK;“MFC”: Microsoft Fundation classes 微软基础类库微软基础类库大家都知道,使用 SDK 编程方式往往有很多每次都重复的固定不变的一些代码,为了提高编程的效率,减少上千个 API 带给开发人员巨大的精神压力,微软 开发出了这
4、么一个类库,注意,这个类库与操作系统本身无任何关系,它只是对 API 进行了一个面向对象的封装,当然,还给出了一系列编程的框架。使用 SDK 的方法,使用 Visual Studio,通过调用Windows API,MFC 你也可以做得出来。MFC 把一些固定不变的代码已经写好了,只在编译时 候链上,所以我们的代码里看不到 WinMain(),而事实上整个程序的运行,和 SDK 的方式无任何区别,初学者请记住这一点。另,补充一点个人感想, MFC 的初衷,带给开发人员更多的便利,我觉得并不太成功。学习 MFC 所费的力气和最终的所得,并不太成正比。“API“:Application Progr
5、amming Interface,应用程序接口,应用程序接口这个词的出现频率很高,从某种意义上来说,也可以看作是 SDK 的一个子集。这也是做给程序员的程序,不过一般指用导出函数的方式提供服务的函数库,不包括类库和组件。“GDI”:Graphic Device Interface,图形设备接口,图形设备接口这个是 Win32 程序下最常用的显示方式,与 DirectX、OpenGL 处于同一级。在 DOS 要显示一些东东可不是容易的事,最简单的是调用一些 C 的图形库函数来实现显示,不过一般也就是些画线,填色,输出几个文字,效果很弱(所以 DOS 程序界面一般都不怎么样,且实现起来不是一般的复
6、杂) ,要复杂 一点的动画/图片显示什么的,经常要用到的就是硬件中断,调用一些显卡自身的子程序(固化在显卡内的)来做。因为每一个显卡都不同,所以 DOS 的游戏兼容 常常由于显卡的差异而很糟糕。到 Windows 下大家就幸福多了,Windows 将硬件这一层屏蔽起来,用一个表格(Device Context)来代 表一个显示,我们要做的就是在这个表格上填好相关参数,然后画上我们想画的东东,然后操作系统会依照这个表格(DC) ,把相应的显示内容(一般是一块显示 内存)传送到指定显卡的指定的显存,再由显卡传给显示屏。我们不再需要与不同的显卡打交通,这是一个十分伟大的胜利!GDI 中最常用的是双缓
7、存技术,就是 说你可以在内存中创建(也就是复制)一个 DC,只不过在这个 DC 中显示的不再被传送到显示器上。有什么用呢?因为它的各参数是与当前屏幕 DC 一致的 (COPY 嘛 ,当然是这个结果) ,所以它的显示内容可以完整无失真地传送到屏幕 DC 上。我们通常在内存 DC 上画图,譬如画一圆,再画一条直线,画完后一 次性地传送到屏幕 DC 上,这样对用户来说屏幕只刷新了一次,可以解决你画一点内容屏幕即刷新一次导致的闪烁问题。当然,双缓冲甚至多缓冲还有很多别的用 处,那就要靠自己揣摩了。“DirectX“ 通常简称为 DX(读音:低叉)这是个很吸引人眼球的名词,读起来就很上口:) 。Wind
8、ows 为我们作了许多屏蔽底层硬件的工作,其中 DX 是最知名的 技术之一。操作系统要与各类硬件打交道,特别是多媒体相关的,譬如显卡、声卡、手柄输入、多媒体流的网络传输等等,这些事情如果都自己来弄的话,那就太要 命了(这些一般都涉及系统底层,自己也很难做出来) 。而 DX 则正是这么一套操作系统提供的隔离多媒体硬件与程序员的间质,DX 自身一般并不实现处理的能 力,它是一个标准,要求硬件来满足,好比 DX 提供一个函数名,硬件来实现函数内容一样。通过它我们可以非常简单而快速地调用硬件提供的各类服务。它主要包 括 DirectDraw(通过直接访问显示硬件来提供快速的图象处理能力),Direct
9、Sound(提供了软硬件的低延迟声音混频和回放,以及直接访问 音频设备的能力),DirectPlay (它明确的提供了通用环境连接能力来简化你应用程序之间的通讯服务),Direct3D(DirectDraw 的 3D 版) ,DirectInput(简化你的应用程序访问鼠标、键盘和操纵杆设备的能力) ,DX5.0 之后又增加了一些(如 DirectShow),不 再详述。DX 一个重要的特点就是你可以通过它直接访问硬件而无需知道硬件的具体细节。譬如 DirectDraw,就能够越过内存而直接访问显存,这样的速 度将比 GDI 快很多,不在一个数量级上。补充一点:DX 是以组件的方式提供的,而不
10、是通常的导出 API 的形式。DX SDK 的最新版本是 9.0“COM”:component object model,组件对象模型,一般简称组件。,组件对象模型,一般简称组件。这是微软为了解决代码重用的一个重要机制。重用代码的最简单办法是源代码重用,把写好的函数和类加到自己当前的代码中,编译即可。简单是简单,敝病却 显然的多。另一个常用的方法是单独做成模块,以 DLL 的形式分发,DLL 导出函数或者类,客户程序用动态/静态链接的方法将其加载,这显然比前一种源代码 的方法好一些,难度也不大,最为常用。但 DLL 也有一些不足,最根本的,它不是二进制兼容,DLL 版本升级一次就需要与客户程序
11、代码重链接一次,有些时候 这几乎是不可能的任务。为了更好地让编程像“搭积木”一样简单,让模块可以完美地配合,完美地替换,COM 产生了。COM 不是类库,不是代码,不是操作系 统的服务,而是一套编程模型,理论上来说,它与语言无关,与操作系统无关,unix 下同样可以做 COM。COM是一种程序结构模型标准,你做的 DLL 或 EXE 在结构上满足这么一个标准,那这个 DLL 或 EXE 就是一个组件,它将在该平台上成为二进制兼容。COM 主要利用了注册表来登记本模块的信息。客户程 序调用时首先查注册表,找到所需组件的位置(这实现了位置透明) ,然后就用 Loadlibrary 把它加载进来,这
12、和普通调用没有本质区别,区别在于由于 组件特殊的实现方法使得整个过程中用户程序都不知道组件的位置,组件的类的实例化过程,如何销毁,不能直接访问组件的任何实现细节,用户只与组件的几个 public 接口打交道。这将实现真正的模块之间的独立。对用户程序而言,对于目标组件的认识,除了接口,一无所知。在接口不变的情况下,组件可任 意替 换而客户程序不作任何改动,无需编译,仅这一点,在中大型程序的模块集成的过程中就将节约相当多的时间。 “STL“:Standard Template Library,标准模板库标准模板库这是最早由 Alexander Stepanov 和 Meng Lee(蛮像中国人的名
13、字)完成,于 1994 年提交给 ANSI/ISO 标准 C+委员 会并通过而成为标准 C+的一部分。望文生义即可知这是一个代码库标准,不是语法标准。简单地说,STL 是以 C+中的模板语法为基础建立起来的一套包含 基础数据结构和算法的代码库。STL 的特点是实现了“类型参数化”,即 STL 的代码中可处理任意自定义类型的对象,如果不使用模板技术的话,这是一件相当 困难的事。也因为这个原因,在最新的 java 及 C#语法中均加入了对模板语法的支持,可见其重要性。另外一个有关 STL 重要的话题是 GP (Generic Programming),泛型。这是与面向对象相并列的另外的一个编程模型
14、,它以模板为基础,弱化了实体类型的差异,简化了编程时问 题抽象的模型,提供了更好的封装性和弹性,对于繁杂的面向对象编程毫无疑问是一种解脱,至少是精神上的。GP 并不是用来取代面向对象的,而是作为一个有益 的补充体,是面向对象很好的合作伙伴。是最近几年软件架构的一个研究热点,但国内真正的应用似乎并不多见,这项技术本身还基本处于研究前沿。一书对 C+中的 GP 应用有很好的诠释,而这本书对脑细胞的杀伤力之大,也是其它 C+书藉望尘莫及的。想知道 C+的代码技巧可以做到怎样的出 神入化吗?不妨看看这本书。“ATL“:Active Template Library,活动模板库,活动模板库这在 VC 编
15、程下应该算是比较高级的话题了,它集 COM 和模板技术于一身,带来了极方便的组件编写方法和极高的学习门槛。可以说,进入 ATL 领域就算是 进入了中级以上的编程领域。ATL 是为组件而生,它的目的是为了让程序员更方便地编写组件(纯用 C+写一个最简单的组件实现一个“Hello World”对初学者来说都是要命的) ,同时它使用模板技术来类似于 MFC 一样建立了一个开发 COM 的框架代码库(模板库) ,使用该框架及模板库可以相对 方便地进行组件开发。ATL 中的一个特点就是你自己的类将成为代码库中某些类的父类,这是一件很有趣的事(这也是模板技术的一个特点) 。“HANDLE“: 句柄句柄这是
16、一个中文翻译很古怪的字,对初学者来说是百思不得其解的东东。这其实等价于 void*(顺便提一下,初学者往往对 VC代码中各种古怪的符号、类型 标记/宏等百思不得其解,其实它们大多来自基本类型的#define 或者 typedef,请将光标移到这些符号上(譬如 HANDLE) ,然后按下 F12, 编译器自会把你带到它的声明处,反复使用几次,你终会见到它的原貌,然后长吁一口气:原来不过如此而已。没用过的初学者请牢记:F12) 。很多初学者总想 知道一个 HANDLE 代表一个什么对象,我的建议是不要去理解为某对象,而就是理解为访问某一个对象的入口,事实上 HANDLE 大多数时候是一个整数索引 (标志该对象在操作系统的某表中的位置,就好像一个数组的下标一样) ,Windows 系统核心中主要是几张大表,这样一个整数索引就是标记目标在这个表中 的位置,供操作系统访问时查询用。偶而它的确是指向某对象的指针,有时它还携带一些额外辅助信息。总之,我们不要去直接访问它,把访问 HANDLE 的任务 交给操作系统好了,除非你还嫌写程序不累:) 。“DLL“: