第2章  Object Pascal语言
Delphi的编程语言是以Pascal为基础的。Pascal语言具有可读性好、编写容易的特点,这使得它很适合作为基础的程序开发语言。同时,使用编译器创建的应用程序只生成单个可执行文件(.EXE),正是这种结合,使得Pascal成为Delphi这种先进开发环境的编程语言。
本章中,我们把Delphi的可视化元素放在一边,将主要讨论Object Pascal的主要特点,并讲解如何在事件处理过程和其它应用程序中,使用它来编制程序代码。首先,本章将讲解Delphi应用程序中最常用的Object Pascal语法和面向对象技术;然后介绍一些Object Pascal 语言的高级技术。如果读者完全不熟悉Pascal编程,可以参阅一些基础的Pascal教程。如果具有一定编程经验,并能熟练地使用其它流行的程序语言,就将会在本章的Object Pascal中发现一些相同的概念。如果读者已经熟悉了Borland Pascal和面向对象技术,就可以快速浏览或直接跳过本章。
2.1  Object Pascal语言基础
2.1.1  Object Pascal入门
一般来说,使用Delphi开发的程序有以下三种:
1.Windows图形界面程序
Windows图形界面程序包括了目前Windows平台上绝大多数应用程序,这些程序通过窗体和对话框与用户进行信息交互,实现一定的功能。如Microsoft公司的Office系列软件和正在使用的Delphi 6.0等。
2.控制台程序
控制台程序是指一些没有图形用户界面的32位Windows应用程序。通常是在类似以前的DOS环境下运行。这些程序很少要求用户输入大量的信息,一般只实现特定的功能。控制台程序的代码较小,占用的系统资源少。编译、链接的速度比较快。在本章中将主要采用控制台程序介绍Object Pascal语言。
3.服务器程序
服务器程序可以接受客户应用程序的请求,处理这些请求,并将结果信息返回客户应用程序。服务器应用程序一般在后台运行,也不需要太多的信息交互。
下面我们通过一个具体的控制台程序的例子,使读者对在Delphi中生成Object Pascal程序,以及Object Pascal程序的一般结构有一个比较直观的认识。
在Delphi集成开发环境中,激活菜单File/New打开New Items对话框。选中New标签页中的Console Application选项,按下OK按钮。系统会自动创建下面的控制台程序工程,并在代码编辑窗口中自动打开Project1.dpr文件,修改Project1.dpr文件如下,注意程序中的
第2章 Object Pascal语言15
黑体部分:
program Project1;
{$APPTYPE CONSOLE}
//uses SysUtils;
var
str:string;
begin
// Insert user code here
writeln('您好,这是一个示范程序,请输入一行文字: ');
readln(str);
writeln('您输入的是: ',str);
readln;
end.
激活菜单项File/Save All将工程文件保存至目录D:\Delphi\Samples\Ex2_1中。黑体部分为添加代码。本章后面的例子都可以在该工程的基础上来方便的实现。
按F9键编译、链接、运行程序。在程序提示:“您好,这是一个示范程序,请输入一行文字:”后,输入“早上好!”。程序将输出结果:“您输入的是:早上好!”。
下面是对该程序的几点说明:
¾程序第二行中{$APPTYPE CONSOLE}是一个编译器指令,它告诉编译器这个程序是一个控制台程序。
¾uses SysUtils语句前加了两个斜线,将这条语句改成注释语句屏蔽掉了(注释语句将在下面介绍),因为SysUtils单元在这个例子中用不到。
¾writeln和readln两个函数分别输出和输入一行字符,后面将详细介绍两个函数。程序最后的readln语句是为了锁定窗口,否则输出结果将很快消失。
我们通过这个简单的例子,作为读者对Object Pascal的入门。下面将详细介绍Object Pascal的语法。
2.1.2  注释语句
作为起点,我们首先介绍在Object Pascal代码中怎样写注释。Object Pascal支持三种类型的注释:
¾花括号注释:组合符号“{”和“}”的成对使用表示它们之间的内容是注释部分;
¾圆括号/星号注释:组合符号“(*”和“*)”的成对使用表示它们之间的内容是注释部分;
¾C++风格的双斜杠注释:符号“//”的单独使用表示后面的内容是注释部分;
我们看下面的例子:
{花括号注释}
( *圆括号/星号注释* )
// C++风格的注释
16  第2章 Object Pascal 语言
前两种注释在本质上是相同的,编译器把处于限定符头和限定符尾中间的内容当作注释。花括号和圆括号/星号比较适合在大段注释时使用。如果在“{”或“(*”后面是一个“$”符号时,表示该句为一个编译器指令,与普通的注释不同,通常用来对编译过程进行设置。如上例中的第二句{$APPTYPE CONSOLE}。
对于C++风格的注释来说,双斜杠后面到行尾的内容被认为是注释。比较适用于单行和少量几行注释的情况。
注意,相同类型的注释不能嵌套使用。虽然不同类型的注释进行嵌套在语法上是合法的,但我们不建议这样做。这里是一些例子:
{ ( *这是合法的* ) }
( * {这是合法的} * )
( * ( *这是非法的* ) * )
{ {这是非法的} } 2.1.3  标识符(Identifier )
Object Pascal 语言使用的标识符包括字母A ~Z ,a ~z ,数字0~9以及其它一些标准字符。
下面的单个字符作为特殊符号存在:
$  &  *  #  ‘  (  )  [  ]  {  }  ^  ;  :  @  <  =
>  ,  .  ?  +  /
下面的字符组合作为单个的特殊符号存在:
(*  *)  (.  .)  ..  //
:=  <>  >=  <=
注意:
[  ]与(. .)分别对应,{ }与(* *)分别对应。含义完全相同,可以相互替代。 在Object Pascal 中,标识符用来标志变量,常量,属性,类,对象,过程,函数,程序,组件库等。标识符可以由任意长的不带空格的字符串组成,但对编译器只有前面255个字符有效。其中,标识符的第一个字符必须是字母和下划线,其余字符可以是字母,数字或下划线。通常,标识符由一个或多个具有适当意义的英文单词组成。
Pascal 语言对字母的大小写是不敏感的。在编程过程中,最好每个单词的首字母大写,其它字母小写,以便于区分。
2.1.4  保留字(Reserved Word )和指令字(Directive )
Object Pascal 语言定义了67个保留字,不能被定义为标识符,具体如下:
and  array  as    asm    begin  case  class  const constructor  destructor  interface  div  do  down to    else    end  except exports  file  finalization  finally  for  function  goto  if  implementation in    inherite
第2章 Object Pascal语言17
library
label
initialization inline is    interface
object  of  or
mod
nil  not
raise
property
packed procedure
out
program
string  set  shl
record  repeat resource
shr then  thread var to try
var
uses
while
type
until
unit
xor
with
Object Pascal还定义了39个指令字,它们具有特殊含义,但是,当用户重新定义了指令字后,在作用域内它们就失去了原来的意义。具体如下:
absolute
automated
abstract  assembler
default  dispid
cdecl  contains
far
export  external
dynamic
forward  implements  index  message
overload
name  near
nodefault
package
pascal  private
override
public  published
read
protected
register  reintroduce  requires
readonly
resident  safecall  stdcall  stored
virtual  write  writeonly
其中,private,protected,public,published,automated,on,at是指令字,但应当视其为保留字,不要定义和它们同名的标识符。
单个字符视为长度为1的字符串
在使用过程中,不用担心因为不小心而错误的将保留字或指令字定义为标识符。在Delphi 集成开发环境的代码编辑器中,会以黑体显示保留字和指令字。这样就大大方便了用户的使用。
2.1.5  数据类型
Object Pascal的最大特点是,它的数据类型特别严谨,这表示传递给过程或函数的实参必须和定义过程或函数时的形参的类型相同。我们不会在Pascal中看到一些著名编译器例如C编译器所提示的可疑的指
针转换等编译警告信息。这是因为Object Pascal编译器不允许用一种类型的指针去调用形参为另一种类型的函数(无类型的指针除外)。
Object Pascal语言提供的数据类型非常丰富。有简单数据类型(Simple),字符串数据类型(String),结构数据类型(Struct),指针数据类型(pointer),函数和过程数据类型(procedural),变体数据类型(variant)等。下面我们针对各种数据类型一一加以介绍。
1.简单数据类型(Simple)
简单数据类型包括有序数据类型(ordinal)和实数数据类型(real)。其中,有序数据类型又包括整数类型,字符类型,布尔类型,枚举类型和子界类型。它们的关系如图2-1所示。
18  第2章 Object Pascal语言
图2-1 简单数据类型
(1)整数类型(integer)
整数类型如下表2-1中的各种类型。
表2-1  Object Pascal语言中的整数类型
整数类型数值范围
Integer signed 32 bit
Cardinal unsigned 32 bit
Shortint signed 8 bit
Smallint signed 16 bit
Longint signed 32 bit
int64 signed 64 bit
Byte unsigned 8 bit
Word unsigned 16 bit
Longword unsigned 32 bit
(2)字符类型
Delphi可以使用三种类型的字符变量:
¾AnsiChar:标准的1字节的ANSI字符。
¾WideChar:2字节的Unicode字符。Unicode字符集的前256个字符与ANSI字符集相同。
¾Char:相当于WideChar。
需要注意的是,因为一个字符在长度上并不表示一个字节,所以不能在应用程序中对字符长度进行硬编码,而应该使用 Sizeof() 函数。注意 Sizeof() 标准函数返回类型或实例的字节长度。
(3)布尔类型
布尔类型(boolean)包括四种:Boolean,ByteBool,WordBool,LongBool。其中Boolean 和ByteBool为单字节,WordBool为双字节,LongBool为四字节。Object Pascal预定义了了两个常量标示符false和true。可以将、Boolean类型的数据赋值为false和true,对应的序数值为0和1。ByteBool,WordBool,LongBool类型对应的数据为0时,可以认为是false;不为0时,可以认为是true。
(4)枚举类型

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。