概要介绍:
Object Pascal语言的结构比较特殊,跟C有很大的不同,但是它秉承PASCAL语言的一贯结构化的传统,
相信大家很容易就可以了解。

一:Program 单元
    一个object  Pascal程序,是由一个特殊的单元和若干个可选的单元组成的,也就是说一个最简单
的Object Pascal程序,可以只由一个特殊的单元组成,这个特殊的单元就是Program 单元。

在Delphi中,Program 单元也就是Delphi的工程文件。

Program 单元从功能上讲,有点像C语言中的主程序,程序再简单,它也得有一个Main函数。Program
单元也就是这样的主程序。

当然,一个程序如果只有Program单元,它也没多大实际意义(除了一些完成特殊任务的程序外),
事实上Delphi的程序至少有一个子程序,即后面要介绍的子程序单元。

下面列出一个典型的Program单元:

Program Project1;
Uses
  Forms,
  Unit1 in 'Unit1.pas';

{$R *.RES}

Begin
  Application.Initialize;
  Application.CreateForm(Tform1,Form1);
  Application.Run;
End;

Program单元由以下几个部分组成:

程序首部,由保留字Program后跟一个程序名组成,上例中是Project1。程序首部也可以带有参数,
不过一般很少用到。

引用部分,由保留字Uses加要引用的单元名组成,上例中有两个,分别是Forms单元和Unit1单元,
其中Unit1单元还指定在Unit1.pas文件中。最简单的程序可以没有USES部分。

编译指令,上例中,只有一个编译指令{$R *.RES},编译指令也是可选的。

执行部分也称初始化部分,由保留字Begin和End括起来的一段代码。

注意:用Delphi开发程序,除了一些特殊需要,如检查第二个实例是否运行,一般很少需要手工修
改Program单元,因为Delphi能够自动建立和维护这个单元,例如当您开始一个新的工种的时候,Delphi
自动建立一个Program单元和一个子程序单元。当您向工程中加入了一个新的Form或Unit,或者使用
Project|Option…子命令修改了程序名,program单元将自动更新。

二:子程序单元(Unit)
    子程序单元这种叫法只是为了和Program单元区别,由于大多数时候,我们几乎不需要接触Program
单元,所以以后我们提到单元即是指子程序单元。
    Object pascal的一个单元,就是一个独立的Pascal源文件,扩展名为.Pas。单元的结构分为以下几
个部分:

首部
接口部分
实现部分
  初始化部分
  终止部分
End;

1:单元首部
单元首部类似于程序单元首部,由保留字Unit加单元名组成,如:

Unit Unit1;

注意:单元首部也是一个完整的语句,因此单元名后应当跟分号,另外单元名必须符合Object Pascal
关于标识符的规则,并且在同一个工程中单元名必须是唯一的。

当您保存文件时,您使用的保存文件名,将自动反映到这个部分。而且也会加到程序单元的USES部分中。
因此,如果您工程中提示某文件缺失,你可以检查一下这个文件的路径和名称是否改动过。DELPHI工程的文
件是不必放在同一目录下的(但是我建议您这么做,便于管理)。

2:Interface部分
    Interface部分称为接口部分,用于声明引用的、常量、类型、变量、过程和函数,单元的Implementa-
tion部分(实现部分)也可以声明引用的单元、常量、类型、变量、那么这两者有什么区别呢?

在Interface部分声明的引用单元、常量、类型、变量、过程和函数对整个程序是公共的,也就是对所有
引用该单元的单元来说,这些声明都是可见的、可访问的,例如引用该单元的单元就可以调用在Interface声
明的过程和函数。Interface部分相当于类类型的Public部分。

Interface部分从保留字Interface开始到保留字Implementation前结束。

在Interface部分,过程和函数只需写出它们的首部,具体的定义是在下面的Implementation(实现部分)
给出的。

Interface部分本身又可以由几个可选的部分组成,分别是单元引用部分(Uses)、常量声明部分、类型
声明部分、变量声明部分、过程和函数声明部分。

单元引用部分(uses)用于列出该单元要引用的标准单元和其它单元。单元引用的概念有点类似于C语言中
的INCLUDE,用于把外部的已声明过的常量、类型、变量、过程或函数引入到本单元中使用,其中标准单元是
指Object Pascal预定义好的单元,例如Windows单元、SysUtils单元、Forms单元等,您也可以把其它非标准
单元加到Uses,这样该单元也就能引用这些单元中的常量、类型、变量过程和函数等。当您往一个表单上加入
控件时,该控件的单元将自动加到该部分,如果你还看不到,存盘就可以看到了。

