Program organization: Overview(概述)
Object Pascal 是一种高级编译语言,具有强类型(对数据类型的检查非常严格)特性,支持结构化
和面向对象编程。它的优点包括代码的易读性、快速编译,以及支持多个单元文件从而实现模块化编程。
Program organization (程序组织)
应用程序通常被分成多个源代码模块,我们称它们为单元(unit)。每个程序以一个程序头(heading)
开始,它为程序指定一个名称。在程序头之后是一个可选的uses 子句,然后是一个由声明和命令语句组
成的块(block)。uses 子句列出了那些链接到程序的单元,这些单元可以被不同的程序共享,并且通常
有自己的uses 子句。
uses 子句给编译器提供各模块间的依赖信息,因为这些信息是存于模块自身的,所以,Object Pascal
程序不需要makefile 文件、头文件以及include 预处理指令(这些概念你可能要参考C 语言)。每当一个
工程调入IDE 时,Project Manager 创建一个makefile,但只有在包含多个工程的工程组中才保存这些文
件。
Pascal source files(Pascal 源文件)
编译器期望在以下三种文件中取得Pascal 源代码:
单元源文件 (文件扩展名为 .pas)
工程文件 (文件扩展名为 .dpr)
包源文件 (文件扩展名为 .dpk)
单元源文件包含程序代码的主要部分,每个程序包含一个工程文件和多个单元文件。工程文件相当
于传统Pascal 语言的‘主’程序文件,它把各单元文件组织成一个程序。Borland 开发工具自动为每一
个应用程序维护一个工程文件。
如果从命令行编译一个程序,你可以把所有源代码放在单元文件(.pas)中,但如果用IDE 创建程
序,则必须有一个工程文件(.dpr)。
包源文件类似于工程文件,但它们用来创建称为包的特殊的动态链接库(DLL)。
Other files used to build applications(创建程序所需的其它文件)
除了源代码文件,Borland 工具还需要几种非Pascal 文件来创建程序。它们是自动维护的,包括以
下文件:
窗体文件,扩展名为 .dfm(Delphi)或 .xfm(Kylix)
资源文件,扩展名为 .res (已经编译的资源文件)
工程选项文件,扩展名为 .dof(Delphi)或 .kof(Kylix)
窗体文件或者是一个文本文件,或者是一个编译的资源文件,资源文件能包含位图、字符串等等。
每个窗体文件表示一个窗体,通常对应于程序中的一个窗口或对话框。IDE 允许以文本方式察看和编辑
窗体文件,并且能以文本或二进制格式保存它。虽然默认是以文本方式保存窗体,但通常不要手动编辑
它,更常用的方式是使用Borland 提供的可视化设计工具。每个工程至少有一个窗体,每个窗体有一个
关联的单元文件(.pas),默认情况下,单元的文件名和窗体文件名相同。
除了窗体文件,每个工程使用一个资源文件(.res)保存位图作为程序的图标。默认情况下,这个
文件和工程文件(.dpr)同名。要改变程序的图标,可使用Project Options 对话框。
工程选项文件(.dof 或 .kof)包含编译器和链接器设置、搜索路径以及版本信息等等。每个工程对
应一个选项文件,它和工程文件同名。通常情况下,文件中的选项是通过Project Options 对话框来完成
的。
IDE 中的许多工具保存其它类型的文件。桌面设置文件(.dsk 或 .desk)包含窗口的排列信息及其
它设置项目。桌面设置或者特定于一个工程(和某个工程相关),或者作用于整个环境(environment-wide)
(不是特定于某个工程,对所有工程都有效)。这些文件对编译没有影响。
Compiler-generated files(编译器生成的文件)
在第一次生成一个程序或一个标准DLL 时,编译器为工程中所使用的每个新单元创建一个编译(过
的)单元文件 .dcu(Windows)或 .dcu/.dpu(Linux)。工程中所有的 .dcu 文件(Windows)或 .dcu/.dpu
文件(Linux)被链接到一个单独的可执行文件或共享库中;当第一次生成一个包时,编译器为包所包含
的每个新单元创建一个 .dcu 文件(Windows)或 .dpu 文件(Linux),然后创建 .dcp 文件和包文件(关
于库和包的更多信息,请参考库和包)。若使用 –GD 开关,链接器生成一个map 文件和 .drc 文件,.drc
文件包含字符串资源,能被编译进资源文件中。
当重新生成一个工程(程序、库或者包)时,除非自上次编译后单元文件(.pas)发生了改变、或
者没发现 .dcu 文件(Windows)和 .dcu/.dpu 文件(Linux)、或者明确告诉编译器重新编译它,否则,
单元文件不会被重新编译。实际上,只要编译器能找到编译(过的)单元文件(.dcu 或 .dpu),单元源
文件不是必需的。