5D艺术网首页
商城
|
资讯
|
作品
|
博客
|
教程
|
论坛
登录
注册
加为好友
发短消息
来自:郑州
性别:先生
最后登录:2011-04-27
http://wwle.5d.cn/
我有一对翅膀,不是用来飞翔,而是用来煮汤。
首页
|
新闻
|
话题
|
博客
|
相册
|
艺术作品
|
社交关系
|
留言板
|
社交圈
2006/01/17 | 软件编程基础与框架简介
类别(数据库学习笔记)
|
评论
(3)
|
阅读(8059)
|
发表于 22:41
软件编程基础与框架简介
云无心 2005-11-19
lyglyg@public.km.yn.cn
QQ:37813020
说明
由于一些原因已经没有完成这本书的激情了,编写好的那部分也不没经过任何校对,但书的框架也许对学习编程的人仍然有意义,故仍然免费发布出来希望有点用处。
希望本书能给想了解计算机软件编程的朋友带来一个快速、直接的途径。读完此书后你不会成为一个软件开发高手,但如果你读完本书至少你对编程有了一个概念和框架性的了解,在和内行人侃时不会被人鄙视。
目录
第一章 编程简介---编程与建筑
第二章 计算机信息的存储与表示
第三章 计算机语言的基本要素
第四章 计算机操作系统平台
第五章 软件技术平台
第六章 计算机语言与软件开发工具
第七章 面向对象
第八章 数据库与编程
第九章 软件设计与软件工程-软件是怎样生产出来的
第十章 软件之路—何去何从
第一章 编程简介---编程与建筑
第一节 什么是编程?
一直以来编程给许多人以高深的感觉,许多人就在这两个字前被吓的止步不前了,其实编程并没那么高深莫测。顾名思义,编就是编写、编制,程就是程序、过程。编写程序编制过程会要有复杂多难呢?
那就完全得看你编写什么样的程序过程了,你编制的程序要解决多复杂的问题了。
编程其实和我们建房子差不多,两者有相当多的相似性:
一样会需要很多材料:
建房子需要水泥、沙、砖、钢筋,编程则需要变量、常量、函数、数据、语句等。
一样可能会有很多工序:
建房要筑打基础、要做框架、要砌墙、要封顶,编程要定义变量、要初始化、要处理数据、要输出结果。
一样需要把材料制成更大更方便的材料:
建房要把土制成砖、要把水泥制成预制块,编程要把变量语句写成函数、要把函数和数据做成类、要做很多框架、控件模块
一样需要设计:
建一幢大的建筑要做很多的设计工作,同样编写一个大的软件设计工作也会很多甚至比编程写代码还多
一样要分析用用户要用来做什么
房了得看建给什么人用的,软件也得看做给什么人用的
一样需要很多工具
建房要很多建筑工具从大的机械设备到小和钉子锤子,做软件也一样需要很多工具从设计的工具到写代码的工具种类N多。
一样会要很大很复杂的架构
最后都一样是体力活,程序员要长时间在电脑面前工作,加班那是绝不会少的了,没有超时工作的程序员不会是真正的程序员。
第二章 计算机存储和表示信息的方法
计算机存储和表示信息用的都是二进制,二进制是什么很容易明白,可计二进制是怎么样表示计算机信息的相信大多数人都很迷糊的。因为高级技术书籍是不大会讲这些基础的东西,基础的书籍又都过于系统化,让你一时半会儿是弄不明白怎么回事的。
第一节 什么是数字化信息?
现在数字化这一词出现的频率是非常高的,那什么是数字化呢?
简单说数字化就是用数字来记录、表示和应用信息,如ASCII(美国标准信息交换码American Standard Code for Information Interchange)就是一种用0-127的数字来代表26个大写、26个小写、0-9十个数字和一些常用符号的一种最常用的数字代码,ASCII码是计算机里信息的存储和使用基本标准之一。详见下表:
计算机里常用的记数法有二进制、八进制、十进制和十六进制,下表就是1到16的几种进制数值对照表
二进制 八进制 十进制 十六进制
1 1 1 1
10 2 2 2
11 3 3 3
100 4 4 4
101 5 5 5
110 6 6 6
111 7 7 7
1000 8 8 8
1001 9 9 9
1010 10 10 A
1011 11 11 B
1100 12 12 C
1101 13 13 D
1110 14 14 E
1111 15 15 F
10000 20 16 10
计算机应用信息的方式是将各种信息转化为数字记录在光、磁存储器里,使用的时候再把数字用转化为相应的格式。
第二节 信息的应用单位
字节:计算机里信息存储和使用的基本单位是字节,一个字节就是一个8位二进制数值(0-127)。
字节常用的计量单位有K、MB(兆)、G
1K=1024字节
1MB=1024K
1G=1000MB而不是很多人认为的1024MB
文件:每个文件由1-N个字节组成,早期的WINDWOS操作系统只支持2G字节。每个文件里存储的都是二进制字节一般通过文件名来识别文件,一般文件分为流式文件和格式文件。流式文件是存二进制字节的没格式,如文本文件,格式文件是按一定格式存储的文件例如BMP图像文件、数据库文件等。
目录:一个目录下可以存N个文件或目录。
分区:分区就是我们平日说的C:盘D:之类的,它是在物理硬盘上划出的一块区域,并建立了一个用来存储文件和目录名称属性的"文件分配表"。
计算机存储结构图
三、计算机的显示与色彩
计算机屏幕的显示是由很多纵向和横向的点组成的,通常说的分辨率1024*768就是指由横向1024个点纵向768个点组成的整个显示画面。
而每个点又可以有16色、256色、16位色、32 位色等颜色模式
计算机里的色彩都是用数字来表示的:
色彩模式 每个点所需字节 颜色种数
16色 1/2byte 16色
256色 1byte(8位二进制) 256色
16位色 2byte 65536色
32位色(真彩色) 4byte 2的32次方种颜色
根据所占用的字节计算机会在显卡的存储芯片中分配相应的存储空间来存放屏幕的色彩信息。当然现在的显示卡存储芯片还有一个重要作用是加速来提高显示效果。
第三章 计算机操作系统
第一节 DOS
Dos是Disk Operation System的缩写,是微软的第一个操作系统,也曾经是微机上最主要的操作系统。Dos是一个单机单任务操作系统,Dos的主要操作方式是命令行交互方式也就是输入一个命令然后回车执行这个命令并以字符方式显示结果。在WINDOWS95面世后Dos被逐步淘汰了,但为了保持兼容在WINDOWS中仍然保留了,这些命令也确实很有用。下面是目前还会用到的一些主要的DOS命令:
命令 功能 语法
Dir 显示目录文件和子目录列表 Dir[Drive:][Path][FileName]
CD(ChDir) 显示当前目录的名称,或更改当前的文件夹。在不带参数的情况下使用,chdir 显示当前驱动器和目录
Cd [Path],Cd.. 返回上级目录
Chkdsk 创建和显示磁盘的状态报告,列出并纠正磁盘上的错误 chkdsk [Volume:][[Path] FileName] [/f] [/v] [/r] [/x] [/i] [/c] [/l[:Size]]
Sys 把系统启动文件传送到目标盘 SYS [[Drive:]
Edit
启动 MS-DOS 编辑器,编辑、创建和更改 ASCII 文本文件 edit [[Drive:][Path] FileName] [/b] [/g] [/h] [/nohi]
Fdisk
磁盘分区 Fdisk
Format
格式化指定的磁盘 format Volume [/v:Label] [/q]
Copy 将一个或多个文件从一个位置复制到其他位置。 copy [/d] [/v] [/n] [{/y | /-y}] [/z] [{/a | /b}] Source [{/a | /b}] [+ Source [{/a | /b}] [+ ...]][Destination [{/a | /b}]]
有关命令的详细使用方式请参见WINDOWS中的帮助,或在命令行方式输入: "命令 /help"可以查看相关帮助。
MS-DOS在1981年10月推出1.0版本之后的很长一段时间里,取得了很大的成功。它的主设计人是Tim Paterson。随着当时硬件的发展,MS-DOS也从简易的单用户单任务操作系统发展成支持高级文件操作,局域网的完善的单用户单任务操作系统,进而向多任务方向发展。
以下是MS-DOS发展简表:
版本号 推出时间 主要性能
DOS 1.0 1981.10 以单面软盘为基础的PC第一个操作系统
DOS 1.1 1982.10. 支持5.25英寸双面软盘
DOS 2.0 1983.3. 支持10MB固定盘,响应PC/XT的推出采用树状文件结构
DOS 2.10 1984.3. 支持对错误精确定位和PCjr的半高软盘驱动器,改进了国际支持
DOS 3.0 1984.8. 支持以80286为CPU的PC/AT机,支持1.2MB软盘
DOS 3.10 1984.11. 具有支持网络的功能,首先被用于IBM PC Network 局域网
DOS 3.20 1986.1. 支持3.5英寸的720KB软盘
DOS 3.30 1988. 支持3.5英寸的1.44MB软盘,硬盘DOS分区可达32MB,使用磁盘高速缓存
DOS 3.31 1987.4. 支持大于32MB的硬盘分区
DOS 4.0 1988.8. 支持2GB硬盘分区,支持EMS4.0扩充内存,有DOS Shell
DOS 5.0 1991.7. 支持3.5英寸2.88MB软盘,支持扩充内存和延伸内存,完善的DOS Shell,全屏幕编辑器和QBasic
DOS 6.0 1993. 更为完善的硬盘管理和内存管理,提供了更丰富的外部命令,如反病毒程序Antivirus,内存优化程序MemMaker等
DOS 6.2
MS-DOS取得巨大成功的原因在于它的最初设计思想及其追求目标的正确和恰当,那就是为用户上机操作和应用软件开发提供良好的外部环境。首先使用户可以非常方便的使用几十个DOS命令,或以命令行方式直接键入或在DOS4.0以上版本下以DOS Shell菜单驱动,都可完成上级所需的一切操作。其次在于用户可用汇编语言或C语言来调用DOS支持的十多个中断功能和百个系统功能。用户通过这些服务功能所开发出的应用程序具有代码清晰,简洁和实用性强等优点。但它仍然存在着很大的局限性。尽管它已经具备一些多任务处理能力,但能力有限。在内存管理上采用的是静态分配,DOS内核的不可重入性,I/O控制和修改向量缺乏自我保护等反面都有缺陷。
下面是MS-DOS系统层次结构:
第二节 WINDOWS 95/98
随后,Microsoft借Windows东风,于1995年推出新一代操作系统Windows95(又名Chicago),它可以独立运行而无需DOS支持。Windows95是操作系统发展史上一个里程碑式的作品,它对Windows3.1版作了许多重大改进,包括:更加优秀的、面向对象的图形用户界面,从而减轻了用户的学习负担;全32位的高性能的抢先式多任务和多线程;内置的对Internet的支持;更加高级的多媒体支持(声音、图形、影像等),可以直接写屏并很好的支持游戏;即插即用,简化用户配置硬件操作,并避免了硬件上的冲突;32位线性寻址的内存管理和良好的向下兼容性等等。
Windows95是一个32位的操作系统;从用户的角度来看,它则是一个完整的图形化操作系统。Windows95的出现,使得硬件设备的需求向前迈进一大步。原本使用DOS、Windows3.1操作系统的个人电脑,几乎都面临升级的命运。即使是被用户留下来继续使用的,也是以让人无法忍受的速度在运行。Windows95的出现带动了一股硬件升级的狂潮。在电脑中安装一套基本的Windows操作系统需要将近100MB的硬盘空间,内存至少要16MB,显示卡要640×480、256色才能较好地运行,这便对用户的电脑硬件提出了很高的要求,操作系统的升级无形中导致了硬件的升级换代。Windows95的出现对其他软件厂商来说确是一个致命的打击,因为Windows95内建的工具软件、中文系统以及外挂的Office系列软件,使得许多软件厂商不得不纷纷转行。即使是一些幸存的软件厂商,也几乎都是以Windows95为标准平台的作业环境。Windows 95表面上可说是一个脱离DOS文字模式的操作系统,"开始"菜单、工具栏等Windows系列的创举在当时令许多用户感到惊奇不已。虽然它还不是一个成熟的、真正友善的操作界面,但是一"鼠"走天下的使用方式,却让很多电脑用户从此以后都必须过着与"鼠"为伴的日子。Internet盛行后还出现所谓的"滚轮鼠标",但是这种看似简单、其实却复杂化的操作方式,应该也不会有太长的寿命(很多用户在使用一段时间后发觉,滑轮可没有老鼠听话)。Windows 95的出现带给使用者一个完整的图形化操作与使用概念,使工作的过程不那么枯燥乏味,使用电脑的经历也开始变得有趣。从此以后人们不再需要想象的空间,因为电脑的世界已经被WYSIWYG(what you see is what you get,所见即所得)占据了。
微软开发Win98有三个主要动机,即操作系统网络化、PC-TV一体化和降低PC维护费用的零管理方案。在这三点的基础上,同时升级Win98的硬件支持能力,优化系统性能,改进一些普通功能。为此,微软在开发WIN98时,大量优化或改写了原WIN95的各种程序,据说从原WIN95的源程序中清除了3千多个"臭虫(Bug)",重写了部分关键程序。
可以说,Win98基本上实现了初衷。和Win95相比,Win98最大的特点在于将浏览器IE内置,统一了用户界面;运行更为稳定、可靠,且速度更快;作为面向家庭的操作系统,它增添了很多娱乐功能及提供了对近年涌现出来的新标准、新技术和新设备的支持。
更加可靠的性能
Win98调用应用程序的速度大大提高,自我维护能力大大加强。
Win98操作系统将计算机的性能大大改善,使应用程序的调用时间平均比Win95快36%,并且关机速度大大加快,内存的应用效率大大提高。
Win98能自动根据用户使用应用程序的频率将那些常用的应用程序按顺序管理。这类似于在办公室周围的文件夹中,你总是将你最常用的文件按顺序放在离你最近的地方。而且,Win98这个应用程序的管理是动态的,用户对某个程序的使用频率越高,则调用的速度也就越快。另外,Win98的"Windows维护精灵"还会经常自动清除你不需要的文件,进行磁盘碎片整理、磁盘扫描等,从而保证机器的速度和效率。
在对硬盘的管理方面,Win98采用了比FAT16功能更强大的FAT32(FileAllocationTable32-bit)。由于采用FAT32模式管理磁盘文件可以使硬盘分区在8GB以内的磁盘簇长度仅有4KB,而采用FAT16模式时只要分区大于1GB每个磁盘簇的长度就是32KB,所以在FAT32模式下比原先的FAT16模式可以节约20~30%的硬盘空间,FAT32的特点一直吸引着广大电脑用户。然而虽然从WIN95OSR2.0(WIN97)开始就支持FAT32,但应用时必须重新对硬盘分区和格式化,对已经安装好各种软件的电脑来说非常不便,这一点限制了FAT32的应用。为此,微软在WIN98中专门提供了FAT16至FAT32的磁盘转换程序,这样即使是已经安装好的系统也可以方便的将硬盘文件系统转换成FAT32模式。它可使硬盘的平均利用率提高28%。
Win98在多任务转换方面非常稳定,这使得我们可以方便地在Win98中运行PCGame时切换到编辑器、拦截器等工具中。
Win98的RegistryChecker(注册检查器)能自动对计算机中的Registry文件进行定期备份,以提高计算机的可靠性并使之更加易于维护。Win98还配有一个名为SystemFileChecker(系统文件检查器)的应用程序,它能恢复被破坏或修改过的系统文件,自动解决系统问题。
另外,Win98简单快捷的超文本帮助,更好的外部设备支持特性,根据需要方便地修改系统参数等功能,都使系统的性能有了很好的改进。
总之,通过各种措施,WIN98运行时的稳定性和可靠性相对WIN95而言确有明显的提高。当运行某些软件严重出错时,只需清除正在运行的软件而不会造成整个系统崩溃,仅此一点对于大量使用各种光盘软件的电脑爱好者来说就是一个福音。
更加方便的网络
毫无疑问,我们正迈向网络时代,网络功能自然是新操作系统最重要的一部分。Win98给人的感觉是,Internet功能无处不在,计算机就是网络,网络就是计算机。
Win98和Win95相比最为显著的变化是将浏览器IE内置,使浏览本地硬盘、网络、企业内部网、因特网的用户界面得到统一,使操作系统的网络功能大大加强,方便易用。
活动桌面。集成IE4后的活动桌面,将本地资源与网上资源统一在了一起。用户在桌面上的任何一个地方都可快速进入网上世界。在Win98的资源管理器中,用户可同时访问本地硬盘、Intranet和Internet,URL(UNIFORM RESOURECE LOCATOR统一资源定位器)可以直接作为一个文件而随时打开。
提供频道功能。利用它,可在Win98中方便地订阅Web站点,如迪斯尼(Disney)、时代-华纳(Time-Warner)等,享受离线阅读的乐趣。
增强的拨号能力。如果ISP的服务器是WinNT,则Win98可以同时挂接多个Modem,获得的连接速度将是所接Modem速度的和。在网络设置方面,Internet连接向导给用户提供详尽的帮助,它会与用户的ISP"交谈",获得最佳的网络配置。此外,Win98也提供了一个ISDN(INTEGRATED SERVICES DIGIT AL NETWORK综合业务数字网)连接向导。
Win98使用网络用户界面(Web-AwareUserInterface),用户不必再为各种不同获取信息的方法而烦恼。例如,当你安装了Win98之后,便会发现无论在什么地方都可用工具条或向前/向后按钮去你想要去的地方。向前或向后按钮记住了历史记录,用户只要用鼠标一点便能到达目的地。在这两个按钮之间,还有一个"向下箭头"按钮,它可列出历史记录,使用户轻易找到目标。
在接收信息方面,Win98的私人信息传送(PersonalizedInformationDelivery)可使用户不必再为他所喜欢的网页是否改变而烦恼,因为它可将网络信息直接传送给用户,甚至可将其下载以便脱机阅读。例如,你可在上网时订阅一个标准的网页,然后从"私人菜单"中选择"加入",就会出现一对话框,询问当网页改变时是否要通知你,或者是否要将它下载到你的机器上。做好这个以后,Win98将替你完成以后所有的工作。当你所订阅的其中一个网页有变化时,在"私人菜单"相应的图标上会出现红色亮斑。你也可选择用E-mail的方式来通知变化的发生;如果你同时还选择了下载,便可以采用既省时又省钱的脱机阅读了。
值得一提的是,Win98的灵巧浏览器也很有特色,它可将用户用过的网址都记住。用户只需输入一两个字母系统便能自动将它给出。
最后,Win98很大一部分是面向网络的操作系统,所以它还有很多其它网络功能,如网络会议系统(NetMeetingConferenceSoftware)、网络多媒体播放工具(NetShowMediaPlayer)、网页制作工具(FrontPageExpress)、收发电子邮件和电子新闻(OutlookExpress)等等。
更加开心的娱乐
Win98新增的对1200多个驱动程序的支持,与众多硬件厂商的合作,对WebTV等新技术的支持,使得用户无论是玩游戏或者是进行其它的娱乐都能得到充分的满足。
在Win98中,用户可充分体会到计算机所带来的开心娱乐。只要在运行Win98的计算机中安上电视卡,便能通过网络电视(WebTV)在电脑上收看标准的电视节目了。例如,可用电子节目指南EPG(ElectronicProgramGuide)来发现你所喜欢的电视节目,并且可用电脑来提醒你观看电视节目;你还可以同时看电视编软件,并可以按你的需要来改变电视节目窗口或软件窗口的大小。
Win98提供TuneUpWizard功能,其作用类似缓冲功能,使得PCGame玩家可以更加流畅地运行游戏。
当然,Win98多媒体功能最好的体现就是对先进技术的支持。为此,微软与众多硬件厂商合作,如柯达、松下、Xirlink、惠普等著名公司,使Win98可以外接多种外部设备,如数字摄录机、扫描仪等;可支持九种图像适配器;可支持三维动画、逼真的定向环绕立体声和强制反馈控制杆等。
对新硬件的支持
Win98支持的新硬件包括通用串行总线USB、IEEE1394、加速图形端口AGP、MMX、DVD播放器等。
USB。USB是一种新型高速串行端口,可同时串接127个外设,数据传输率可达12MB。USB设备支持热插拔,不必关闭PC,就可挂接或卸下设备,这些设备可以是扫描仪、鼠标、键盘、游戏摇杆等,并可即插即用。目前,市场上已有不少USB接口的设备,相信随着Win98的发布,品种将越来越多。
IEEE1394。它是大家常说的火线(Firewire),也是一种高速串行接口,不过,它专门用于连接数据传输量大的设备,比如数字摄像机。目前,使用这种接口的设备还很少,但据说,将来大量家庭娱乐设备会使用这种接口。
AGP。对于AGP,大家已不陌生,现在市场上的AGP显示卡已有不少了。AGP图形接口的架构由Intel提出。AGP的主要好处是提高显示数据的传输率,便于3D应用程序处理更大、更复杂的图像。AGP的工作频率为66MHz,最大数据传输率可达528MB,是PCI显示卡的四倍。Win98可以充分发挥AGP端口的威力。
使用这些采用新接口的设备,同样需要安装驱动程序。不过,Win98的驱动程序库远比Win95丰富,对市场上流行型号的产品,均提供最新驱动程序。
软件人员的福音
Win98采用16位兼容和32位编程,这对软件开发人员及其有利。
因为Win98的内核没有多大的改变,且其API函数也大致和Win95差不多,所以程序员不会觉得难以适应。Win98也是按照微软的惯例:向下兼容。因此,从总体上来说,Win95上的程序基本上可以同样运行在Win98上,而开发人员也可以继续使用自己熟悉的开发工具进行Win98应用程序的开发和Win95相比,Win98反映了自Win95发布后个人电脑的最新进展,因而在Internet、新标准、新技术等方面为软件开发人员提供了充分的资源;并且,Win98提供了更多的系统资源调用,从而使32位的程序开发起来更为简单,程序代码也更少。当然,更为有利的是,Win98在速度和可靠性方面要强多了。
有一点要提及的是,微软在倡导编程规范化,而且准备在国内推出WindowsNT/98设计认证。它的要求主要包括必须是32位应用程序,支持高级设置和电源接口标准(ACPI),界面友好,具有卸载程序和可管理性能等等。通过认证的软件可以把该logo印制在软件的外包装上,从而得到全球范围的承认。由于微软的下一步将把所有产品向WindowsNT转换,所以国内软件开发人员对它重视是有必要的。
总的说来,Win98所做的改进超过3000项,虽然它并没有在操作系统技术方面有质的飞跃,只是微软完成从Windows系列到WindowsNT系列的一个过渡性产品,但它作为基于DOS操作系统的终结者,作为面向家庭的操作系统,还是很有吸引力的。
第三节 WINDOWS NT/2000/XP
当今的商业正改变着它们应用网络的方式。在过去,大部分的组织主要将他们的网络做为一种文件共享和打印服务。而现在,商业组织把他们的信息系统当做一项可以给他们带来竞争力和收益的策略性投资。网络的角色于是就从在一个工作组内的文件和打印共享转化为能够支持任务-关键商业应用程序的分布式信息系统。Microsoft Windows NT Server是一个强大的、多目的的基础平台,它的设计目的就是既能成为一个优秀的文件和打印服务器又能做为一个完整的任务-关键应用程序服务器。
Windows NT Server提供:
l 高性能的文件和打印服务
l 优秀的应用程序服务器性能
l 在它的集中管理能力和用户自治权之间最好的平衡,这样个人用户可以对他们拥有的资源进行适当的控制同时又保证网络的安全性。
l 支持任务-关键应用程序和容忍个人应用程序或系统错误所需要的容错性。
l 用户服务的高度可用性
l 防止对信息进行非授权访问的可靠环境
l 能调节并支持非常大量的用户的能力
l 与Windows 的完全的集成
在今天的网络中可靠性是一个非常关键的部分。Microsoft Windows NT Server操作系统最强大的特点之一就是它的可靠性。可靠性已融进了Windows NT Server的每一个组件中,这为用户提供了信息和服务的最大可用性。这一系统以许多种方式确保这种高度可用性,包括:
l 统一地处理硬件和软件的错误
l 将用户程序和系统彼此隔离开进行保护
l 提供数据和系统的恢复机制
通过在一开始将可靠性技术内置于Windows NT Server中,我们保证了系统容错的能力,维护了系统,应用程序,网络资源和数据的可用性。而且 ,Windows NT Server的微核结构意味着很容易增加新的服务和特性而不破坏原有系统。
可靠性,容错,安全性和可扩充性是Windows系列平台赖以创建的四个基点。
Windows NT Server包括下面的可靠性和容错能力:
l 错误处理和保护系统。
Windows NT Server设计目的之一是安全地管理应用程序和系统的错误和例外,而避免系统崩溃。而且,保护子系统将程序隔离在独立的内存空间中以保证这个程序的错误不会影响其它程序或系统的操作。
l 可恢复的文件系统。
Windows NT的文件系统(NTFS)能高度容忍磁盘错误,因为它把所有的磁盘I/O操作做为独立的事务处理单元记录下来。在出现一次磁盘失败的情况下,文件系统可以适当地快速撤消或重做某些事务而使系统恢复过来。这种方式极大地减少了系统不可用的时间因为文件系统可以快速恢复到一个已知的,操作正常的状态。
l 自动重新启动。
Windows NT Server的错误处理和保护子系统使得系统错误很少发生。然而,假如一个错误确实发生了,系统可以被设置成自动地重新启动。这一特性提供了最强程度的无人干预情况下的恢复。而且,在重启前内存的内容可以被写到一个磁盘文件中以帮助管理员判断出错的原因。
l 磁带备份支持。
Windows NT Server包括了强大的磁带备份以保证数据的可用性。也可以从象Arcada和Cheyenne这样的厂商那里得到第三方厂家的备份工具。
l 连续的电源供应UPS(Uninterruptible Power Supply)支持。
Windows NT Server的UPS服务检测并向用户提醒电源错误并在备份电源供应用尽前使系统安全关机。
l 磁盘镜像,磁盘双工和磁盘的奇偶条带化(RAID 5)
所有这些方法都是通过在其它分区复制数据而建立数据冗余。每种方法提供了一个不同程度的容错。相似地,每种方法都需要与此相联系的不同的代价。Windows NT Server包括了所有这些方法,所以用户可以选择能满足他们需要的最合适的价格和容错级别的搭配。
这些特性使Windows NT Server成为目前可以使用的最可靠的基础平台,它的设计使得它与未来技术的结合可以象它与当前技术结合的那样天衣无缝。
安全性:
Windows NT Server从一开始设计就要求了绝对的安全性。保密特性在操作系统每一个组件的创建过程中都考虑进去了,并且它的设计满足美国国防部国家计算机安全中心NCSC(National Computer Security Center)对一个C2级认可的安全性系统的要求。除了符合美国政府的要求,Windows NT Server还解决了大量"真实世界"的保密性问题。这包括最终用户的易于使用和网络管理员的易于管理。Windows NT Server的设计还能保护存储在计算机内存中的数据使它不能够被另一个未授权的进程访问。
这意味着,比如说Jim Smith,必须登录并由系统验证后才能进行对数据的访问。而且,他必须被提供了对系统上数据的显式的访问权否则他就不能获得对该数据的访问。虽然Jim只在登录时看到了系统的安全性特征,而实际上每次当他试图访问数据时系统都对他进行了安全性确认。这种对安全性的细节关注有助于保证信息被完全保护起来并且只能被授权的用户访问。
创建一个安全的网络操作系统需要详细的规划。安全性特征必须贯穿于整个系统之中。要让系统具有安全性,文件系统,用户帐户目录,用户确认系统,内存管理,环境子系统和其它组件都需要特殊的设计考虑。Microsoft把安全性做为Windows NT操作系统的一个设计目标。在系统建立以前,安全特性的考虑进入了操作系统设计的方方面面。这一早期的规划和设计对一个安全性系统的成功实现是至关重要的,并且它保证了Microsoft在Windows NT Server中提供综合有效的安全性的持续能力。Windows NT Server的安全性又是它的可靠性的另一个方面。
可扩充性:
Microsoft Windows NT Server操作系统提供了一个可在其上建立商业解决方案的真正可扩充的平台。这种可扩充性意味着基于Windows NT Server的应用程序可以满足小型,中型和大型企业机构不断变化的需要。
由于可以运行在如此广泛范围的一系列硬件平台上,基于Windows NT Server的解决方案可以随着一个企业机构的成长而调整。硬件的威力可以增加到一个已有软件解决方案的基础之上,增强它的容量和性能,而不必改变应用程序的操作和管理。同样地,通过在整个企业机构上下采用一致的基于Windows NT Server的解决方案,在该机构中的不同组可以很容易地共享信息并从一致的,易于使用的应用程序界面中获益。
Windows 2000是基于Windows NT内核,只不过在外在的操作界面上采用了更适合我们使用的Windows 98风格。可以这样说--Windows 2000是更适合于我们使用的Windows NT(它实际上就是以前常说的Windows NT 5.0)。它有4个版本:
Windows 2000 Professional(windows2000专业版)
Windows 2000 Professional其实是Windows NT Workstation( Windows NT工作站)的最新版本,是专为各种桌面计算机和便携机开发的新一代操作系统。它继承了Window s NT的先进技术,提供了高层次的安全性、稳定性和系统性能。同时,它帮助用户更加容易地使用计算机、安装和配置系统、脱机工作和使用Internet等。对于电脑和网络系统的管理员而言,Windows 2000 Profess ional是一套更具有可管理性的桌面系统,无论是部署、管理还是为它提供技术支持都更加容易……这意味着更低的总体拥有成本。
Windows 2000 Server (Windows 2000服务器版)
Windows 2000 Server是在Windows NT Server 4.0(Windows NT服务器4.0版)的基础上开发出来的,按照人们一贯的思维,它命名为Windows NT Server 5.0 更合适。Windows 2000 Server是为服务器开发的多用途操作系统,可为部门工作小组或中小型公司用户提供文件打印、软件应用、Web功能和通信等各种服务。它是一个性能更好、工作更加稳定、更容易管理的平台。Wind ows 2000 Server最重要的改进是在"活动目录"目录服务技术的基础上,建立了一套全面的、分布式的底层服务。"活动目录"是集成在系统中的,采用了Internet的标准技术,是一套具有扩展性的多用途目录服务技术。它能有效地简化网络用户及资源的管理,并使用户更容易地找到企业网为他们提供的资源。Windows 2000 Ser ver支持2路对称多处理器(SMP)系统,是中小型企业应用程序开发、Web服务器、工作组和分支部门的理想操作系统。
Windows 2000 Advanced Server (Windows 2000高级服务器版)
该版本最初的名称是Windows NT Server 5.0 Enterprise Edition(Windows NT服务器企业版)。Windows 2000 Advanced Server除具有Windows 2000 Server的所有功能和特性外,还提供了比之更强的特性和功能:更强的SMP扩展能力:Windows 2000 Advanced Server提供了更强的对称多处理器支持,支持数达到4路。更强大的群集功能。更高的稳定性:可为核心业务提供更高的稳定性,在多种一般错误发生后一分钟内自动重启应用软件。例如,把两台基于Intel 结构的服务器组成一个群集,可以获得很高的可用性和可管理性。网络负载平衡:为网络服务和应用程序提供高可用性和扩展能力,例如TCP/IP和Web服务。组件负载平衡:为COM+组件提供高可用性和扩展能力。高性能排序:Windows 2000 Advanced Server优化了大型数据集的排序功能。这些功能和特性使Windows200 0 Advanced Server比Windows 2000 Server具有更高的扩展性、互操作性和可管理性,可应用于拥有多种操作系统和提供Internet服务的部门和应用程序服务器。
Windows 2000 Datacenter Server (Windows 2000数据中心服务器版)
微软推出的这个全新版本是功能最为强大的服务器操作系统,它支持16路对称多处理器系统以及高达64GB的物理内存。与Windows 2000 Advanced Server一样,它将群集和负载平衡服务作为标准的特性。另外,它为大型的数据仓库、经济分析、科学和工程模拟、联机交易服务等应用进行了专门的优化。
下面仅从五个方面简要地介绍一下它的新特性和新功能。
一、活动目录
Windows 2000 Server在Windows NT Server 4.0的基础上,进一步发展了"活动目录(Active Directory)"。活动目录是从一个数据存储开始的。它采用了类似Exchange Server的数据存储,称为:Extensible Storage Service (ESS)。其特点是不需要事先定义数据库的参数,可以做到动态地增长,性能非常优良。这个数据存储之上已建立索引的,可以方便快速地搜索和定位。活动目录的分区?quot;域(Domain)",一个域可以存储上百万的对象。域之间还有层次关系,可以建立域树和域森林,无限地扩展。
在数据存储之上,微软建立了一个对象模型,以构成活动目录。这一对象模型对LDAP有纯粹的支持,还可以管理和修改Schema。Schema包括了在活动目录中的计算机、用户和打印机等所有对象的定义,其本身也是活动目录的内容之一,在整个域森林中是唯一的。通过修改Schema的工具,用户或开发人员可以自己定义特殊的类和属性,来创建所需要的对象和对象属性。
活动目录包括两个方面:一个目录和与目录相关的服务。目录是存储各种对象的一个物理上的容器;而目录服务是使目录中所有信息和资源发挥作用的服务。活动目录是一个分布式的目录服务。信息可以分散在多台不同的计算机上,保证快速访问和容错;同时不管用户从何处访问或信息处在何处,都对用户提供统一的视图。
活动目录充分体现了微软产品的"ICE",即集成性(Integration),深入性(Comprehensive),和易用性(Ease of Use)等优点。活动目录是一个完全可扩展,可伸缩的目录服务,既能满足商业 ISP的需要,又能满足企业内部网和外联网的需要。
1.活动目录的集成性(Integration)
微软的活动目录生动了结合了三个方面的管理内容:用户和资源管理、基于目录的网络服务,和基于网络的应用管理。而且活动目录广泛地采纳了Internet标准,把众多的Internet服务都集成在了一起。
2.活动目录的深入性(Comprehensive)
活动目录的深入性体现在企业级的可伸缩性,安全性,互操作性,编程能力和升级能力上。活动目录既可以存储极少的几个对象,也可以存储上亿万的对象。活动目录通过为每个域创建一个目录存储的方法来获得伸缩性。这一个目录存储中仅仅包括了这个域中的所有对象。当域树建立起来之后,每个域有能力搜索整个域树中所有的目录存储。这种划分方法可以帮助活动目录使用容器层次来模拟一个企业的组织结构。组织中的不同部门可以成为不同的域,或者一个域中有层次结构的组织单元(Organizational Unit, OU),从而采用层次化的命名方法来反映组织结构和进行管理授权。
二、文件服务
Windows 2000在Windows NT Server 4.0的高效文件服务基础上,加强或新增了分布式文件系统、用户配额、加密文件系统、磁盘碎片整理和索引服务等特性。
分布式文件系统(Distributed File System, DFS)是一个在Windows NT Server 4.0中已经存在的一个文件服务,但是在Windows 2000中得到了增强。它的作用是不管文件的物理分布情况,可以把文件组织成为树状的分层次逻辑结构,便于用户访问网络文件资源、加强容错能力和网络负载均衡等。
建立了分布式文件系统之后,可以从文件树的根节点开始寻找文件,再也不会迷失方向,也无需考虑文件的物理存储位置。即使文件的物理存储位置有变动,也不会影响用户的使用。这是一个透明的高扩展性的文件管理方案。
Windows 2000采用了NTFS 5的文件系统,在NTFS 4的基础上,增加了两个新的特别访问许可:权限改变和拥有所有权。"权限改变"的访问许可,与常用?quot;完全控制"的访问许可相比,只可以改变某些文件/文件夹的权限属性,而不能够增加或删除文件,管理的更加细致。"拥有所有权"的访问权限,可以用在一个员工离开公司后,接替的员工需要拥有其所拥有的文件的场合。
在Windows 2000的分布式网络环境中,多了一个管理文件存储的增长问题的新工具:磁盘配额。磁盘配额允许管理员根据文件或文件夹的所有权来向用户分配磁盘空间,还可以设定警报和观察用户所剩的磁盘空间。需要注意的是,这种磁盘配额的管理是以磁盘卷为基础的,可以在磁盘卷的属性中设定。
加密文件系统(Encrypting File System, EFS)是在磁盘上存储NTFS文件的一种新的加密存储的方式。加密文件系统是以公用密钥为基础的,作为系统服务的一部分,容易管理、对于攻击有防御能力,而且对于用户来讲是透明的。用户只需要在文件夹的高级属性中指定"加密内容以保护数据",文件夹中的文件和子文件夹都会被加密。对于移动用户来说,假如笔记本丢失、落入不法分子手中,即使不法分子重新安装操作系统,原有的文件业务也无法访问,进一步提高了安全性。在Windows 2000的整体安全性设置中,可以指定"文件恢复代理"的管理员,以便在原有文件主人私钥丢失的情况下,仍然可以由管理员帮助恢复文件。
三、存储服务
为了满足用户对大量存储空间的要求,同时网络管理员也希望得到一个可提供快速存取、灵活增添任意类型的存储设备,并且可以减少管理负荷的网络系统,于是SAN作为新一代集中式存储解决方案,就应运而生了。Windows 20 00的存储服务,就考虑到了SAN网络的需要,建立了一套基础服务,为存储市场上的创新提供了坚实的基础。
Windows 2000中更容易使用的存储管理体现在动态磁盘卷管理、磁盘碎片整理和自动系统恢复等方面。 Windows 2000中集成了VERITAS公司的动态磁盘卷管理,提供了在线的磁盘卷创建、扩展或镜像,甚至增加新的磁盘,也不需要重新启动机器。同时也提供了自我描述的磁盘、简化的任务和直观的用户界面。
Windows 2000还设计通过层次性存储管理(Hierarchical System Management, HSM)、支持新兴存储访问协议等方法来降低存储的成本。层次性存储管理是建立在远程存储服务(Remote Storage Service,RSS)之上的,能够不增加磁盘就可以在服务器上增加新的自由空间。RSS自动地监测在本地硬盘上的剩余空间的大小。如果在一个主要硬盘上的自由空间下降到一个事先设定的水平,RSS自动把本地数据复制到远程存储上,以腾出空间。
四、智能镜像
Windows 2000进一步加强了对于变化和配置的管理,这一整套技术称为:智能镜像 (Intellimirror)。而微软专门的网络管理软件Systems Management Server仍然是针对Windows 2000平台的增值解决方案,提供比智能镜像更高级的一些管理服务。
智能镜像与Windows 2000的其他技术紧密结合,比如活动目录、组策略(Group Policy) 等。组策略是Windows NT系统策略管理的升级,它作用于某个特定的"容器",比如站点(Site)、域(Do main)和组织单元(OU,Organizational Unit),简称SDOU。一旦实施,组策略就对容器中的机器或用户起作用,实施智能镜像。智能镜像的主要内容包括四个方面:远程安装、用户数据管理、应用软件管理和用户设置管理。这些特性,需要Windows 2000 Professional和Windows 2000 Serve r前后台相结合才能体现出来。智能镜像使管理员把精力集中在管理使用电脑的用户,而不是机器。
1.远程安装
例如要为新员工安装一台全新的计算机,或者需要彻底重新安装一台计算机,管理员希望在远程安装过程中,除了安装操作系统之外,还要把诸如MS Office、WinZip等的应用软件和工具一并安装上,甚至公司标准的桌面主题也一并设置好。采用Windows 2000智能镜像就可以轻松地做到这一点。它提供了一个特别的工具,称为Riprep。在管理员安装了一个标准的公司桌面操作系统,并配置好应用软件和一些桌面设置之后,可以使用Riprep从这个标准的公司桌面系统制作一个Image文件。这个Image文件既包括了客户化的应用软件,又把每个桌面系统必须独占的安全ID、计算机账号等删除了。管理员可以它放到远程安装服务器上,供客户端远程启动进行安装时选用。
有了远程安装服务,企业用户在部署数以千计的Windows 2000 Professional时旧困难就迎刃而解了。其实微软在Windows NT Workstation 4.0中已经准备了类似的工具,称为SysPrep,也可以做到通过复制Image文件的方式快速部署。企业桌面管理员只要给用户简单的指示或者再加一张启动软盘,就可以让用户快速完成一个标准企业桌面的安装和配置,省去不少精力和时间。
2.用户数据管理
Windows 2000在组策略中对于用户的管理就有"文件夹重定向"一项,可以指定把文件夹定位到每个用户在文件服务器上一个特定的个人或者工作组拥有的目录中,还可以自动地为此目录加上存取权限。再配合"磁盘配额"的使用,管理员在为用户提供方便的同时,不至于以服务器超负载为代价。
正是因为文件是在服务器上的共享目录中,用户可以从任何一台计算机登录,获得同样的文件使用权限。如果用户需要离线处理的能力,用户或管理员可以指定此共享目?quot;在离线时也可获得"。这样系统中的"同步管理器"(Synchr onizing Manager )就会帮助用户自动管理在线和离线状态的文件同步工作。
3.应用软件管理
公司环境中的另一个变化要素是对应用软件的管理。我们希望应用软件能够跟随用户,在服务器端可以统一管理,而且有应用软件整个生命周期的管理,即可以安装、升级和卸载等。如果我们能够严格按照Windows 2000智能镜像的步骤来部署和管理应用程序,我们的网络应用环境就会井井有条,既能从容适应业务的急剧变化,又能降低管理成本。
应用软件的管理也是通过组策略来实施的。首先在活动目录中,选择需要管理的对象所在的容器(SDOU),右键点击,从属性页中选择组策略,点击"编辑"选项,就可以看到组策略的管理界面(MMC)。在此界面中,可以对计算机或者用户选择"软件设置"-"软件安装"一项,从右键的任务菜单中选择"新建"-"软件包"。通过指定一个网络上共享目录中的某个.msi文件,就可以"分配"或者"发布"一个软件。"分配"是强行给目标对象安装软件,"发布"是在目标对象的"控制面板"-"增加/删除软件"中提供安装所分发软件的选项。如果是分发给计算机的,则是在计算机启动的时候实施;如果分发给用户的,则是在用户登录的时候实施。在组策略中,可以编辑软件包分发任务的属性,以便软件升级。还可以右键点击某个软件包,选?quot;去除",系统就会自动删除已分发的软件。
在组策略的"软件设置"属性页中,管理员还可以建立文件后缀和应用程序之间的联系。当用户双击某个后缀的文件,即使他的本地系统上没有安装打开所需的应用软件,也仍然能打开该文件,因为Installer服务会聪明地帮用户在不知不觉中安装这个应用软件。
4.用户设置管理
在组策略中的智能镜像功能,可以使用户的桌面或系统设置跟着用户移动;不管用户从何处登录到网络,用户都会获得一贯的工作环境,减少熟悉新环境的困惑和时间。管理用户设置的能力包括如下的内容:登录/注销、桌面显示、开始菜单、网络环境和计算机功能限制等内容。
智能镜像是Windows 2000中的核心特性之一,是活动目录、组策略、脱机文件夹等一系列技术配合作用的总称,使我们在网络时代里适应瞬息万变的业务需要,积极主动地管理系统的变化和配置。
五、安全特性
Windows 2000实现了如下的特性:数据安全性、企业间通信的安全性、企业和Internet网的单点安全登录、以及易用和良好扩展性的安全管理。
1.数据安全性
Windows 2000所提供的保证数据保密性和完整性的特性,主要表现在以下三个方面:1)用户登录时的安全性:从用户登录网络开始,对数据的保密性和完整性的保护就已经开始了。2)网络数据的保护:包括在本地网络上的数据或者穿越网络的数据。3)存储数据的保护:可以采用数字签名来签署软件产品(防范运行恶意的软件),或者加密文件系统。
2.企业间通信的安全性
Windows 2000为不同企业之间的通信,提供了多种安全协议和用户模式的内置的集成支持。它的实现可以从以下三种方式中选择:1) 在目录服务中创建专门为外部企业开设的用户账号:通过Windows 2000的活动目录,可以设定组织单元、授权或虚拟专用网等方式,并对它们进行管理。2) 建立域之间的信任关系:用户可以在Ker beros或公用密钥体制得到验证之后,远程访问已经建立信任关系的域。3) 公用密钥体制:电子证书可以用于提供用户身份确认和授权,企业可以把通过电子证书验证的外部用户映射为目录服务中的一个用户账号。
3.企业和Internet网的单点安全登录
当用户成功地登录到网络之后,Windows 2000透明地管理一个用户的安全属性(Security Credentials),而不管这种安全属性是通过用户帐号和用户组的权限规定(这是企业网的通常做法)来体现的,还是通过数字签名和电子证书(这是Internet的通常做法)来体现的。先进的应用服务器都应该能从用户登录时所使用的安全服务提供者接口(SSPI)获得用户的安全属性,从而使用户做到单点登录,从而访问所有的服务。
4.易用的管理性和高扩展性
通过在活动目录中使用组策略, 管理员可以集中地把所需要的安全保护加强到某个容器(SDOU)的所有用户/ 计算机对象上。Windows 2000包括了一些安全性模版,既可以针对计算机所担当的角色来实施,也可以作为创建定制的安全性模版的基础。
Windows 2000提供了两个微软管理界面(MMC)的插件作为安全性配置工具,即安全性模版和安全性配置/分析。安全性模版MMC提供了针对十多种角色的计算机的管理模版,这些角色包括从基本工作站、基本服务器一直到高度安全的域控制器。通过安全性配置/分析MMC,管理员可以创建针对当前计算机的安全性策略。安全性管理的扩展性表现为,在活动目录中可以创建非常巨大的用户结构,用户可以根据需要访问目录中存储的所有信息,但是用户受到所在的域或组织单元仍然是安全性的边界,对访问的权限进行管制。
优秀的稳定性
与Windows 9X的16/32位混合代码结构不同,Windows XP建立在久经考验的Windows NT和Windows 2000代码基础之上,采用了纯32位代码结构和完全受保护的内存模型,保持了系统最大的稳定性和性能。Windows XP继承了Windows 2000的稳定性,增强的"文件保护"和"系统还原功能"使Windows XP成为有史以来最为稳定的Windows系统。
Windows文件保护
我们可能都有类似的经历,Windows 9X系统在经过一段时间的使用或者不断地安装各种应用程序后,会变得越来越脆弱,这主要是由于"DLL 陷阱"即DLL链接错误或缺失所造成的。在Windows设计之初,为了让拥有较少系统资源的计算机实现多任务和多线程,需要尽可能地将有限的资源共享。然而,随着Windows系统越来越复杂,共享系统文件可能就意味着要承担将Windows系统重要的系统文件被覆盖的危险,其后果可想而知。
Windows文件保护
Windows文件保护能检测到应用程序要替换或移动受保护的系统文件的企图,例如.sys、.dll、.ocx、.ttf、.fon和.exe文件。通过检测文件的数字签名,以确定新文件的版本是否为正确的Microsoft版本。如果文件版本不正确,Windows文件保护会从Dllcache文件夹或Windows CD中存储的备份文件替换该文件。默认情况下,Windows文件保护一直处于启用状态,同时允许Windows数字签名文件替换现有文件。
禁用驱动程序
对于没有数字签名并且不兼容的硬件或软件,Windows XP将自动禁止安装该软件或硬件的驱动程序。为了帮助维护系统的完整性,可以使用"文件签名验证"检测系统关键文件的签名文件并查看它们的相关信息。
禁用驱动程序
系统还原
Windows XP的系统还原功能比Windows Me有了很大的改进。当怀疑一个或多个特定的驱动程序导致系统不稳定,禁用或移除该设备不能解决问题时;或者安装新的应用程序导致系统不稳定或应用程序运行不正常,删除该程序不能解决问题时,可以采用系统还原使系统恢复到安装程序之前的状态。
设备驱动程序恢复
为了保证系统的稳定性,在安装任何新的驱动程序时,系统都会检查该驱动程序的数字签名。如果用户在安装了一种新的硬件驱动程序而发现系统不稳定或硬件无法工作时,只需在"设备管理器"中选择"驱动程序恢复",即可恢复先前正常的系统状态。但是,使用设备驱动程序恢复功能不能还原打印机驱动程序。
驱动程序恢复
最后一次正确的配置
当怀疑系统重新启动之前针对计算机所进行的更改可能导致故障时,可以在启动系统时按F8键,选择"最后一次正确的配置"恢复对系统所做的更改。
自动系统恢复
自动系统恢复(Automated System Recovery,ASR)应该是系统恢复的最后手段,ASR在系统遇到灾难性故障时非常有用。
自动系统恢复
增强的软硬件设备兼容性
兼容性永远是用户关注的焦点。在升级操作系统之前,每一位用户都会认真考虑他们的硬件和应用软件能不能在新的操作系统上正常工作。微软表示,他们在兼容性问题上投入了1.5亿美元的资金,计划使Windows XP支持大约12000种第三方设备和6500多种应用程序。
软件兼容性
Windows XP采用"AppFixes"模拟仿真技术,通过模拟与软硬件设备适应的操作环境来解决不兼容的问题。一般情况下,Windows XP会根据应用程序的要求自动模拟相应的操作环境。当然,用户也可以手动指定。另外,"AppFixes"模拟仿真技术的驱动数据库也支持动态升级,它的模拟注册表和文件属性的功能也会不断增强。
在对游戏的支持方面,虽然Windows XP通过内置的DirectX 8.0提高了对游戏的支持程度,但是由于采用NT内核,即使在"兼容模式"下运行,那些无法正确运行的游戏依然故我,而绝大多数基于DOS平台运行的游戏几乎都无法正常地在Windows XP里运行。
硬件兼容性
为了改进Windows 2000硬件兼容性差的缺点,并最终使NT成为家用操作系统的核心,微软为Windows XP编写了大量的硬件驱动程序,并进行了广泛的测试,以保证Windows XP的驱动程序尽可能地与各种硬件兼容。典型的例子就是对VIA芯片组的支持,从Apollo Pro133/133A、PM/KM、KT133/KT133A 到最新的Pro266和KT266,由于有了Windows XP强有力的支持,用户不必为芯片组或VIA的AGP控制器安装其他驱动程序。
兼容模式
另外,Windows XP操作系统将全面支持AMD的Athlon/Duron处理器,这也是微软的操作系统首次支持AMD的处理器,而且AMD与微软目前还在合作开发Go-To-Market计划。
Windows XP的标准驱动程序也得到了极大的加强,即使采用标准硬件驱动程序也能达到比较令人满意的性能。另外,Windows XP还增加了处理器的驱动程序,和其他驱动程序一样,处理器的驱动程序也能在设备管理器中进行设置和更改。由于有了处理器驱动程序,使Windows XP能通过升级驱动程序的方法,来支持新的处理器。
Windows XP logo计划
为了保证软件和硬件厂商的产品能够与Windows XP兼容并出色运行,微软公司推出Windows XP logo计划。经过微软测试并满足微软公司提供的应用程序技术规范的软硬件产品将被授权使用"Designed for Microsoft Windows XP"商标。
强大的安全性
安全性是操作系统的一个重要的指标。Windows XP提供了大量有助于确保数据安全和保护用户隐私的增强特性。
真正的多用户
Windows XP 中的"用户账户"能够存储多个账户的个性化设置和参数。通过采用先进的终端服务技术,系统为每个用户创建不同的用户文件夹、不同的配置文件,可以保证每个用户的数据彼此完全分开,增加了用户个人数据的安全系数。此外,Windows XP还具备快速用户切换功能,在一台运行Windows XP操作系统的计算机上可以同时打开多个用户账户,并且不会打断这些本地登录用户正在运行着的程序,甚至包括Internet连接。这是操作系统的一大突破,它把以前只能在网络服务器中实现的多用户模式在本地登录的用户上实现了。
个人隐私管理
Internet Explorer 6.0支持W3C协会的P3P标准,它使用户对自己的个人信息拥有更多的自主权,因而当用户访问Internet时可以有效控制个人信息的安全。IE6.0提供多种cookie管理方式,例如:禁止接受所有cookie;禁止接受第三方cookie(即并非源自正被访问的Web站点所在的域,因而不受该Web站点的隐私策略约束的cookie);接受所有cookie等。
隐私设置
Internet连接防火墙
Windows XP的ICF(Internet连接防火墙)使用激活的包过滤技术,防火墙的端口仅动态地为那些必须的访问打开。默认的情况下,ICF不允许没有被确认的通信进入。这种类型的防火墙技术和一般企业的防火墙一样,可以阻止黑客扫描用户的计算机端口和资源。但是,ICF不具备所有企业方案所需的特点和功能,它只能为防止没有授权的访问作一些基本的工作。
支持多用户的加密文件系统
EFS(加密文件系统,Encrypting File System)是加密和解密存储在NTFS卷下文件的核心技术。文件被加密后,即使入侵者对存储数据的计算机拥有完全访问能力也无法打开该文件,只有授权用户才可以对文件进行解密。Windows 2000使用EFS对磁盘文件进行加密。在Windows XP中,微软对这一功能做了进一步的加强,EFS允许多个用户访问同一个加密文档。EFS还与客户端的脱机文件夹一起工作,用来加密脱机文件和文件夹。
软件限制策略
软件限制策略是提供给管理员的策略驱动机制,通过它管理员可以识别域中运行的软件,并对软件的执行有控制能力。软件限制策略可以防御基于脚本的病毒和特洛伊木马程序。通过配置软件限制能够实现仅允许IT组织成员签名的脚本执行,这样可以禁止所有基于脚本的病毒,例如I LOVE YOU.VBS。软件限制策略可用于单独的计算机,也适用于组策略,它可以为不同的用户和计算机定制不同的软件限制策略。
软件限制策略
使用IP安全策略
Internet协议安全(IPSec)是一套Internet 标准协议,允许网络上的两台计算机进行安全的、加密的通讯。IPSec提供端对端的安全性,意味着IP包由发送计算机加密,在途中不可读取,只能由收件计算机解密。为了更加安全,此过程使用加密算法来产生用于连接两端的单一加密钥,只有经过身份验证的计算机才能进行数据交换。IPsec较好地融合了加密技术和访问控制技术,是抵御内部、专用网络以及外部攻击的关键防线。IPSec行为是使用IPSec策略来控制的,用户可以使用IP安全策略管理单元来配置和指派IPSec策略。
安装 IP 安全策略管理单元
智能卡支持
智能卡是一种信用卡大小的设备,可用于存储签名密码、公钥和私钥以及其他个人信息。通过智能卡登录到网络提供了很强的身份验证方式,这种方式使用了基于加密的用户个人身份验证和智能卡所有权验证。智能卡可为确保诸如电子邮件和域登录安全这样的任务而提供防篡改和可移动的安全解决方案。
出色的多媒体功能
与Windows的早期版本相比,Windows XP的多媒体功能更为丰富和出色。同时,Windows XP还支持更多的多媒体硬件设备,例如数字相机和MP3设备。
图片收藏
"图片收藏"提供了多种图片文件的管理方式。该文件夹含有指向专门图片任务的链接,这些任务(例如作为幻灯片查看、打印图片、以电子邮件方式发送图片、Web发布以及联机订购照片等)可帮助用户更方便地管理图片。
Windows Media Player 8
Windows Media Player 8可以播放多种类型的音频和视频文件。另外,使用Windows Media Player 8还可以制作自己的音乐CD。需要注意的是,Windows Media Player 8并没有内置DVD解码器,用户可以从第三方制造商那里获得Windows XP兼容的DVD解码器。
Windows Movie Maker 1.1
Windows Movie Maker为用户提供了一整套视频文件的采集、编辑和制作方案。在创建电影的过程中,除了使用用户自己采集的内容外,还可以导入其他音频和视频文件。创建后的电影文件将以高度压缩的格式进行保存,以方便用户通过电子邮件或网络进行传输。
Windows图像捕获
Windows Imaging Acquisition(WIA,Windows图像捕获)在Windows Me中首次出现,Windows XP对其进行了进一步的加强。WIA能够将兼容的图像设备直接集成进Windows系统,用户可以像使用本地硬盘上的文件一样,直接对数码相机中的文件进行方便的预览、删除、导入等操作。
卓越的移动支持功能
Windows XP移动计算性能的改善建立在Windows 2000的灵活性之上,加上Windows XP的稳定性、安全性和通讯功能,新的移动计算功能使用户不论何时何地都能保持在线连接。
无线连接
Windows XP支持IEEE 802.11b无线通讯标准,通过增强的媒介探测功能,Windows XP可以自动检测在有效距离之内是否有无线网络接入点,并自动建立连接。启用自动无线网络配置的计算机可以在不同的无线网络间漫游,当计算机从一个位置移动到另一个位置时,自动无线网络配置自动搜索可用的无线网络,并通知何时有可供连接的新无线网络。选择要连接的无线网络之后,自动无线网络配置将无线网络适配器更新为匹配的设置,并尝试进行连接。登录Internet后,用户就能使用Windows XP虚拟专用网络技术安全地登录网络。
远程桌面
远程桌面功能允许用户使用Microsoft的RDP协议(远程桌面协议)在目标计算机上创建一个虚拟对话。借助远程桌面功能,可以通过任意网络连接(包括拨号连接和VPN连接)访问到目标计算机上的所有数据和应用程序。
远程桌面
虽然Windows 2000也具有"远程桌面"功能,但却对系统有着较高的要求,只有服务器版本的Windows 2000才带这个功能。通过Windows XP的"远程桌面"功能,用户可以通过任何运行Windows 95及更高版本的电脑与目标计算机建立连接。"远程桌面"通过网络连接只传输屏幕数据、键盘输入和鼠标点击,由于无须通过网络传输文件和应用程序,所以性能出色。
高级的笔记本电脑支持
清晰(ClearType):ClearType是Microsoft在字体清晰度方面的最新技术突破。ClearType是一种新的文本显示技术,它在渲染文本的时候,通过软件将水平分辨率提高三倍。ClearType能够在液晶显示器(LCD)上更加清晰地显示文本,但是对阴极射线管显示器不起任何作用。
DualView:Dualview与多监视器特征非常相似,不同之处是不能选择主显示。在便携式计算机上,主监视器总是LCD显示屏幕。通过Dualview,用户只需一个视频适配器即可将显示扩展到第二台监视器上。
改良的电源管理:通过智能监视CPU状态,Windows XP可以降低能耗,并且更加精确地预测电池剩余使用时间,防止系统过早关机。
Microsoft .NET战略
Windows XP包含Microsoft .NET的重要核心构造模块服务,如Windows Messenger、Passport以及动态数据传送等。但是Windows XP仍然不是真正的.NET平台,第一个.NET版的Windows代号是BlackComb,将在2002年或更晚的时候推出。
身份认证:.NET Passport
身份认证建立在微软Passport和Windows鉴定技术的基础上,为用户提供多级身份鉴定。Windows XP中的.NET Passport向导可帮助用户获得.NET Passport,或者使用已有的Passport进行登录。Passport使用户能够使用电子邮件地址(必须是Hotmail或MSN邮箱)以个性化方式访问所有启用Passport的服务及网站。
即时通讯:Windows Messenger
Windows Messenger集电子邮件、即时文本信息、即时视频信息、网络电话、远程协助及应用程序和数据文件的共享等功能于一体,它是微软为各种即时通讯技术搭建的统一平台。其技术的先进性和功能的丰富性是其他即时通讯工具所无法比拟的。
动态传送:Windows Update
在用户使用Windows XP的过程中,Windows Update能够自动下载计算机操作系统、应用程序和硬件驱动程序的更新补丁,自动更新会根据用户计算机的设置提供更新选项供用户选择。同时,Windows XP还支持动态更新的安装程序,在升级安装Windows XP的过程中,安装程序会提示用户安装最新的更新程序。
Windows XP Update
Windows Update使微软和其他软硬件开发商能够以动态的方式按照用户的需求,传送更多的软件功能和可靠的自动升级补丁,而不必麻烦用户动手安装和配置。这正是Microsoft .NET"软件变服务"理念的延伸。
更强的中文特性
Windows XP全面支持中文技术国家标准,支持2.7万字的中文大字符集。为国内用户提供了强有力的中文支持。
本地兼容特色
在Windows XP中文版的研发过程中,为了使产品能更好地满足国内用户的需求,微软(中国)有限公司选择了国内市场上流行的100多种中、英文应用程序进行软件兼容性测试,大大改进了Windows XP中文版对本地应用软件的支持。在硬件兼容性测试中,微软对国内最大的七家OEM厂商的26种不同型号的家用、商用及笔记本电脑进行了全面的硬件兼容性测试,使这些OEM厂商的产品兼容性得到了最大限度的保证。
微软拼音输入法3.0
作为国内第一个以语句为基础的、基于统计和语言规则模型的中文输入法,微软拼音输入法3.0的准确率现在已经达到95.6%。此外,微软拼音输入法3.0还为用户提供了一些新的或改进的特性。例如,中英文混合输入、词语模式、候选窗口和逐键提示等。
智能检索与查询
Windows XP全面支持中文知识库的在线搜索,使广大中国用户不仅可以搜索本机帮助系统,而且还可以搜索位于Internet上大量的中文知识库文章。
Windows XP中文版的安全特性
根据国务院于1999年颁布的《商用密码管理条例》,由于Windows 2000的安全系统与我国的安全标准不符,致使其在我国的市场份额受到一定的影响。鉴于此,微软于今年7月正式与中国计算机软件与技术服务总公司(中软)达成协议,宣布中软将为微软的Windows 2000和即将发布的Windows XP的中文版开发专用的安全产品,这意味着微软的Windows 2000和Windows XP中文版中涉及到信息安全的商用密码部分将由中软提供。这将大大消除国内用户对微软产品的不信任感,从而满足我国一些特殊领域对于数据传输安全的需要。
Windows XP的一些特色功能
Internet连接共享
Windows 98SE/Me和Windows 2000就已提供Internet连接共享,Windows XP对这一功能作了进一步改善。"网络设置向导"可以指导用户配置家庭网络或小型办公局域网,"Internet连接共享"可设置网络上所有计算机均使用一个 Internet连接,并且还可以对网络中的所有计算机启用"Internet 连接防火墙"。
文件和设置转移向导
当用户重新安装系统或希望把一台计算机上的设置完全转移到另一台计算机上时,可以利用"文件和设置转移向导"将个人设置和文件完全"克隆"到新的系统中,而不必重新进行复杂的配置。例如,可将原来计算机上的个人显示属性、文件夹和任务栏选项、Internet浏览器和邮件设置转移到新计算机中。该向导还可以转移指定文件或整个文件夹,例如"我的文档"、"图片收藏"以及"收藏夹"等。
文件和设置转移向导
时间同步
Windows XP增强了系统的"日期和时间"属性,用户可以使系统时间自动与Internet时间服务器同步。Windows XP默认使用time.Windows.com和time.nist.gov两个时间服务器,如果要使用其他时间服务器,可以在"服务器"窗口中键入该服务器的名称。注意,如果用户计算机的日期不正确,Internet 时间服务器将不执行同步。
自动与Internet时间服务器同步
传真
Windows XP的"传真"功能在计算机上为用户提供了完善的传真服务。用户可以配置传真设置、发送和接收传真、跟踪和监视传真活动以及访问存档的传真等。使用"传真",可选择使用连接在计算机上的本地传真设备来发送和接收传真,或者使用连接到位于网络上的远程传真设备来发送和接收传真。
传真控制台
zip压缩文件夹
Windows XP中的zip压缩文件格式与其他文件压缩程序兼容,用户无需解压即可直接运行压缩文件夹中的某些程序,同时还可以用密码保护zip压缩文件夹中的文件。而且,与使用非压缩文件夹一样,使用"zip 压缩文件夹"不会降低系统的性能。
第四节 Wndows 2003操作系统介绍
Windows Server 2003 是在可靠的 Windows 2000 Server 系列的基础上生成的,它集成了功能强大的应用程序环境以开发全新的 XML Web 服务和改进的应用程序,这些程序将会显著提高进程效率。下面这些主要的新增功能和改进是为考虑从 Windows 2000 Server 升级到 Windows Server 2003 的单位提供的。
1. Active Directory 改进
在 Windows 2000 引入的 Microsoft Active Directory®服务简化了复杂网络目录的管理,并使用户即使在最大的网络上也能够很容易地查找资源。此企业级目录服务是可扩展的,完全是基于 Internet 标准技术创建的,并与 Windows .NET Server 2003 标准版、Windows .NET Server 2003 企业版和 Windows .NET Server 2003 Datacenter 版中的操作系统完全集成。
Windows Server 2003 为 Active Directory 提供许多简捷易用的改进和新增功能,包括跨森林信任、重命名域的功能以及使架构中的属性和类别禁用,以便能够更改其定义的功能。
2. 组策略管理控制台
管理员可以使用组策略定义设置以及允许用户和计算机执行的操作。与本地策略相比,企业用户可以使用组策略在 Active Directory 中设置应用于指定站点、域或组织单位的策略。基于策略的管理简化了系统更新操作、应用程序安装、用户配置文件和桌面系统锁定等任务。
组策略管理控制台 (GPMC) 预计可作为 Windows Server 2003 的附加程序组件使用,它为管理组策略提供了新的框架。有了 GPMC,组策略使用起来将更简单,此优势将使更多的企业用户能够更好地使用 Active Directory 并利用其强大的管理功能。
3. 策略结果集
策略结果集 (RSoP) 工具允许管理员查看目标用户或计算机上的组策略效果。有了 RSoP,企业用户将具有强大灵活的基本工具来计划、监控组策略和解决组策略问题。
RSoP 是以一组 Microsoft 管理控制台 (MMC) 管理单元的形式提供的结构。这些管理单元让管理员以两种模式确定并分析当前的策略集:登录模式和计划模式。在登录模式中,管理员可以访问已应用到特定目标的信息。在计划模式中,管理员可以看到策略将如何应用到目标,然后在部署组策略的更改之前进行检查其结果。
4. 卷影子副本恢复
作为卷影子副本服务的一部分,此功能使管理员能够在不中断服务的情况下配置关键数据卷的即时点副本。然后可使用这些副本进行服务还原或存档。用户可以检索他们文档的存档版本,服务器上保存的这些版本是不可见的。
5. Internet Information Services 6.0
Internet Information Services (IIS) 6.0 是启用了 Web 应用程序和 XML Web 服务的全功能的 Web 服务器。IIS 6.0 是使用新的容错进程模型完全重新搭建的,此模型很大程度上提高了 Web 站点和应用程序的可靠性。
现在,IIS 可以将单个的 Web 应用程序或多个站点分隔到一个独立的进程(称为应用程序池)中,该进程与操作系统内核直接通信。当在服务器上提供更多的活动空间时,此功能将增加吞吐量和应用程序的容量,从而有效地降低硬件需求。这些独立的应用程序池将阻止某个应用程序或站点破坏服务器上的 XML Web 服务或其他 Web 应用程序。
IIS 还提供状态监视功能以发现、恢复和防止 Web 应用程序故障。在 Windows Server 2003 上,Microsoft ASP.NET 本地使用新的 IIS 进程模型。这些高级应用程序状态和检测功能也可用于现有的在 Internet Information Server 4.0 和 IIS 5.0 下运行的应用程序,其中大多数应用程序不需要任何修改。
6. 集成的 .NET 框架
Microsoft .NET 框架是用于生成、部署和运行 Web 应用程序、智能客户应用程序和 XML Web 服务的 Microsoft .NET 连接的软件和技术的编程模型,这些应用程序和服务使用标准协议(例如 SOAP、XML 和 HTTP)在网络上以编程的方式公开它们的功能。
.NET 框架为将现有的投资与新一代应用程序和服务集成起来而提供了高效率的基于标准的环境。
另外,它帮助企业用户解决部署和操作 Internet 范围的应用程序所遇到的问题。
有了完全集成在 Windows Server 2003 操作系统内的 .NET 框架,开发人员可以从编写"管道"代码中解放出来,从而可以将他们的精力集中在实现真正的商业价值方面。.NET 框架兼顾了集成和管理细节,降低了编码复杂性并增加了一致性。
7. 命令行管理
Windows Server 2003 系列的命令行结构得到了显著增强,使管理员无须使用图形用户界面就能执行绝大多数的管理任务。最重要的是通过使用 Windows 管理规范 (WMI) 启用的信息存储来执行大多数任务的功能。此 WMI 命令行 (WMIC) 功能提供简单的命令行界面,与现有的外壳程序和实用工具命令交互操作,并可以很容易地被脚本或其他面向管理的应用程序扩展。
总之,Windows Server 2003 系列中更强大的命令行功能与现成的脚本相结合,可与其他通常具有更高所有权成本的操作系统的功能相抗衡。习惯使用命令行管理 UNIX 或 Linux 系统的管理员可以继续从 Windows Server 2003 系列中的命令行进行管理。
8. 集群(8 节点支持)
此服务仅用于 Windows Server 2003 企业版和 Windows Server 2003 Datacenter 版,它为任务关键型应用程序(例如数据库、消息系统以及文件和打印服务)提供高可用性和伸缩性。通过启用多服务器(节点)集中工作从而保持一致通讯。如果由于错误或维修使得集群中的某个节点不可用,另一个节点将立即开始提供服务,此过程称为故障转移。正在访问该服务的用户将继续他们的活动,而不会察觉到该服务现在是由另一台服务器(节点)提供。
Windows Server 2003 企业版和 Windows Server 2003 Datacenter 版都支持多达 8 个节点的服务器集群配置。
9. 安全的无线 LAN (802.1X)
根据 Windows Server 2003 系列对 802.1X 的支持,公司可以寻求一种安全模型,该模型将确保所有物理访问都是已授权和加密的。使用基于 802.1X 的无线访问点或选项,公司可以确保只有受信任的系统才能与受保护的网络连接并交换数据包。因为是由 802.1X 决定动态密钥,因此通过解决与有线设备隐私 (WEP)(由 IEEE 802.11 网络使用)相关联的许多已知问题将会显著改善 802.1X 无线网络加密。
此功能为无线局域网 (LAN) 提供了安全和性能方面的改进,如访问 LAN 之前的自动密钥管理、用户身份验证和授权。当有线以太网在公共场所使用时,它还提供对以太网络的访问控制。
10. 紧急管理服务: 无外设服务器支持
"无外设服务器"功能使 IT 管理员在没有监视器、VGA 显示适配器、键盘或鼠标的情况下也能安装和管理计算机。紧急管理服务是一种新增功能,它使 IT 管理员在无法使用服务器时通过网络或其他标准的远程管理工具和机制,执行远程管理和系统恢复任务。
第一节 LINUX与Unix
由于Unix操作系统众所周知的稳定性、可靠性,用来提供各种Internet服务的计算机运行的操作系统占很大比例的是Unix及Unix类操作系统,因此需要大量熟练掌握Unix类操作系统应用的人才。目前比较常见的运行在PC机上的Unix类操作系统有:Linux、BSD Unix、Solaris x86、SCO Unix等。一些初学者对于各种类型的Unix系统特性不熟悉,不知道如何选择,本文主要向大家介绍几种免费的Unix,以及如何获得相应的学习资源。
第五节 Linux
Linux是遵循POSIX规范开发的操作系统,保持了与BSD Unix和Unix System Ⅴ的兼容。Linux有很多发行版本,较流行的有:RedHat Linux、Debian Linux、SuSe Linux、Mandrake Linux、RedFlag Linux等。
Linux具有Unix的优点:稳定、可靠、安全,有强大的网络功能。在相关软件的支持下,可实现WWW、FTP、DNS、DHCP、E-mail等服务,还可作为路由器使用,利用ipchains/iptables可构建NAT及功能全面的防火墙。
各种发行版本的Linux一般都可通过Internet免费下载得到。关于Linux的各种书籍也很多,可在一些网上书店搜索到大量Linux书籍的信息。
第六节 FreeBSD
自从1969年AT&&T Bell实验室研究人员创造了Unix,至今Unix已发展成为主流操作系统之一。在Unix的发展过程中,形成了BSD Unix和Unix System Ⅴ两大主流。BSD Unix在发展中形成了不同的开发组织,分别产生了FreeBSD、NetBSD、OpenBSD等BSD Unix。与NetBSD、OpenBSD相比,FreeBSD的开发最活跃,用户数量最多。NetBSD可以用于包括Intel平台在内的多种硬件平台。OpenBSD的特点是特别注重操作系统的安全性。
FreeBSD作为网络服务器操作系统,可以提供稳定的、高效率的WWW、DNS、FTP、E-mail等服务,还可用来构建NAT服务器、路由器和防火墙。
FreeBSD有两个开发分支,FreeBSD-CURRENT和FreeBSD-STABLE。前者包括正在发展中的、实验中的程序,这是一个正在开发的版本,还不成熟,不适合生产使用。使用者多为FreeBSD的开发测试人员及FreeBSD爱好者。目前这个分支的最新版本是FreeBSD 5.1-RELEASE。FreeBSD-STABLE是一个稳定的版本,实验性的或是未测试过的功能不会出现在这个分支上。这个版本可用于生产服务器。目前这个分支的最新版本是FreeBSD 4.8-RELEASE。
关于FreeBSD的书籍,市面上能见到的有《FreeBSD 技术内幕》、《FreeBSD Handbook(第二版)中文版》、《FreeBSD 使用大全(第二版)》等。
第七节 Solaris x86
Solaris是Sun公司开发和发布的企业级操作环境,有运行于Intel平台的Solaris x86系统,也有运行于SPARC CPU结构的系统。它起源于BSD Unix,但逐渐转移到了System Ⅴ标准。在服务器市场上,Sun的硬件平台具有高可用性和高可靠性,Solaris是当今市场上处于支配地位的Unix类操作系统。目前比较流行的运行于x86架构的计算机上的Solaris有Solaris 8 x86和Solaris 9 x86两个版本,它们都可以从Sun的官方网站下载,也可以从国内外其他一些站点免费下载。对于难以接触到Sun SPARC架构计算机的用户可以通过使用Solaris x86体验世界知名大厂的商业Unix的风采。当然Solaris x86也可以用于实际生产应用的服务器。在遵守Sun的有关许可条款的情况下,Solaris x86可以免费用于学习研究或商业应用。国内关于Solaris 8和Solaris 9的书籍还是比较多,从一些网上书店可以搜索到不少的关于Solaris的书籍。
第四章 计算机语言的基本要素
计算机语言是由很多语法元素组成的这些元素就犹如建筑的砖石,它们构成了搭建计算机的程序的最基础的元素。在这里我们以Object Pascal语言为基础来讲述这些编程的要素,因为我认为Object Pascal是结构最为清晰、最易理解的面向对象语言,同其它面向对象的语言比也是大同小异。
第一节 标识符
标识符就是名字,你必须为程序里的每个常量、变量、字段、类型、属性、过程、函数、程序、单元、库以及包起一个名字,程序才能正确的辩识出它们。标识符只能是英文字母、数字或_的组合并且必须以字母或下划线开始,长度一般不超过255个字符。例如:i,j,T_Class,Price,FileName01等都是合法的标识符名称。
在程序里良好的编程习惯是使用的意义的字符串来为变量、函数等命名如:Age、FileName
第二节 关键字,保留字
是指在编程语言中有特殊意义的名字,该名字不能被声明为标识符,如:Class、String,Char,Integer等。
第三节 变量
变量就是用标识符声明的,值为声明类型并且是可以改变的一个名称,我们能通过这个名称来引用这它所代表的值。如: A5=124、OrderName='采购单'
第四节 常量
基本和变量一样区别只在于常量的值是不可以改变的,通常用来代表一些有意义的数字或字符串如:Language=Chinese、CODE=936
第五节 表达式
表达式是一个有返回值的语句构造。比如,
X { 变量 }
@X { 变量地址 }
15 { 整数常量 }
Calc(X,Y) { 函数调用 }
X * Y { X和Y 的乘积
Z / (1 - Z) { Z 和(1 - Z)的商
X = 1.5 { 布尔 }
C in Range1 { 布尔 }
not Done { 布尔的否 }
['a','b','c'] { 集合 }
Char(48) { 类型转换 }
第六节 运算符
常用的运算符有算术运算符、逻辑运算符
operators(算术运算符)
算术运算符作用于实数或整数,包括 + 、- 、* 、 /、 div 和 mod。
运算符 运算 运算数类型 返回类型 例子
+ 加 整数,实数 整数,实数 X + Y
- 减 整数,实数 整数,实数 Result - 1
* 乘 整数,实数 整数,实数 P * InterestRate
/ 实数除 整数,实数 实数 X / 2
div 整数除 整数 整数 Total div UnitSize
mod 余数 整数 整数 Y mod 6
Boolean operators(布尔运算符)
布尔运算符not、and、or 和xor 作用于任何布尔类型的运算数或表达式,并返回一个布尔类型(真或假)的值。
运算符 运算 运算数类型 结果类型 例子
not 否 布尔 布尔 not (C in MySet)
and 与 布尔 布尔 Done and (Total > 0)
or 或 布尔 布尔 A or B
xor 异或 布尔 布尔 A xor B
这些运算遵循标准的布尔逻辑规则。比如,像x and y 形式的表达式,当且仅当x 和y 都为True
时,它的结果才为True。
Relational operators(关系运算符)
关系运算符用来比较两个运算数包括:=、>,<,<>、<= 和 >=
例子
布尔 I = Max
<> 不等于 simple, class, class reference,
interface, string, packed string
布尔 X <> Y
< 小于 simple, string, packed string, PChar 布尔 X < Y
> 大于 simple, string, packed string, PChar 布尔 Len > 0
<= 小于等于 simple, string, packed string, PChar 布尔 Cnt <= I
>= 大于等于 simple, string, packed string, PChar 布尔 I >= 1
第七节 语句
语句分为简单语句和复合语句。
简单语句:
1) 赋值语句
赋值语句的格式如下
variable := expression
这里,variable 是任何变量引用,包括变量、变量类型转换、解除引用的指针,或者一个结构变量的组成部分;expression 是任何一个赋值兼容的表达式。(在函数块中,variable 能被函数名取代,参考Proceduresand functions。)符号 := 有时叫做赋值运算符。
赋值语句使用expression 的值取代variable 的当前值。比如,
I := 3;把3 赋给变量I。赋值语句左边的变量引用能出现在右边的表达式中。比如,
I := I + 1;
增加I 的值。其它赋值语句的例子包括
X := Y + Z;
Done := (I >= 1) and (I < 100);
Hue1 := [Blue, Succ(C)];
I := Sqr(J) - I * K;
Shortint(MyChar) := 122;
TByteRec(W).Hi := 0;
MyString[I] := 'A';
SomeArray[I + 1] := P^;
TMyObject.SomeProperty := True;
2) 过程和函数调用
过程调用包含过程名(有或没有限定符),后面跟参数列表(若需要的话)。例子包括
PrintHeading;
Transpose(A, N, M);
Find(Smith, William);
Writeln('Hello world!');
DoSomething();
Unit1.SomeProcedure;
TMyObject.SomeMethod(X,Y);
复合语句
1) 判断语句:
if 语句有两种形式:if...then 和if...then...else。
if...then 语句的语法是:
if expression then statement
这里,expression 返回一个布尔值。若expression 是True,则statement 被执行,否则它不执行。比如,
if J <> 0 then Result := I/J;
if...then...else 的语法是:
if expression then statement1 else statement2
这里,expression 返回一个布尔值。若expression 是True,则statement1 被执行,否则执行statement2。比如,
If J = 0 then
Exit
else
Result := I/J;
then 和else 子句每个(只)包含一个语句,但它可以是结构语句。比如,
if J <> 0 then
begin
Result := I/J;
Count := Count + 1;
end
else if Count = Last then
Done := True
else
Exit;
2) 分支语句:
相对于嵌套if 语句的复杂性,case 语句具有更好的可读性。case 语句的形式是
case selectorExpression of
caseList1: statement1;
...
caseListn: statementn;
end
这里,selectorExpression 是任何一个有序类型的表达式(字符串无效),每个caseList 是下列之一
• 数字、声明的常量或者编译器不需要执行程序就能计算的表达式。它必须是和selectorExpression 兼
容的有序类型。所以,7、True、4+5*3、'A'、以及Integer('A')都能用于caseLists,但变量和大多数
函数不行(少数内置的函数,比如Hi 和Lo 能出现在caseList,参考Constant expressions)。
• 具有First..Last 形式的子界类型,这里,First 和Last 都满足上面的条件并且First 小于或等于Last。
• 具有item1, ..., itemn 形式的列表,这里,每个item 满足上面的两个条件之一。
caseList 所表示的每个值必须是唯一的,子界类型和列表不能重叠。case 语句在最后能有一个else 子句:
case selectorExpression of
caseList1: statement1;
...
caseListn: statementn;
else
statements;
end
这里,statements 是由分号隔开的语句序列。当case 语句执行时,statement1 到statementn 中最多有一个
3) 循环语句:
REPEAT 语句
repeat 语句的语法是
repeat statement1; ...; statementn; until expression
这里,expression 返回一个布尔值(until 之前的最后一个分号是可选的)。repeat 语句顺序执行它的命令序列,在每次循环之后测试expression,当expression 返回True 时,repeat 语句就停止。repeat 语句中的命令总是至少执行一次,因为直到完成第一次循环才测试expression。repeat 语句的例子包括:
repeat
K := I mod J;
I := J;
J := K;
until J = 0;
repeat
Write('Enter a value (0..9): ');
Readln(I);
until (I >= 0) and (I <= 9);
WHILE语句
while 语句和repeat 语句类似,除了它的控制条件在第一次循环之前进行测试。因此,若条件为假,则命令永远不会执行。
while 语句的语法是
while expression do statement
这里,expression 返回一个布尔值,statement 可以是复合语句。while 语句重复执行构成它的命令,在每次循环前测试expression 的值。只要expression 返回True,执行就继续下去。while 语句的例子包括
while Data[I] <> X do I := I + 1;
while I > 0 do
begin
if Odd(I) then Z := Z * X;
I := I div 2;
X := Sqr(X);
end;
while not Eof(InputFile) do
begin
Readln(InputFile, Line);
Process(Line);
end;
FOR语句
for 语句不像repeat 和while 语句,它需要你明确指定循环进行的次数。for 语句的语法是
for counter := initialvalue to finalvalue do statement
或
for counter := initialvalue downto finalvalue do statement
• counter 是一个有序类型的局部变量(在包含for 语句的块中声明),没有任何限定符;
• initialvalue 和finalvalue 是和counter 赋值兼容的表达式;
• statement 是简单或结构语句,它不改变counter 的值。
for 语句把initialvalue 的值赋给counter,然后重复执行statement,在每次循环后增加或减小counter 的值(for...to 增加counter,而for...downto 减小counter)。当counter 的值和finalvalue 相同时,statement再执行一次然后for 语句终止。换句话说,对于initialvalue 到finalvalue 之间的每个值,statement 都执行一次。若initialvalue 等于finalvalue,statement 实际执行一次;若在for...to 语句中initialvalue 比finalvalue大,或在for...downto 语句中initialvalue 比finalvalue 小,statement 永远不会执行。在for 语句终止后,counter 值处于未知状态(未定义)。为控制循环的执行,表达式initialvalue 和finalvalue 在循环开始前只执行一次。因此,for...to 近乎(但不)等于下面的while 结构:
begin
counter := initialvalue;
while counter <= finalvalue do
begin
statement;
counter := Succ(counter);
end;
end
这个结构和for...to 语句的不同之处在于,while 语句在每次循环之前要重新计算finalvalue 的值,若它是
一个复杂表达式,这将明显降低执行速度,而且,在statement 中改变finalvalue 的值会影响循环的执行。
for 语句的例子包括
for I := 2 to 63 do
if Data[I] > Max then
Max := Data[I];
for I := ListBox1.Items.Count - 1 downto 0 do
ListBox1.Items[I] := UpperCase(ListBox1.Items[I]);
for I := 1 to 10 do
for J := 1 to 10 do
begin
X := 0;
for K := 1 to 10 do
X := X + Mat1[I, K] * Mat2[K, J];
Mat[I, J] := X;
end;
for C := Red to Blue do Check(C);
第八节 函数与过程
Procedures and functions(过程和函数)
Procedures and functions: Overview(概述)
过程和函数统称为例程(routine),它们是自包含的语句块,能在程序的不同地方调用。函数在在执行时
能返回一个值,而过程不能。
因为函数调用能返回值,它们能被用在赋值和运算表达式中。比如,
I := SomeFunction(X);
调用SomeFunction 并且把它的结果赋给I。函数调用不能出现在赋值语句的左边。
过程调用能被用作一个完整的语句,并且,当启用扩展语法时({$ X+}),函数调用也可以。比如,
DoSomething;
调用DoSomething 例程,若DoSomething 是一个函数,它的返回值被忽略。
过程和函数能递归调用。
Declaring procedures and functions(声明过程和函数)
Declaring procedures and functions: Overview(概述)
声明过程或函数时,要指定它的名称,它使用的参数(数目和类型),如果是函数的话,还有返回值的类
型,这一部分有时被称为原型、标题或头(prototype、heading、header)。然后你为它写一个代码块,当
过程或函数被调用时,它们将会执行。这一部分有时称为例程体或例程块(body、block)。
标准过程Exit 可出现在任何过程或函数中,它结束例程的执行,并立即把程序控制返回到例程调用的地
方。
第九节 类与对象
类(或者类类型)定义了一个结构,它包括字段(也称为域)、方法和属性;类的实例叫做对象;类的字段、方法和属性被称为它的部件(components)或成员。
• 字段在本质上是一个对象的变量。和记录的字段类似,类的字段表示一个类实例的数据项;
• 方法是一个过程或者函数,它和类相关联。绝大多数方法作用在对象(也就是类的实例)上,其它
一些方法(称为类方法)作用在类上面。
• 属性被看作是访问对象的数据的接口,对象的数据通常用字段来存储。属性有存取设定,它决定数
据如何被读取或修改。从程序的其它地方(在对象本身以外)来看,属性在很大程度上就像一个字
段(但本质上它相当于方法,比如在类的实例中并不为它分配内存)。
对象被动态分配一个内存块,内存结构由类类型决定。每个对象拥有类中所定义的每个字段的唯一拷贝,
但一个类的所有实例共享相同的方法。对象分别通过称为构造函数和析构函数的方法创建和销毁。
一个类变量实际是一个指针,它引用一个对象(称它为对象引用),所以,多个变量可以指向同一个对象。
像其它指针一样,一个类变量的值可以是nil。虽然类变量是一个指针,但我们直接用它来表示一个对象,
例如,SomeObject.Size := 100 是把对象的Size 属性设为100,你不能用下面的命令给它赋值:
SomeObject^.Size := 100。
第十节 数据类型
类型在本质上是一种数据的名称。当声明一个变量时,必须指定它的类型;类型决定了它的取值范围和
可以进行的操作(运算)。每个表达式返回一个特定类型的值,函数也是如此;大多数函数和过程要求指
定类型的参数。
Object Pascal 是一种'强类型'语言,也就是说,它对各种数据类型加以区分,并且不总是允许你用一
种数据类型替代另一种。这通常是有好处的,因为它使编译器能聪明地处理数据并且更深入地验证你地
代码,可以避免产生难于调试的运行时错误。但当你需要更多灵活性的时候,也有办法可以绕过强类型
限制,它们包括强制类型转换(typecasting)、指针、变体类型(Variant)、记录中的变体部分(Variant parts
in records)和绝对地址变量。
数据类型就是你把一个二进制数值以什么类型的格式读取和使用常用的类型可分为:
简单类型
Integer types(整数类型)
整数类型表示所有数字的一个子集。一般(generic)整数类型是Integer 和Cardinal,只要可能就尽量使
用它们,因为它们对依赖的CPU 和操作系统作了优化。下表给出了32 位编译器下它们的取值范围和存
储格式:
类型 取值范围 格式
Integer -2147483648..2147483647 32位有符号
Cardinal 0..4294967295 32 位无符号
基本整数类型包括Shortint、Smallint、Longint、Int64、Byte、Word 和Longword。
类型 取值范围 格式
Shortint -128..127 8位有符号
Smallint -32768..32767 16 位有符号
Longint -2147483648..2147483647 32位有符号
Int64 -2^63..2^63-1 64位有符号
Byte 0..255 8位无符号
Word 0..65535 16 位无符号
Longword 0..4294967295 32 位无符号
通常,对整数类型进行(算术)运算返回一个Integer 类型(当前相当于32 位的Longint)。只有当对一
个Int64 类型的整数运算时才返回Int64 类型
Character types(字符类型)
基本字符类型是AnsiChar 和WideChar。AnsiChar 是8 位字符集,它们将依照本地字符集的顺序排列,
这可能是多字节的。AnsiChar 原先是根据ANSI 字符集建立的,但现在扩展为可以指定本地字符集。
WideChar 使用多于一个字节来表示每个字符。在当前实现中,WideChar 依据Unicode 字符集(要意识
到它的实现将来可能会改变),使用一个字的宽度(16-bit)来存储字符。开头的256 个Unicode 字符对
应于ANSI 字符。
一般字符类型是Char,它相当于AnsiChar。因为Char 的实现可能被迫改变,所以,在需要处理不同大
小的字符时,应该使用SizeOf 而不要使用硬编码常数,这通常是个好主意。
一个长度为1 的字符串常量,比如'A',可以表示一个字符。内置函数Chr,返回一个在AnsiChar 或WideChar
取值范围内任意一个整数的字符值。比如,Chr(65)返回字母A。
字符和整数一样,当因为增加或减少而超过它的取值范围的开头或尾部时,它的值将回转(除非开启了
边界检查)
Boolean types(布尔类型)
4 种内置的布尔类型为Boolean、ByteBool、WordBool 和LongBool,Boolean 是首选的,另外三种是为了
和其它语言以及操作系统库相兼容。
一个Boolean 类型的变量占据一个字节,ByteBool 也是,WordBool 类型占据两个字节(1 word),LongBool
占据4 个字节(2 words)。
Boolean 值由内置的常数True 和False 来表示。
Boolean ByteBool, WordBool, LongBool
False < True False <> True
Ord(False) = 0 Ord(False) = 0
Ord(True) = 1 Ord(True) <> 0
Succ(False) = True Succ(False) = True
Pred(True) = False Pred(False) = True
对ByteBool、WordBool 和LongBool 来说,若它的序数不为0,它就被认为是True。在一个需要Boolean类型的环境种,编译器自动把非0 值转换为True。
Enumerated types(枚举类型)
枚举类型定义一个有次序的值的集合:这些值用标志符表示,并被列举出来,但它们并没有内在的含义。
定义一个枚举类型,使用下面的语法:
type typeName = (val1, ..., valn)
这里,typeName 和每个值是有效的标志符。例如,下面的声明
type Suit = (Club, Diamond, Heart, Spade);
定义了一个叫做Suit 的枚举类型,它的可能值包括Club、Diamond、Heart 和Spade。这里,Ord(Club)
返回0,Ord(Diamond)返回1,依此类推。
当定义一个枚举类型时,也就同时定义了它的每一个值:它是类型typeName 的一个常量。如果在同一个
范围内你使用val 标志符用作其它目的,将产生命名冲突
Real types(实数类型)
实数类型定义了一类可以用浮点表示的数字。下表给出了基本实数类型的范围和存储格式:
类型 范围 有效位数 字节大小
Real48 2.9 x 10^-39 .. 1.7 x 10^38 11-12 6
Single 1.5 x 10^-45 .. 3.4 x 10^38 7-8 4
Double 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8
Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19-20 10
Comp -2^63+1 .. 2^63-1 19-20 8
Currency -922337203685477.5808.. 922337203685477.5807 19-20 8
一般实数类型为Real,在当前实现中,它相当于Double。
注意:在Object Pascal 的早期版本中,Real 相当于6 字节的Real48,若要重新编译以前的代码,你可能
要把它改为Real48;你也可以使用{$ REALCOMPATIBILITY ON}编译器指示字把Real 类型转回到原先
类型。
以下备注适用于基本实数类型:
• 保留Real48 是为了向后兼容性。因为它的存储格式在Intel CPU 下不能优化,这将导致比其它浮点
类型运行稍慢。
• Extended 类型比其它实数类型有更高的精度,但不够轻巧。当使用Extended 类型创建的文件要跨平
台共享时,务必小心。
• Comp(computational)类型对Intel CPU 是优化的,表示为64 位整数,但它被分类位实数类型,因
为它的行为不像有序类型(比如,你不能递增和递减)。保留此类型只是为了向后兼容性,使用Int64
可获得更好的性能。
• Currency 类型有固定的小数点,可以把在货币运算中出现的错误减到最少。It is stored as a scaled
64-bit integer with the four least significant digits implicitly representing decimal places. 当在赋值语句
和表达式中与其它实数类型混合使用时,它的值会自动除以或乘上10000。
String types(字符串类型)
About string types(关于字符串类型)
字符串表示一个字符序列。Object Pascal 支持以下种类的内置字符串:
类型 最大长度 所需内存(字节) 用于
ShortString 255 个字符 2 - 256 向后兼容
AnsiString ~2^31 个字符 4 - 2GB 8 位(ANSI)字符
WideString ~2^30 个字符 4 - 2GB Unicode 字符
multi-user servers and multi-language applications
AnsiString,有时称为长字符串,在大多数情况下是首选类型。
在赋值语句和表达式中,字符串类型可以混合使用,编译器自动进行所需的转换。但对于过程或函数,
当使用引用方式传递字符串时,类型必须正确。字符串可明确地被转换为其它类型的字符串。
关键字string 用起来就像一个一般类型名,例如
var S: string;
声明一个变量S,它保存字符串类型。在默认的{$ H+}状态下,编译器把string(当它的后面没有包含数
字的中括号时)解释为AnsiString;使用{$ H-}指示字把它解释为ShortString。
标准函数Length 返回一个字符串的字符个数;SetLength 设置一个字符串的长度。
对字符串的比较,是比较它们对应位置上的字符大小(顺序)。对长度不等的字符串,较长字符串上多余
的字符被认为较大(若前面没有比较出大小)。例如,'AB'比'A'大,也就是说,'AB' > 'A'返回True。零长
度的字符串有最小值。
复合类型
Arrays(数组)
Arrays: Overview(概述)
一个数组是由相同类型的(称为基础类型)、经过索引的元素组成的聚集。因为每个元素有唯一的索引,
所以,数组和集合不同,它可以包含多个相同的值。数组可以静态分配内存,也可以动态分配。
Static arrays(静态数组)
静态数组类型以下面的格式声明:
array[indexType1, ..., indexTypen] of baseType
这里,每个indexType 是有序类型并且范围不超过2G。因为indexType 是数组的索引,所以,数组包含
的元素个数由indexType 的范围限定。在实际应用中,indexType 通常是整数子界类型。
最简单的是一维数组,它只有一个indexType,比如:
var MyArray: array[1..100] of Char;
声明了一个变量MyArray,它是一个有100 个字符的数组。给定上面的声明,MyArray[3]表示数组中的
第3 个字符。若声明了一个静态数组,虽然并没有给每一个元素赋值,但未用的元素仍分配内存并包含
一个随机值,这和未初始化的变量类似。
Dynamic arrays(动态数组)
动态数组没有固定大小和长度,相反,当你给它赋值或把它传给SetLength 函数时,它的内存被重新分
配。动态数组以下面的形式声明:
array of baseType
比如
var MyFlexibleArray: array of Real;
声明一个实数类型的一维动态数组。声明并没有为MyFlexibleArray 分配内存,要在内存中创建数组,要
调用SetLength。比如,以上面的声明为例:
SetLength(MyFlexibleArray, 20);
分配一个由20 个实数构成的数组,索引号从0 到19。动态数组的索引总是整数,并从0 开始。动态数
组变量实际是指针,并和长字符串一样使用引用计数进行管理。要取消动态数组的分配,给它的变量赋
值nil,或者把变量传给Finalize。在没有其它引用的情况下,这两种方法都将消除数组。0 长度动态数
组的值为nil。不要对一个动态数组变量使用运算符'^',也不要对它使用New 或Dispose 过程。
若X 和Y 是同一类型的动态数组变量,X := Y 使X 指向和Y 相同的数组(在这个操作之前,不必给X
分配内存)。不像字符串和静态数组,动态数组不会在被写之前自动拷贝。
Records(记录)
About records(关于记录)
记录(类似于其它语言中的结构)表示不同种类的元素的集合,每个元素称为"字段",声明记录类型时
要为每个字段指定名称和类型。声明记录的语法是
type recordTypeName = record
fieldList1: type1;
...
fieldListn: typen;
end
这里,recordTypeName 是一个有效标志符,每个type 表示一种类型,每个fieldList 是一个有效标志符或
用逗号隔开的标志符序列,最后的分号是可选的。(哪个分号?是最后一个字段的,还是end 后面的?)
比如,下面的语句声明了一个记录类型TDateRec:
type
TDateRec = record
Year: Integer;
Month: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);
Day: 1..31;
end;
TDateRec 包含3 个字段:一个整数类型的Year,一个枚举类型的Month,和另一个子界类型的Day。标
志符Year、Month 和Day 是TDateRec 的字段,它们的行为就像变量。声明并不会为Year、Month 和Day
分配内存,只有在实例化时才进行分配,像下面的样子:
var Record1, Record2: TDateRec;
上面的变量声明创建了两个TDateRec 实例,分别叫做Record1 和Record2。
你可以用记录名作限定符、通过字段名来访问字段:
Record1.Year := 1904;
Record1.Month := Jun;
Record1.Day := 16;
File types(文件类型)
file 是由相同类型的元素组成的有序集合。标准I/O 例程使用内置(预定义)的TextFile 或Text 类型,它
们表示一个包含字符的文件,这些字符是以行的形式进行组织的。想了解更多关于文件输入和输出的信
息,请参考Standard routines and I/O(标准例程和I/O)。
要声明一个文件类型,使用下面的语法:
type fileTypeName = file of type
这里,fileTypeName 是任何有效的标志符,type 是一个固定大小的类型。指针类型(不管是隐含的还是
直接的)是不可以的,所以,文件不能包含动态数组、长字符串、类、对象、指针、变体类型、其它文
件或包含以上类型的结构类型。
比如,
type
PhoneEntry = record
FirstName, LastName: string[20];
PhoneNumber: string[15];
Listed: Boolean;
end;
PhoneList = file of PhoneEntry;
声明了一个记录姓名和电话号码的文件类型。
在声明变量时,你也可以直接使用file of ...结构,比如,
var List1: file of PhoneEntry;
单独的一个file 表示一个无类型文件:
var Datafile: file;
要了解更多信息,请参考Untyped files(无类型文件)。
数组和记录中不能包含文件类型。
Pointers and pointer types(指针和指针类型)
Pointers and pointer types(指针和指针类型)
指针是一个表示内存地址的变量。当一个指针包含另一个变量的地址时,我们认为它指向这个变量在内
存中的位置,或指向数据存储的地方。对于数组或其它结构类型,指针指向的是结构中第一个元素的地
址。
指针被类型化以表示在它指定的位置上存储某一类型的数据。Pointer 类型表示一个任意类型的指针,而
指定类型的指针只表示特定类型的数据。指针在内存中占据4 个字节。
第五章 软件技术平台
软件编程都是在操作系统平台或架构平台上实现的,也就是编程的最终结果必须是在一定平台上能够被执行的。本章将讲述当前最主要的三个软件开发技术平台WIN32、.NET、Java。
WIN32平台和.NET平台都是微软公司的WINDOWS下的技术平台,Java则是一个具操作系统无关性的技术架构平台。
第一节 WINDOWS32平台
WINDOWS32平台就是基于WINDOWS的32位平台,在WIN32平台下有两种开发方式一种是基于WINDOWS SDK的C语言的编程;另一种是基于WINDOWS SDK函数封装后的架构进行编程,如基于MicroSoft公司的MFC架构的VC++编程和基于BORLAND公司的VCL架构的DELPHI和C++BUILDER编程。
1. 什么是Win32 SDK编程?
Win32SDK编程就是基于Windows的32位API方式的Windows程序设计。SDK的全称Software Developers Kit,意思是软件开发工具箱,API的全称Application Programming Interface意思是应用程序接口。具体说来就是Microsoft在WINDOWS下所提供的一组涉及操作系统方方面面的以C语言为标准的函数调用接口,Windows大约有两千多个API函数(或许更多我没有考证过)。
WINDOWS的API(简称WINAPI)是以C语言为调用标准的一组函数接口,主要包括以下几类
1) 用于窗口的创建、使用、关闭等功能的WINDOWS窗口类函数
2) 完成各类图形的绘制、填充、显示等功能的绘图类函数
3) 实现键盘、鼠标输入信息的接收、转化、处理等功能的键盘 、鼠标函数
4) 用于管理文件的文件创建、打开、关闭、读写的文件管理函数
5) 用于接收、处理、返回消息的消息类函数
6) 打印机管理类函数
7) 数据库操作类函数
8) 处理声音、视频、图象的多媒体类函数
9) 网络类包括用于网络底层数据传输的Windows Sockets和用于Internet管理和服务的Internet函数。
2. 怎样用WINDOWS进行编程
由于WINAPI编程是WINDWOS中所有编程的基础,所以你可以不用WINAPI进行编程但你一定要了解WINAPI编程!
学习WINAPI编程用C语言是最好的,这可以不用考虑语言的特性专心熟悉一下Win32编程的思路以及了解Windows的消息运行机制。
要用WINAPI编程首先当然必须安装一个开发工具软件,Microsoft公司的VisualC++或Borland公司的C++Builder都是不错的选择,可以到网络上下载一个(以学习研究为目的不算盗版的说)。这我们就用VC++说简单介绍下WINAPI编程如下操作
Visual C++6.0:File-->new-->Projects-->Win32 Application(project name)-->......
我们既然用C语言进行,就选第一项"An empty project"......
打开"an empty project"后,在VC的IDE中,打开文本编辑器。输入以下内容:
#include "windows.h"
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, TEXT ("hello world! "), TEXT ("hello"), 0) ;
return 0 ;
}
我们来逐行讲解一下这段程序
#include "windows.h"
这一行的意思是引用一个名为windows.h的头文件,这个头文件中包含了windows我们所要调用的WINAPI函数声明。
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
这一行是实现一个WinMain函数,WinMain函数在WINAPI中是一个特殊的函数。每一个应用程序都必须要有一个且只能有一个WinMain函数它是windows程序的入口,即便是在MFC或VCL架构中实际也是把这个函数封装调用了。WinMain()所起的作用:初始化,展示,销毁应用程序等。
WinMain的参数:
第一个参数:应用程序的当前实例句柄。
第二个参数:应用程序的前一个实例句柄,别管它,对于Win32位而言,它一般是NULL.
第三个参数:指向任何传给程序的命令行参数。PSTR代表"指向字符串的指针"。
第四个参数:它告诉应用程序如何初始化窗口,如最大化,最小化等状态。
解释:
句柄:句柄是WINDOWS中用一个整型数字对每个WINDOWS动态创建的对象的唯一标识,如一个程序、一个文件、或一个窗口等都有一个唯一标识的句柄,每次WINDOWS启动都会为对象创建不同的句柄。
MessageBox (NULL, TEXT ("hello world! "), TEXT ("hello"), 0) ;
这一句是调用Windows.h中声明的MessageBox函数显示一个提示信息。
第一个参数:是提示框的甩有者窗口的句柄,为NULL表示没有所有者窗口。
第二个参数:提示框窗中显示的文本信息,必须是一个字符串。
第三个参数:提示框的文本标题。
第四个参数:提示框中显示的按钮类型,0是指使用确定按钮。
关于MessageBox函数的具体使用请参见Microsoft的MSDN。
说到这不能不介绍一下MSDN,MSDN意指Microsoft Developer NetWork就是微软开发人员网络的意思。它是Windows开发人员的宝典,包含了所有WINDOWS平台帮助、WINAPI的说明、Visual Studio .NET 、Visual Studio等WINDOWS下开发所需要的大部分资料。
第二节 Visual C++与MFC
1. 什么是MFC
MFC就是Microsoft Foundation Classes的缩写也是是微软基本类库,Microsoft把WinAPI进行封装的类库。它是一个类的集合,通过覆盖WinAPI,为编程提供了一个面向对象的接口。它使windows程序员能够利用C++面象对象的特性进行编程。它把那些进行SDK编程时最繁琐的部分提供给程序员,使之专注于功能的实现。你不妨把它想象成类似TC提供的函数库吧。用Visual C++编程时,可以用MFC,也可以用API来直接编程,但用API来做界面绝对是一件痛苦的事要写太多代码了,呵呵。虽然MFC封装了很多API但你们依然需要在一些时候用到API来写程序,当然在用MFC写程序时也可以在代码中使用API。MFC做为一种编程架构来说它简化了编程,但与别的架构相比说它好的人很少。也许我们不需要讨论MFC的好坏,但对于用VC编程的人来说必然要使用到它,原因很简单那就是它是微软件的东西。
2. Visual C++简介
Visual C++是基于MFC库的可视化的开发工具,从总体上说它是一个功能强大但是不便使用的一种工具。它在网络开发和多媒体开发都具有不俗的表现,帮助系统也做得非常不错(Microsoft 在细节方面的处理往往都让人觉得亲切),但是虽然是使用C++作为基本语言,但是它在面向对象特性上却不够好,主要是为了兼容C的程序,Windows SKD的API都是C的,结果顾此失彼;在组件支持上也不太好,虽然说除了支持COM,ActiveX外还支持CORBA,但是没有任何IDE支持,是所有C编译器的功能, 需要CORBA中间件支持;最大的问题是开发效率也不高。
建议:如果要使用VC一定要对它的MFC库非常熟悉,不然是写不好的程序的,而且要有一定的耐心,VC的入门比较难。不过掌握了它你可以在开发驱动、网络、系统底层、多媒体开发等领域自由驰骋。但如果你用VC来开发数据库、WEB或是界面复杂的这类的程序相信绝不是一个好的选择。
3. 如何学Visual C++
学习Visual C++相比较别的开发工具并不那么容易,主要要掌握三个要点:
1) WINDOWS SDK
2) WINDOWS消息机制
3) MS MFC
第三节 DELPHI/C++ BUILDER与VCL
1. 什么是VCL
VCL就是Visual Component Library即可视组件库。是由BORLAND公司在WINDOWS上开发的一套以Object pascal为基础的编程框架,并移植到了LINUX下。以VCL为架构的开发工具有DELPHI、C++BUILDER、Kylix。VCL实质上是对WIN SDK的全面封装, VCL把SDK进行了有机封装并把很多编程的细节封装到了控件中,使控件能够很好的处理WINDOWS 消息,让编程的效率得以大大提高。VCL的特点是简单易学、易用并且有数量众多的VCL组件以供使用。
使用VCL编程也许是最快捷简单的一种编程方式,我们只需要把按钮、编辑框、列表框等控件放到窗口中,再为按钮的onCLICK事件也就是在按钮上回车或点鼠标左键动作时指定代码就可以完成一个程序了。
2. DELPHI/ C++Builder
DELPHI和C++Builder都是基于VCL库的可视化开发工具,它们在组件技术的支持、数据库支持、系统底层开发支持、网络开发支持、面向对象特性等各方面都有相当不错的表现,并且学习使用较为容易,充分提现了所见即所得的可视化开发方法,开发效率极高。由于两者都是Borland 公司的产品,自然继承了该公司一贯以来的优良传统:代码执行效率高。但是,它们并不是毫无缺点,它们所作的最大不足之处就是他们的帮助系统在众多的编程工具中是属于比较差的。C++Builder 的VCL库是基于Object pascal(面向对象pascal),使得C++Builder在程序的调试执行上都面向落后于其他编程工具。而Delphi则是它的语言不够广泛,开发系统软件功能较VC弱两个比较大的缺点。
建议: Delphi /C++Builder 它们在功能具有非常相似的特点,可以用来开发数据库,网络、多媒体几乎WINDWOS下的所有种类软件,尤其是开发数据库应用DELPHI是首选。
第四节 .NET与C#
.NET Framework 是用于生成、部署和运行 XML Web services 和应用程序的多语言环境。它由三个主要部分组成:
公共语言运行库 运行库实际上在组件的运行时和开发时操作中都起到很大的作用,尽管名称中没有体现这个意思。在组件运行时,运行库除了负责满足此组件在其他组件上可能具有的依赖项外,还负责管理内存分配、启动和停止线程和进程,以及强制执行安全策略。在开发时,运行库的作用稍有变化;由于做了大量的自动处理工作(如内存管理),运行库使开发人员的操作非常简单,尤其是与今天的 COM 相比。特别是反射等功能显著减少了开发人员为将业务逻辑转变为可重用组件而必须编写的代码量。
统一编程类 该框架为开发人员提供了统一的、面向对象的、分层的和可扩展的类库集 (API)。目前,C++ 开发人员使用 Microsoft 基础类,而 Java 开发人员使用 Windows 基础类。框架统一了这些完全不同的模型并且为 Visual Basic 和 JScript 程序员同样提供了对类库的访问。通过创建跨所有编程语言的公共 API 集,公共语言运行库使得跨语言继承、错误处理和调试成为可能。从 JScript 到 C++ 的所有编程语言具有对框架的相似访问,开发人员可以自由选择它们要使用的语言。
ASP.NET ASP.NET 建立在 .NET Framework 的编程类之上,它提供了一个 Web 应用程序模型,并且包含使生成 ASP Web 应用程序变得简单的控件集和结构。ASP.NET 包含封装公共 HTML 用户界面元素(如文本框和下拉菜单)的控件集。但这些控件在 Web 服务器上运行,并以 HTML 的形式将它们的用户界面推送到浏览器。在服务器上,这些控件公开一个面向对象的编程模型,为 Web 开发人员提供了面向对象的编程的丰富性。ASP.NET 还提供结构服务(如会话状态管理和进程回收),进一步减少了开发人员必须编写的代码量并提高了应用程序的可靠性。另外,ASP.NET 使用这些同样的概念使开发人员能够以服务的形式交付软件。使用 XML Web services 功能,ASP.NET 开发人员可以编写自己的业务逻辑并使用 ASP.NET 结构通过 SOAP 交付该服务。有关更多信息,请参见 Soap 社区链接。
NET Framework 是一种新的计算平台,它简化了在高度分布式 Internet 环境
中的应用程序开发。.NET Framework 旨在实现下列目标:
• 提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在 Internet 上分布,或者是在远程执行的。
• 提供一个将软件部署和版本控制冲突最小化的代码执行环境。
• 提供一个保证代码(包括由未知的或不完全受信任的第三方创建的代码)安全执行的代码执行环境。
• 提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。
• 使开发人员的经验在面对类型大不相同的应用程序(如基于 Windows 的应用程序和基于 Web 的应用程序)时保持一致。
• 按照工业标准生成所有通信,以确保基于 .NET Framework 的代码可与任何其他代码集成。
.NET Framework 具有两个主要组件:公共语言运行库和 .NET Framework 类库。公共语言运行库是 .NET Framework 的基础。您可以将运行库看作一个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理),而且还强制实施严格的类型安全以及可确保安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。.NET Framework 的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,您可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面 (GUI) 应用程序,也包括基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web services)。
.NET Framework 可由非托管组件承载,这些组件将公共语言运行库加载到它们的进程中并启动托管代码的执行,从而创建一个可以同时利用托管和非托管功能的软件环境。.NET Framework 不但提供若干个运行库宿主,而且还支持第三方运行库宿主的开发。
例如,ASP.NET 承载运行库以为托管代码提供可伸缩的服务器端环境。ASP.NET 直接使用运行库以启用 ASP.NET 应用程序和 XML Web services(本主题稍后将对这两者进行讨论)。
Internet Explorer 是承载运行库(以 MIME 类型扩展的形式)的非托管应用程序的一个示例。使用 Internet Explorer 承载运行库使您能够在 HTML 文档中嵌入托管组件或 Windows 窗体控件。以这种方式承载运行库使得托管移动代码(类似于 Microsoft® ActiveX® 控件)成为可能,但是它具有只有托管代码才能提供的重大改进(如不完全受信任的执行和安全的独立文件存储)。
下面的插图显示公共语言运行库和类库与应用程序之间以及与整个系统之间的关系。该插图还显示托管代码如何在更大的结构内运行。
.NET Framework 环境
下面的章节将更加详细地描述 .NET Framework 的主要组件和功能。
4) 公共语言运行库的功能
公共语言运行库管理内存、线程执行、代码执行、代码安全验证、编译以及其他系统服务。这些功能是在公共语言运行库上运行的托管代码所固有的。
至于安全性,取决于包括托管组件的来源(如 Internet、企业网络或本地计算机)在内的一些因素,托管组件被赋予不同程度的信任。这意味着即使用在同一活动应用程序中,托管组件既可能能够执行文件访问操作、注册表访问操作或其他须小心使用的功能,也可能不能够执行这些功能。
运行库强制实施代码访问安全。例如,用户可以相信嵌入在 Web 页中的可执行文件能够在屏幕上播放动画或唱歌,但不能访问他们的个人数据、文件系统或网络。这样,运行库的安全性功能就使通过 Internet 部署的合法软件能够具有特别丰富的功能。
运行库还通过实现称为通用类型系统 (CTS) 的严格类型验证和代码验证基础结构来加强代码可靠性。CTS 确保所有托管代码都是可以自我描述的。各种 Microsoft 和第三方语言编译器生成符合 CTS 的托管代码。这意味着托管代码可在严格实施类型保真和类型安全的同时使用其他托管类型和实例。
此外,运行库的托管环境还消除了许多常见的软件问题。例如,运行库自动处理对象布局并管理对对象的引用,在不再使用它们时将它们释放。这种自动内存管理解决了两个最常见的应用程序错误:内存泄漏和无效内存引用。
运行库还提高了开发人员的工作效率。例如,程序员可以用他们选择的开发语言编写应用程序,却仍能充分利用其他开发人员用其他语言编写的运行库、类库和组件。任何选择以运行库为目标的编译器供应商都可以这样做。以 .NET Framework 为目标的语言编译器使得用该语言编写的现有代码可以使用 .NET Framework 的功能,这大大减轻了现有应用程序的迁移过程的工作负担。
尽管运行库是为未来的软件设计的,但是它也支持现在和以前的软件。托管和非托管代码之间的互操作性使开发人员能够继续使用所需的 COM 组件和 DLL。
运行库旨在增强性能。尽管公共语言运行库提供许多标准运行库服务,但是它从不解释托管代码。一种称为实时 (JIT) 编译的功能使所有托管代码能够以它在其上执行的系统的本机语言运行。同时,内存管理器排除了出现零碎内存的可能性,并增大了内存引用区域以进一步提高性能。
最后,运行库可由高性能的服务器端应用程序(如 Microsoft® SQL Server™ 和 Internet 信息服务 (IIS))承载。此基础结构使您在享受支持运行库宿主的行业最佳企业服务器的优越性能的同时,能够使用托管代码编写业务逻辑。
5) NET Framework 类库
.NET Framework 类库是一个与公共语言运行库紧密集成的可重用的类型集合。该类库是面向对象的,并提供您自己的托管代码可从中导出功能的类型。这不但使 .NET Framework 类型易于使用,而且还减少了学习 .NET Framework 的新功能所需要的时间。此外,第三方组件可与 .NET Framework 中的类无缝集成。
例如,.NET Framework 集合类实现一组可用于开发您自己的集合类的接口。您的集合类将与 .NET Framework 中的类无缝地混合。
正如您对面向对象的类库所希望的那样,.NET Framework 类型使您能够完成一系列常见编程任务(包括诸如字符串管理、数据收集、数据库连接以及文件访问等任务)。除这些常见任务之外,类库还包括支持多种专用开发方案的类型。例如,可使用 .NET Framework 开发下列类型的应用程序和服务:
• 控制台应用程序。
• Windows GUI 应用程序(Windows 窗体)。
• ASP.NET 应用程序。
• XML Web services。
• Windows 服务。
例如,Windows 窗体类是一组综合性的可重用的类型,它们大大简化了 Windows GUI 的开发。如果要编写 ASP.NET Web 窗体应用程序,可使用 Web 窗体类。
6) 客户端应用程序开发
客户端应用程序在基于 Windows 的编程中最接近于传统风格的应用程序。这些是在桌面上显示窗口或窗体从而使用户能够执行任务的应用程序类型。客户端应用程序包括诸如字处理程序和电子表格等应用程序,还包括自定义的业务应用程序(如数据输入工具、报告工具等等)。客户端应用程序通常使用窗口、菜单、按钮和其他 GUI 元素,并且它们可能访问本地资源(如文件系统)和外围设备(如打印机)。
另一种客户端应用程序是作为 Web 页通过 Internet 部署的传统 ActiveX 控件(现在被托管 Windows 窗体控件所替代)。此应用程序非常类似于其他客户端应用程序:它在本机执行,可以访问本地资源,并包含图形元素。
过去,开发人员将 C/C++ 与 Microsoft 基础类 (MFC) 或应用程序快速开发 (RAD) 环境(如 Microsoft® Visual Basic®)一起使用来创建这样的应用程序。.NET Framework 将这些现有产品的特点合并到了单个且一致的开发环境中,该环境大大简化了客户端应用程序的开发。
包含在 .NET Framework 中的 Windows 窗体类旨在用于 GUI 开发。您可以轻松创建具有适应多变的商业需求所需的灵活性的命令窗口、按钮、菜单、工具栏和其他屏幕元素。
例如,.NET Framework 提供简单的属性以调整与窗体相关联的可视属性。某些情况下,基础操作系统不支持直接更改这些属性,而在这些情况下,.NET Framework 将自动重新创建窗体。这是 .NET Framework 集成开发人员接口从而使编码更简单更一致的许多方法之一。
和 ActiveX 控件不同,Windows 窗体控件具有对用户计算机的不完全受信任的访问权限。这意味着二进制代码或在本机执行的代码可访问用户系统上的某些资源,例如 GUI 元素和访问受限制的文件,但这些代码不能访问或危害其他资源。由于具有代码访问安全性,许多曾经需要安装在用户系统上的应用程序现在可以通过 Web 安全地部署。您的应用程序可以在像 Web 页那样部署时实现本地应用程序的功能。
7) 服务器应用程序开发
在托管领域中,服务器端应用程序是通过运行库宿主实现的。非托管应用程序承载公共语言运行库,后者使您的自定义托管代码可以控制服务器的行为。此模型在获得主服务器的性能和可伸缩性的同时提供给您公共语言运行库和类库的所有功能。
下面的插图显示在不同服务器环境中运行托管代码的基本网络架构。在应用程序逻辑通过托管代码执行时,服务器(如 IIS 和 SQL Server)可执行标准操作。
服务器端托管代码
ASP.NET 是使开发人员能够使用 .NET Framework 开发基于 Web 的应用程序的宿主环境。但是,ASP.NET 不止是一个运行库宿主;它是使用托管代码开发 Web 站点和通过 Internet 分布的对象的完整结构。Web 窗体和 XML Web services 都将 IIS 和 ASP.NET 用作应用程序的发布机制,并且两者在 .NET Framework 中都具有支持类集合。
XML Web services 作为基于 Web 的技术的重要发展,是类似于常见 Web 站点的分布式服务器端应用程序组件。但是,与基于 Web 的应用程序不同,XML Web services 组件不具有 UI 并且不以浏览器(如 Internet Explorer 和 Netscape Navigator)为目标。XML Web services 由旨在供其他应用程序使用的可重用的软件组件组成,所谓的其他应用程序包括:传统的客户端应用程序,基于 Web 的应用程序,甚至是其他 XML Web services。因此,XML Web services 技术正迅速地将应用程序开发和部署推向高度分布式 Internet 环境。
如果您使用过 ASP 技术的早期版本,很快就会注意到 ASP.NET 和 Web 窗体提供的改进。例如,您可以用支持 .NET Framework 的任何语言开发 Web 窗体页。此外,您的代码不再需要与 HTTP 文本共享同一个文件(尽管如果您愿意,代码还可以继续这样做)。Web 窗体页用本机语言执行,这是因为与所有其他托管应用程序一样,它们充分利用运行库。与此相对照,非托管 ASP 页始终被写成脚本并解释。ASP.NET 页比非托管 ASP 页更快、更实用并且更易于开发,这是因为它们像所有托管应用程序一样与运行库进行交互。
.NET Framework 还提供类和工具的集合来帮助开发和使用 XML Web services 应用程序。XML Web services 是基于 SOAP(一种远程过程调用协议)、XML(一种可扩展的数据格式)和 WSDL(Web 服务描述语言)这些标准生成的。基于这些标准生成 .NET Framework 的目的是为了提高与非 Microsoft 解决方案的互操作性。
例如,.NET Framework SDK 所包含的 Web 服务描述语言工具可以查询在 Web 上发布的 XML Web services,分析它的 WSDL 描述,并产生 C# 或 Visual Basic 源代码,您的应用程序可以使用这些代码而成为 XML Web services 的客户端。这些源代码可以创建从类库中的类派生的类,这些类使用 SOAP 和 XML 分析处理所有基础通信。虽然您可以使用类库来直接使用 XML Web services,Web 服务描述语言工具和包含在 SDK 中的其他工具可以使您更加方便地用 .NET Framework 进行开发。
如果您开发和发布自己的 XML Web services,.NET Framework 为您提供了一组符合所有基础通信标准(如 SOAP、WSDL 和 XML)的类。使用这些类使您能够将注意力集中在服务的逻辑上,而无需关注分布式软件开发所需要的通信基础结构。
最后,与托管环境中的 Web 窗体页相似,您的 XML Web services 将使用 IIS 的可伸缩通信以本机语言的速度运行。
第五节 Java
目前比较出名的是Borland出的JBuilder和IBM出的Visual Age for Java,两种工具都有一定数量的是用人群。JBuilder继承了C++Builder/Delphi的特点,在可视化上做得非常不错,使用简便。由于Java本身语言的特点使得他们在网络开发中具有高人一等的表现,而且面向对象特性高,支持的组件技术也非常多,跨平台的特性也使得它在现在和未来的开发中占据越来越重要的地位。但是在系统底层开发和多媒体开发中却表现得并不让人那么满意,这个可能跟设计Java的意图有关吧。
建议:除了在开发系统软件、大规模的图像处理外,都可以使用Java。
第六节 Visual Basic
它是以Basic语言作为其基本语言的一种可视化编程工具。在中国乃至全世界都曾看到过它的身影,它曾是在中国最为流行的编程工具,到现在还占据着非常重要的地位,对于它的好坏大家都有一定的了解,这里我们也说说:VB作为一种较早出现的开发程序以其容易学习,开发效率较高,具有完善的帮助系统等优点曾影响了好几代编程人员,但是由于VB不具备跨平台这个特性,从而也决定了VB在未来的软件开发中将会逐渐地退出其历史舞台;它对组件技术的支持是基于COM和ActiveX,对于组件技术不断完善发展的今天,它也显出了它的落后性;同时VB在进行系统底层开发的时候也是相对复杂的,调用API函数需声明,调用不方便,不能进行DDK编程,不可能深入Ring0编程,不能嵌套汇编;而且面向对象的特性差;网络功能和数据库功能也没有非常特出的表现,综上所述,VB作为一种可视化的开发工具由于其本身的局限性,导致了它在未来软件开发中逐步被其他工具所代替。
建议:对于编程入门人员,可以先借助VB这个可视化环境大致了解可视化编程的特点,并且可开发与系统无关的综合应用程序。
第七节 PowerBuilder
是开发MIS系统和各类数据库跨平台的首选,使用简单,容易学习,容易掌握,在代码执行效率上也有相当出色的表现。PB是一种真正的4GL语言(第四代语言),可随意直接嵌套SQL语句返回值被赋值到语句的变量中,支持语句级游标,存储过程和数据库函数,是一种类似SQLJ的规范,数据访问中具有无可比拟的灵活性。但是它在系统底层开发中犯了跟VB一样的错误,调用API函数需声明,调用不方便,不能进行DDK编程,不可能深入Ring0编程,不能嵌套汇编;在网络开发中提供了较多动态生成Web页面的用户对象和服务以及系统对象,非常适合编写服务端动态Web应用,有利于商业逻辑的封装;但是用于网络通讯的支持不足;静态页面定制支持有限,使得PB在网络方面的应用也不能非常广泛。面向对象特向也不是太好。
建议:如是从事信息管理系统的开发或各类数据库的跨平台开发都可以选用此工具,在开发速度上也可得到一定的保障。
第八节 Object Pascal编码风格
概要:
这篇文章展现了一种格式化Delphi代码的标准风格。它的实现是基于Delphi的开发习惯。
我们承认许多好的已经确定的工作室或个人,拥有他们自己的和本文里所说的不同的编程习惯, 但是,我们强烈建议你使用一个工具将你的代码转换为Borland风格的代码,然后再提交给Borland,Project JEDI或其他任何公开的源代码知识库。我们不想强迫你改变你的习惯,但我们坚持所有同Borland产品一起工作的的代码遵循本文描述的习惯。
对象Pascal是一种优美的设计语言。较强的可读性就是它的一个优点。本文设计的标准将增强对象Pascal代码的可读性。当开发人员遵从本文展现的这些简单的习惯,他们也将成为标准,这将有益于所有的Delphi开发人员使用统一的易读的代码风格。执行这些标准的努力将增加开发人员的源代码的价值,特别是在维护和调试循环阶段。
尽管我们相信并且赞美本文所宣扬的风格,但我们没有必要支持它,因为它本身是正确的而其它的则是错误的。然而我们相信绝大多数开发人员遵从的标准是有它的功效的,所以我们仍然支持并维护该风格。人类的大脑总在适应标准,并且找寻方法去快速组织所熟悉的模式,从而快速而有效地理解其含义。正是因这种要求而建立的标准将使大量的人尽可能容易的阅读代码。如果在初次使用我们的指导方针是感到陌生,那么我们请你坚持一会儿,你会发现你也变得习惯了。或者,如果你愿意,你也可以保持你自己的风格,并通过一个遵从我们标准的程序来转换,然后你可以将你的代码提交给Borland或其他知识库了。
一些文本编辑器,象Visual SlickEdit可以帮助你按照一定的风格来格式化你的代码。
一个免费的由Egbert van Nes开发的格式化程序可以在以下的连接获得:
www.slm.wau.nl/wkao/delforexp.html
另一个针对Delphi的商业化程序是CrackerJax:
www.kineticsoftware.com/html/products.html
1.0 介绍
本文不是为Object Pascal语言定义语法规则的一种尝试。例如:在else前面放置封号";"是违法的;编译器不允许这种用法。所以我不会在本文中展示语法规则。本文旨在在语言提供选择的地方定义适当的行为习惯。我通常在只有一种控制方法的地方保持沉默。
1.1 背景
在本文出现的指导方针基于Delphi源代码的一部分。Delphi源代码恰好遵循这些指导方针。如果你发现了违反这些原则的情况,那么应该是这些原则而不是那些不确定的源代码成为你的指导方针。然而,你可以使用这些原代码作为这些原则的补充,至少它可以帮助你得到关于你自己的代码的形式的一般看法。
1.2 感谢
本文这些格式是基于已完成的为Java语言定义的风格标准的工作的。Java在规则上对格式化Object Pascal源代码是没有任何影响的,但在Sun网站上的文档是本文的基础。 在某些特殊的地方本文的风格和格式受到"A Coding Style Guide for Java WorkShop and Java Studio Programming"(Achut Reddy, 《Java车间和Java工作室的编码向导》)的很大启发。该文章可在该URL找到:http://www.sun.com/workshop/java/wp-coding
Delphi小组为本文的完成做出了重大贡献,事实上,如果没有它们的帮助,本文是无法完成的。
2.0 源文件
Object Pascal源代码主要被分成单源文件和项目文件,他们都遵从相同的习惯。Delphi项目文件有一个.DPR的扩展名。它是项目的主文件。任何在项目中使用的单元文件都有一个.PAS的扩展名。其它的文件,象批处理文件、HTML文件或者DLLs也可以在项目中扮演一个角色,但本文只涉及项目文件和单元文件。
2.1 源文件命名
Object Pascal支持长文件名。如果你使用几个单词来形成一个单一的名称,那么最好是为每个单词使用大写的开头字母:MyFile.pas。这被认为是插入式大写或驼峰式大写。扩展名应当使用小写形式。由于历史原因,Delphi源代码经常使用8:3式命名模式,但开发人员不必为上述规则所限制而转向Delphi小组的用法。
如果你正在翻译一个C/C++头文件,那么你翻译的Pascal文件要与C/C++头文件保持相同的主文件名,扩展名用.PAS。例如:Windows.h -> Windows.pas。如果Pascal语法强迫你将几个头文件组合到一个单一的单元文件中,那么包含其他头文件的那个头文件的文件名将作为新单元文件的名称。例如:Windows.h包含了WinBase.h文件,则新的单元文件名为Windows.pas.
2.2 源文件组织
所有的Object Pascal单元文件应当按照以下的顺序包含下列元素:
版权/标识块注释
单元名
接口段
实现部分
一个结束符"end."
每个部分之间至少空一行。
其它的元素应当被结构化成你认为最适当的顺序。但版权应当出现在文件的最开始,然后是单元名,然后是任何条件定义、编译器指示符或包含语句,然后是uses字句:
{*******************************************************}
{ }
{ Borland Delphi Visual Component Library }
{ }
{ Copyright (c) 1995,98 Inprise Corporation }
{ }
{*******************************************************}
unit Buttons;
{$ S-,W-,R-}
{$ C PRELOAD}
interface
uses
Windows, Messages, Classes,
Controls, Forms, Graphics,
StdCtrls, ExtCtrls, CommCtrl;
如果你将type段放到const段之前,或者将它们两者混合,那是没有什么影响的。
实现部分需要首先将implementation写出来,然后是uses字句,然后是其它的包含声明或别的指示符:
implementation
uses
Consts, SysUtils, ActnList,
ImgList;
{$ R BUTTONS.RES}
2.2.1 版权/标识块注释
每一个源文件都应当以一个包含版本信息和标准版权布告块注释开始。版本信息可以象下面这样:
{*******************************************************}
{ }
{ Widgets Galore }
{ }
{ Copyright (c) 1995,98 Your Company }
{ }
{*******************************************************}
版权布告至少需要包含以下行:
版权所有(C) 年份 版权所有者
如果你是为Borland开发软件的第三方,你可以在版权的最后加入你自己的名字:
{*******************************************************}
{ }
{ Borland Delphi Visual Component Library }
{ Copyright (c) 1995,99 Borland International }
{ Created by Project JEDI }
{ }
{*******************************************************}
2.2.2 unit声明
每一个单元文件要有一个unit声明。unit是一个保留字,因此它需要小写。单元的名称可以是大小写混合的,但必须和单元文件的文件名相同。例如:
unit MyUnit;
则单元文件的名称应当为MyUnit.pas。在文件系统中,它作为这个文件的入口。
2.2.3 uses声明
在单元内部,uses声明应当使用小些的uses引导。被引用的单元名要遵循在他自己的单元中被定义时使用的大写习惯:
uses MyUnit;
每一个单元名被一个逗号同其相邻的单元名分开,最后一个单元名后面跟一个分号:
uses
Windows, SysUtils, Classes, Graphics, Controls, Forms,
TypInfo;
在uses的下一行开始加入单元名和在uses后面直接加入单元名同样都是正确的。
uses Windows, SysUtils, Classes, Graphics, Controls, Forms,
TypInfo;
你可以格式化你的单元名列表,可以在80个字符限制下换行,或者每个单元名一行。
2.2.4 类和接口定义
类的定义以两个空格开始,然后是一个前缀"T"。 前缀要大写,每个内嵌的单词要大写开头。不要在Object Pascal源代码中使用制表符"Tab"。例:
TMyClass
在标识符之后接一个空格,然后是等号,然后是class单词,class要小写:
TMyClass = class
如果你的类是从祖先继承来的,则需要加入包含着祖先类的左右括号:
TMyClass = class(TObject)
范围指示符离页边两个空格,并以下面的顺序出现:
TMyClass = clss(TObject)
private
protect
public
published
end;
数据通常只在private段声明,并且它们的标识符以"F"开始。所有此类的声明离页边4个空格:
TMyClass = class(TObject)
private
FMyDate: Integer;
function GetDate: Integer;
procedure SetData(value: Integer);
public
published
property MyData: Integer read GetData write SetData;
end;
接口遵从同类相同的规则,除了你应当忽略范围指示符和私有数据,并且使用interface单词代替class单词。
命名习惯
除了保留字和指示符是小写外,所有的Pascal标识符应当使用驼峰式格式,即每个标识符开头字母要大写,内嵌单词的首字母也要大写,只取首字母的缩写词也一样。
MyIdentifier
MyFTPClass
对此规则主要的例外是头文件翻译的情况,应当遵循在原头文件中的命名习惯。例如:
WM_LBUTTONDOWN,不要写成wm_LButtonDown.
除了头文件翻译外,不要使用下划线分割单词。类名应当是名词或名词短语。接口或类的名称依赖于接口的显而易见的目的、用途。
好的名字:
AddressForm, ArrayIndexOutOfBoundsException
低劣的名字:
ManageLayout //使用动词短语
delphi_is_new_to_me //使用下划线
3.1 单元命名
参见单元声明
3.2 类/接口命名
参见类/接口声明
3.3 域/字段命名
使用驼峰式格式。以大写的"F"开始,并且在private中声明所有的数据,使用属性或获取者(getter)和安装者(setter)来提供公共的存取操作。例如:使用名字GetSomething来命名一个返回内部域/字段值的函数,使用SetSomething来命名一个设置域/字段值的过程。
不要在const段全部使用大写,除非是头文件翻译的需要。
Delphi是在加利福尼亚开发的,所有我们阻止记号的使用,除非是头文件翻译的需要。
正确:
FMyString: string;
不正确:
lpstrMyString: string;
当然在枚举类型定义中保留了匈牙利命名法:
TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp,
bkYes, bkNo, bkClose, bkAbort, bkRetry,
bkignore, bkAll);
在这种情况下字符bk被插入到这个枚举类型的每一个元素前。bk意味着ButtonKind。
在考虑命名习惯时,要避免使用单个字符的名称,但零时变量和循环变量除外。
避免使用"l"(L)变量,因为它和"1"(one)无论在打印机还是在显示器上都难以分辨。
3.4 方法命名
方法命名也使用驼峰格式。方法命名习惯同非常量域的命名方法是相同的,但可以从上下文区分它们。方法命名应当强制使用动词或动词短语。例如:
//好的方法命名:
ShowStatus, DrawCircle, AddLayoutComponent
//差的方法命名:
MouseButton //名词短语,没有描述功能
drawCircle //以小写字母开头
add_layout_component //使用了下划线
//以下方法的功能不够明确。它是开始运行一个服务呢(更好:StartServer)还是判断一个服务是否在运行(更好:IsServerRunning)?
ServerRunning //动词短语,但不是命令
一个获取或者设置一些类属性的方法应当分别被称为GetProperty或者SetProperty,Property代表该属性的名称。例如:
GetHeight, SetHeight
一个测试类的布尔属性的方法应当被命名为IsVisible,Visible代表属性的名称。例如:
IsResizable, IsVisible
3.5 局部变量命名
除了不使用"F"外,局部变量的命名规则同域/字段的命名规则一样。参见3.3节。
3.6 保留字
保留字和指示符要全部小写。这有时有些混乱。例如:Integer是一个标识符,并且以首字母大写出现。而string保留字则全部小写。
3.7 类型声明
所有类型名称声明以字母T开始,接下来和类的命名相同。
4.0 空白用法
4.1 空白行
空白行可以通过将逻辑相关的代码段分组来提高可读性。一个空白行也可以在下列地方使用:
在版权注释块之后,包声明(package),导入段(import)。
类声明之间。
方法声明之间。
4.2 空格
Object Pascal是一种非常清晰易读的语言。通常,你不需要在代码里加入很多空格来分隔行。以下几条提供了一些原则该如何使用空格:
4.2.2 不应当使用空格:
在方法名和左括号之间;
在.(dot)操作符之前或之后;
在一元操作符和它的操作数之间;
在一个类型和被它强制转换的表达式之间;
在左括号之后和右括号之前;
在左方括号之后和右方括号之前;
在一个封号前;
例如:
//正确用法:
function TMyClass.MyFunc(var value: Integer);
MyPointer := @MyRecord;
MyClass := TMyClass(MyPointer);
MyInteger := MyIntegerArray[5];
//错误用法:
function TMyClass.MyFunc( var value: Integer ) ;
MyPointer := @ MyRecord;
MyClass := TMyClass ( MyPointer ) ;
MyInteger := MyIntegerArray [ 5 ] ;
4.3 缩进
你应当总是为所有的缩进层次缩进两个空格。换句话说就是,第一层缩进两个空格,第二层缩进四个空格,第三层缩进六个空格……。不要使用制表符Tab。
当然,仍然有少量的例外。保留字象unit, uses, type, interface, implementation, initialization 和finalization总是顶格的。单元的最后一个end标识符也是顶格的。在项目文件中,program和主begin、end也是顶格的。在主begin..end块内则需要缩进至少两个空格。
4.4 续行
行应当限制在80列以内。超过80列的行应当被分成多个连续的行。所有的后续行应当排列在该声明的第一行之后,并且缩进两个字符的空格。
例如:
//正确:
function CreateWindowEx(dwExStyle: DWORD;
lpClassName: PChar; lpWindowName: PChar;
dwStyle: DWORD; X, Y, nWidth, nHeight: Integer;
hWndParent: HWND; hMenu: HMENU; hInstance: HINST;
lpParam: Pointer): HWND; stdcall;
if ((X = Y) or (Y = X) or
(Z = P) or (F = J) then
begin
S := J;
end;
不要在参数和它的类型之间换行,除非列表是由逗号分隔,那样的话要在最后一个参数前换行,这样类型名就在下一行开头了。冒号和它的变量之间不应该有空格,而冒号和类型名之间要有一个空格。
//正确:
procedure Foo(Param1: Integer; Param2: Integer);
//错误:
procedure Foo( Param :Integer; Param2:Integer);
一个后续行不应以一个二进制操作符开始。避免在通常不出现空白的地方割断一行,比如在方法名和它的左括号之间,或者在一个数组名和它的左方括号之间。如果你必须在上述情况下割断行,那么应当在左括号或左方括号之后换行。不要把begin放在其它代码的同一行。
例如:
//错误:
while (LongExpression1 or LongExpression2) do begin
//DoSomething
//DoSomethingElse;
end;
//正确
while (LongExpression1 or longExpression2) do
begin
//DoSomething
//DoSomethingElse;
end;
if (LongExpressiong1) or
(LongExpression2) or
(LongExpression3) then
5.0 注释
Object Pascal语言支持两种注释:块和单行注释。以下是一些注释用法原则:
•在单元顶部放置注释用以解释单元的用途是有益的
•在类声明前放置注释是有益的
•在方法声明前设置注释是有益的
•避免语句含义明显的注释
i := i + 1; //Add one to i
•记住,容易误解的注释比没有注释更加有害。
•避免在注释里放入看上去要失效的信息
•避免在注释的边框里嵌入星号或其他的排版符号
•零时的注释,即需要被改变或删除的注释,要在他们之前加上"???:"标记,这样易于查找。从观念上来说,所有的零时注释都应当在程序发布前删除。
// ???: Change this to call Sort when it is fixed
List.MySort;
5.1 块注释
Object Pascal支持两种类型的块注释。最常用的是一对花括号{}括起来的注释。Delphi小组尽可能的保持该注释少而简单。例如:你应当避免在你的注释里使用星号来创建图案或行。相反,使用空格来分隔你的注释,就象你在字处理文档里做的一样。你的注释里的单词应当在第一个花括号的同一行开始,就象下面从DsgnIntf.pas中摘录的一样:
{ TPropertyEditor
Edits a property of a component, or list of components,
selected into the Object Inspector. The property
editor is created based on the type of the
property being edited as determined by the types
registered by...
etc...
GetXxxvalue
Gets the value of the first property in the
Properties property. Calls the appropriate
TProperty GetXxxvalue method to retrieve the
value.
SetXxxvalue Sets the value of all the properties
in the Properties property. Calls the appropriate
TProperty SetXxxxvalue methods to set the value. }
块注释通常被用在版权注释中。也被用来注释掉一些代码行。
用于解释方法的用途的块注释应当被访在方法的声明前面。
例如:
// CORRECT
{ TMyObject.MyMethod
This routine allows you to execute code. }
procedure TMyObject.MyMethod;
begin
end;
// INCORRECT
procedure TMyObject.MyMethod;
{******************************************************
TMyObject.MyMethod
This routine allows you to execute code.
*******************************************************}
begin
end;
第二种块注释包含了两个字符,括号和星号:(* *)。这有时被称为星括号注释。这些注释一般只在代码开发时有用,它的主要好处是允许嵌套注释,注释嵌套少于两层。Object Pascal不支持同类型的注释嵌套,因此事实上只有一层嵌套:花括号在星括号里面,或者星括号在花括号里面。 只要在你不嵌套它们时,在该类型的注释中的其它类型的标准Pascal注释将被忽略。因此,你可以使用该语法注释一大块既有代码又有注释的代码:
(* procedure TForm1.Button1Click(Sender: TObject);
begin
DoThis; // Start the process
DoThat; // Continue iteration
{ We need a way to report errors here, perhaps using
a try finally block ??? }
CallMoreCode; // Finalize the process
end; *)
在本例中,整个Button1Click方法被注释掉了,包括其中的任何子注释。
5.2 单行注释
单行注释由注释符//及其引导的文本组成,在文本和注释符之间有一个空格。单行注释同代码在不同行的,要同代码有相同的缩进层次。你可以使用多个单行注释形成大的注释。
在单行注释或注释组之前要有一个空行,除非它是一个块的第一行。如果注释用于几条语句,那么注释和注释组之后要跟一个空行。如果注释仅解释它后面的一行声明,则不必跟一个空行。
例如:
// Open the database
Table1.Open;
单行注释也可以跟在他们解释的代码声明后面。这类注释有时被引用为跟踪注释。在他们和代码之间至少要有一个空格。如果有多个跟踪注释在一个代码块中同时出现,那么这些注释需要被对齐。
例如:
if (not IsVisible) then
Exit; // nothing to do
Inc(StrLength); // reserve space for null terminator
要避免对每行可执行代码进行跟踪注释。在一个方法或函数的begin..end块之间限制使用注释、甚至让其为空,则在通常情况下是最好的。长的注释可以出现在方法、函数的定义之前的块注释当中。
类
6.1 类体的组织
类体的组织应当遵循下列顺序:
•域/字段声明
•方法声明
•属性定义
域/字段、属性、方法应当按它们的名称进行字母索引排列。
6.1.1 存取级别
除了由IDE生成的代码,类的范围指示符应当按以下顺序:
•private 声明
•protect声明
•public声明
•published声明
在Object Pascal中,类成员有四种存取级别:发布的、公开的、受保护的和私有的--按存取能力递减的顺序排列。默认的存取级别是published。一般,一个成员应当被赋予最合适它的最低的存取级别。例如:只能在同一单元中被其他类存取的成员就应当被声明为私有的。同时,声明低存取级别的成员也给了编译器提高优化的机会。当然,另一方面,使用低存取级别对子类的扩展造成了困难。如果有理由认为某个类在将来某个时候会被子类化,那么应当将那些需要被子类继承扩展的成员声明为受保护的,用于存取私有数据的属性也可以提供这方面的保护。
你应当禁止对数据的公开存取。数据通常在private段声明,任何对他的公开存取应当通过GetXXX、SetXXX方法或属性来操作。
6.1.8 构造函数声明
方法需要按字母索引排列。将构造函数和析构函数放在public段的开始或按照字母索引排列都是正确的。
如果有多个构造函数或你使用了多个相同的名字,那么应当根据形参列表来排列,参数少的在参数多的前面。这意味着如果存在没有参数的构造函数的话,那么它必定出现在第一个。为了和C++Builder保持最好的兼容,应当保证构造函数的参数列表的唯一性。C++不是根据构造函数的名称来调用它的,所以区别多个构造函数的唯一方法是通过它的参数列表。
6.2 方法声明
如果可能,方法声明要出现在单独一行上。
例如:
Examples:
// Broken line is aligned two spaces in from left.
procedure ImageUpdate(Image img, infoflags: Integer,
x: Integer, y: Integer, w: Integer, h: Integer)
7.0 接口
接口的声明与类的声明有相同的形式:
InterfaceName = interface([inherited Interface])
InterfaceBody
end;
接口声明应当被缩进两格,接口体缩进四格,end结束符缩进两格。
在接口声明中没有域/字段。但属性可以出现。
所有的接口方法天生就是公开的和抽象的,用不着在接口声明中包含此类关键字。
除非有其他的注意事项,否则接口的声明同类的声明具有相同的风格。
7.1 接口体组织
接口体的组织可以按以下的顺序:
•接口方法声明
•接口属性声明
接口方法和属性的声明和类具有相同的风格。
8.0 声明
声明是由封号结尾的一行或几行代码。单一声明只有一个封号,复合声明中有多个封号。
//这是单一声明:
A := B;
//这是复合声明:
begin
B := C;
A := B;
end;
8.0.1 单一声明
如果需要将一个单一声明换行,则需要参照上一行缩进两格。
//例如:
Myvalue :=
Myvalue + (SomeVeryLongStatement / OtherLongStatement);
8.1.1 赋值和表达式声明
每一行最多有一条声明。
例如:
a := b + c; Inc(Count); //错误
a := b + c; //正确
Inc(Count); //正确
8.1.2 局部变量声明
局部变量也使用驼峰格式,不要使用引导符"F",这是为类声明中域/字段保留的。
例如:
var
MyData: Integer;
MyString: string;
你可以在同一行声明多个类型相同的变量:
var
ArraySize, ArrayCount: Integer;
这种声明习惯在类声明中是不提倡。
8.1.3 数组声明
通常总是在左方括号之前和右方括号之后放置一个空格:
type
TMyArray = array [0..100] of Char;
8.2.3 if语句
if语句至少要以两行的形式出现:
例如:
//错误:
if A < B then DoSomething;
//正确
if A < B then
DoSomething;
如果是复合的if语句,则应当每个分隔符一个新行:
//错误:
if A < B then begin
DoSomething;
DoSomethingElse;
end else begin
DoThis;
DoThat;
end;
//正确
if A < B then
begin
DoSomething;
DoSomethingElse;
end
else
begin
DoThis;
DoThat;
end;
以下的少数变化可以被采用:
//正确
if Condition then
begin
DoThis;
end else
begin
DoThat;
end;
//正确
if Condition then
begin
DoThis;
end
else
DoSomething;
//正确
if Condition then
begin
DoThis;
end else
DoSoemthing;
//下面的方式可能不被关心,但却是值得赞扬的:
if Condition then
DoThis
else DoThat;
8.2.4 for语句
Example:
// INCORRECT
for i := 0 to 10 do begin
DoSomething;
DoSomethingElse;
end;
// CORRECT
for i := 0 to 10 do
begin
DoSomething;
DoSomethingElse;
end;
8.2.5 while 语句
Example:
// INCORRECT
while x < j do begin
DoSomething;
DoSomethingElse;
end;
// CORRECT
while x < j do
begin
DoSomething;
DoSomethingElse;
end;
8.2.6 repeat until 语句
Example:
// CORRECT
repeat
x := j;
j := Updatevalue;
until j > 25;
8.2.7 case 语句
Example:
// CORRECT
case Control.Align of
alLeft, alNone: NewRange := Max(NewRange, Position);
alRight: Inc(AlignMargin, Control.Width);
end;
// CORRECT
case x of
csStart:
begin
j := Updatevalue;
end;
csBegin: x := j;
csTimeOut:
begin
j := x;
x := Updatevalue;
end;
end;
// CORRECT
case ScrollCode of
SB_LINEUP, SB_LINEDOWN:
begin
Incr := FIncrement div FLineDiv;
FinalIncr := FIncrement mod FLineDiv;
Count := FLineDiv;
end;
SB_PAGEUP, SB_PAGEDOWN:
begin
Incr := FPageIncrement;
FinalIncr := Incr mod FPageDiv;
Incr := Incr div FPageDiv;
Count := FPageDiv;
end;
else
Count := 0;
Incr := 0;
FinalIncr := 0;
end;
8.2.8 try 语句
Example:
// Correct
try
try
EnumThreadWindows(CurrentThreadID, @Disable, 0);
Result := TaskWindowList;
except
EnableTaskWindows(TaskWindowList);
raise;
end;
finally
TaskWindowList := SaveWindowList;
TaskActiveWindow := SaveActiveWindow;
end;
第六章 面向对象思想
面向对象思想是软件设计开发中最重要的想。一般说到面向对象学过C++的人都知道,甚至很多人都声称精通面向对象,但事实大多数人并不真正的了解面向对象思想。很多人学了C++、用了DELPHI、JAVA,但还是用过程化的思想来编程。
一切都是对象!
面向对象思想是一种软件开发和程序设计技术。所开发的程序是面向对象程序,直接描述客观世界的对象及其相互关系。对象是封装了数据和操作的程序块。所谓封装是为这个程序块建立显示的界面。其它对象只能向这个界面发消息,不能访问内部的私有数据和操作。比如我们要求某人"坐下"(发消息),某人接受消息后调整自己的肌肉、神经使自己坐下(操作),从而改变了他的状态(描述姿态的数据变了)。外界不必过问惊动了几条神经,收缩了哪几块肌肉。因此,内部的数据和实现操作的算法若有改动,对其它程序对象没有任何影响。
封装使程序局部化,易修改、好维护,但许多对象有相同的功能时免不了重复,所以面向对象技术有继承的机制。例如,我们描述了"人"这一对象。人有姓名、年龄、职业、住址等数据和吃饭、乘车、上班等操作。我们再设计一个新对象"中国人"时,它将继承"人"的所有数据和操作,再加上"说汉话"、"写汉字"、"身份证号"等"中国人"特有的数据和操作。这样,设计新对象时只要在原有对象基础上作较少的派生,如果运行无误,便将新对象入库,下次又可继续派生。如从中国人派生出"中国男人"、"中国女人"等。于是,库中各类对象按继承关系可形成一棵倒置的树,分枝不断增加,到一定时候一个新程序要用到的对象类库中全有,只要"摘取"出来就可以直接使用,几乎不用编程。所以说,继承支持高度的软件重用。
此外,由于对象自己操作自己的数据。同一消息不同的对象均以自己的方式响应,使得一种消息可有多种响应方式。这叫多态性。例如,"吃饭"这个消息,"中国人"和"俄国人"响应不同(一用筷子,一用刀叉),按过去的编程方法,要分别编出各自的程序,多态性则使程序增删简化。
封装、继承、多态是面向对象程序的主要特征。正是这些特征使程序安全、可靠、可重用、易维护。把这些思想用于硬件、数据库、人工智能技术、分布式计算、网络、操作系统都显示出其优越性。因而,成为当今新兴的计算机技术。特别是多媒体数据只有与相应的操作相联系才能显现出图、声、像,采用封装数据和操作的办法,有力地促进了多媒体应用技术的发展。
第七章 数据库与编程
数据库编程在编程中占据着极其重要的地位,特别是管理类软件更是离不开数据库,如果做程序员能就不能不懂数据库。
第一节 什么是数据库
顾名思义,数据库就是数据的仓库,是用来存放按一定方式组织起来的可供使用的数据集合。数据库的主要作用是信息检索、数据共享(应用程序)和决策支持。
数据库按不同的方式可划分为多种类型,我们只讨论当前最常用的关系型数据库。关系统型数据库最大的特点就是关系,通过数据之间的关系来存储和使用数据是关系数据库的精华。我们通常按数据库的规模和功能把关系数据库分为桌面型数据库和大型数据库。常用的桌面数据库有ACCESS、MYSQL、FOXPRO、PRADOX等,特点是小巧灵活、方便、以文件来存储数据库表,数据库不能直接建立数据间的关系。
常用的大型数据库主要有SQL SERVER、ORCAL、DB2、SYBASE、INTERBASE等,特点是适于存储大量、复杂的数据,能为数据直接建立复杂关系。
第二节 数据库组成
表TABLE:表是数据库的基础
记录
视图
存储过程
触发器
第三节 如何访问数据库
ODBC
ADO
JDBC
第四节 使用数据库
SQL
第八章 软件设计与软件工程-软件是怎样生产出来的
软件设计流程
UML
设计工具简介
ROSE
POWERDESGIN
VISIO
第九章 软件之路—何去何从
设计驱动
ECO企业核心对象
0
评论
Comments
日志分类
首页
[289]
教程习题
[21]
数据库学习笔记
[60]
语言类学习笔记
[75]
网页类学习笔记
[93]
其他相关笔记
[40]