下面是一个示例:

Unit Unit1;
Interface
Uses Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Diglogs;
Type
  Tform1=Class(Tform)
  Private
  Public
  End;
Var
  Form1:Tform1;

Implementation

{$R *.DFM}
End.

这是一个典型的Delphi自动生成的单元,它仅给出这个表单的结构。在Uses部分,引入了Windows,Messages,
SysUtils,Classes,Graphics等单元,这样就可以直接调用这些单元中的例程,而无需加入单元引用名。例如:
    MessageBeep(0);

而不需要这么写:
    Windows.MessageBeep(0);

尽管这个例程是在Windows单元中声明的。
    注意:如果Interface部分有Uses部分,Uses保留字必须紧跟在保留字Interface后面,尽管可以不在同一行。

上例中,引用的单元都是标准单元,其中有的标准单元几乎是所有的单元都要用到的,因此Delphi自动
把这些加到您的单元的Uses 部分,不过一些不太常用的单元,如果您的程序中要引用,您就必须自已手工把
它们加到Uses部分。例如,在程序如果你需要使用sndPlaySound函数来播放一个WAV文件,而这个函数是在
mmsystem单元中声明的,因此,你需要在Uses 部分加入mmsystem,记得在加入在分号之前,与其他单元用逗
号隔开。

加入到Uses单元的顺序一般是无关紧要的,但是有的单元如ShareMem单元必须放在第一个。
    最后强调一点,就是如果Interface 部分同时有这几个部分,一定要按照单元引用、常量声明、类型声
明、变量声明、过程和函数的顺序排列。

3:Implementation部分
    Implementation部分分为两大块,一块是声明部分,包括单元引用、常量、类型、变量、过程和函数的声
明,这一点跟Interface部分相似,所不同的是,在Implementation部分声明的单元引用、常量、类型、变量、
过程和函数只对本单元是公共的、可见的,其它单元即使引用了该单元,也不能访问它们。另一个不同点是,
在Implementation部分声明的过程和函数,不需要遵循先声明后定义的规则,而只要直接写出过程或函数的定义。

Implementation部分的另一大块是在Interface部分声明的过程和函数的定义,程序示例如下:

Unit Unit1;
Interface
Uses Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Diglogs;
Type
  Tform1=Class(Tform)
     Procedure FormCreate(Sender:Tobject);
  Private
  Public
  End;
Var
  Form1:Tform1;

Implementation

{$R *.DFM}
Procedure Beep;
Begin
  MessageBeep(0);
End;
Procedure Tform1.FormCreate(Sender:Tobject);
Begin
  Beep;
End;
End.

4:Initialization部分
    单元中可以有Initialization部分,这个部分也称为初始化部分,用于对该单元进行初始化。例如给变量
赋初值,分配资源等,不过一般很少用到。

Initialization部分由保留字Initialization加一些语句构成,语句可以是单个语句,也可以是复合语句,
如果是复合语句,应当用Begin和End括起来。

如果有多个单元含有Initialization部分,它们的执行顺序和这些单元在Program单元的Uses 部分出现的
顺序是一致的。

5:Finalization部分
    如果单元有Initialization 部分,这个单元才能有Finalization,终止部分的语法和初始化的部分是相似
的,是由保留字Fnialization加一些语句构成的,语句可以是单个语句,也可以是复合语句,如果是复合语句,
应当用Begin和End括起来。

如果有多个单元含有Finalization部分,它们的执行顺序跟Initialization执行的顺序正好相反。

注意:Finalization部分的代码应当能考虑到这样一种情况,就是单元的Initialization部分在执行过程中
可能会被意外终止,也就是说可能会出现这么一种情况,就是有些指针的值是nil,那么在相应地终止,应当避
免出现对这些指针的引用。

本章把object Pascal程序的结构全部讲述完毕。
从下一章开始我将要讲述object Pascal语言的“类类型及类引用”,它将是Object Pascal面向对象编程的基础。

★注意:从下一章开始所讲述的内容将涉及到是Object Pascal语言的高级部分,建议朋友们把我讲述的前面
六章节的内容重新温习一遍,否则有可能造成后面章节内容上的理解困难。

Delphi程序结构相关推荐

  1. 《Delphi程序开发范例宝典(第3版)》.(明日科技).[PDF]ckook

    为什么80%的码农都做不了架构师?>>>    图书作者: 明日科技 图书编号: 9787115277589 图书格式: PDF 出 版 社: 人民邮电出版社 出版年份: 2012 ...

  2. 043_《Delphi程序开发范例宝典(第2版)》

    <Delphi程序开发范例宝典(第2版)> Delphi 教程 系列书籍 (043) <Delphi程序开发范例宝典(第2版)> 网友(邦)整理 EMail: shuaihj@ ...

  3. 2021年大数据Flink(三十一):​​​​​​​Table与SQL案例准备 依赖和​​​​​​​程序结构

    目录 案例准备 依赖 ​​​​​​​程序结构 ​​​​​​​案例准备 依赖 https://ci.apache.org/projects/flink/flink-docs-release-1.12/d ...

  4. [转]使用设计模式改善程序结构(二)

    使用设计模式改善程序结构(二) 在本系列的 第一篇文章中,描述了如何通过设计模式来指导我们的程序重构过程,并且着重介绍了设计模式意图.动机的重要性.在本文中我们将继续上篇文章进行讨论,这次主要着重于设 ...

  5. 简述python程序结构_Python程序结构

    Python中有三种程序结构:顺序结构.选择结构.循环结构 顺序结构:python是一门解释型语言,它的执行过程一般是解释一行,执行一行. 选择结构:python中只有一种选择结构:if-else选择 ...

  6. C#程序结构 基本语法

    在学习 C# 编程语言的基本构建块之前,先来看一下最简单的 C# 程序结构,以便将其作为即后续章节的学习参考. 创建Hello World程序 这个简单的 C# 程序由以下部分组成: 命名空间声明 一 ...

  7. 在Delphi程序中操作注册表

    32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息. 一.创建和释放TRegistry对象 1.创建TRegistry对象.为了操作注册表,要创建一个TRegistry对象: ...

  8. c++程序目录结构_C程序结构

    C程序结构 进入我们的编程入门程序Hello world实例: C 程序主要包括以下部分: 预处理器指令 函数 变量 语句 & 表达式 注释 输出hello world程序: #include ...

  9. 《Arduino开发实战指南:LabVIEW卷》——3.5 LabVIEW的程序结构

    本节书摘来自华章计算机<Arduino开发实战指南:LabVIEW卷>一书中的第3章,第3.5节,作者:余崇梓著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看 ...

  10. J2ME游戏引擎程序结构

    J2ME游戏引擎程序结构- - j2me游戏引擎程序结构 2004-11-17 唐良 游戏引擎的结构很多,不过基本上都是在一个游戏主循环内实现.程序里面的主循环包含了程序框架的最主要的结构体.J2me ...

最新文章

  1. 如此通俗的分布式锁讲解,如果还搞不定那就...
  2. 题目1:学生成绩档案管理系统(代码实现)
  3. zabbix2.2.3 VMware Vsphere exsi监控配置步骤
  4. net.sf.ezmorph.Morpher问题解决
  5. sparse non-rigid registration of 3d shapes
  6. php 中文名称排序 源码,四种排序算法PHP实现类
  7. SVN的下载和文件更新
  8. android脚本录制脚本,Android 屏幕录制GIF脚本
  9. B编码以及BT种子文件分析
  10. GIF制作软件哪个好,怎么制作搞笑GIF
  11. C++STL容器的比较
  12. 十二月十三号作业驱动作业
  13. 阿里云服务搭建微信小程序开发环境
  14. ESP8266 由Noboot 模式到 boot模式
  15. C++ :线程的暂停、恢复和停止
  16. hadoop的小疑问:Map执行未结束便开始执行Reduce操作?
  17. [HAL库学习之路]5.IWDG-独立看门狗
  18. Cisco AP-如何识别思科胖瘦AP
  19. 湿度检测仪输入示数计算机编程,温湿度传感器DHT11驱动程序 - 全文
  20. Coursera的视频国内打不开,最新解决办法,截至2020.9依然有效

热门文章

  1. packetfence 7.2网络准入部署(二)
  2. 【Sublime Text 3】编译环境
  3. leetcode笔记--7 Find the Difference
  4. BZOJ 2431: [HAOI2009]逆序对数列( dp )
  5. OC中iO操作相关方法
  6. CentOS安装中文包
  7. 基于百度通用翻译API的一个翻译小工具
  8. django中url 和 path 的区别
  9. 网络爬虫的基本原理(一)
  10. IE6 与 GZIP, BUG汇总