《Delphi程序设计基础教程》第2章面向对象的pascal语言
- 格式:ppt
- 大小:10.43 MB
- 文档页数:40
Delphi的编程语言是以Pascal为基础的。
Pascal语言具有可读性好、编写容易的特点,这使得它很适合作为基础的开发语言。
同时,使用编译器创建的应用程序只生成单个可执行文件(.EXE),正是这种结合,使得Pascal成为Delphi这种先进开发环境的编程语言。
本章中,我们将讨论Object Pascal的主要特点,并讲解如何在事件处理过程和其他应用程序中,使用它来编制程序代码。
本章将讲解Delphi应用程序中最常用的Object Pascal语法,而不是Pascal语言的一切细节。
如果您完全不熟悉Pascal编程,请参阅一些基础的Pascal教程。
如果您具有编程经验,并能熟练地使用其他流行程序语言,您将在本章的Object Pascal中发现一些相同的概念。
如果您已经熟悉了Borland Pascal,就可以快速浏览或跳过本章。
2.1 编写Object Pascal程序代码在前边的章节中,我们通过例程,已经编写了几行简单的代码。
在本章中,我们将从熟悉Pascal编程的角度,配合实例,讲解Object Pascal编程的基本方法。
在编写自己的Object Pascal程序时,要注意程序的可读性。
Pascal 语言是英式结构语言,在程序中选择合适的缩排、大小写风格,并在需要时将程序代码分行,会使得程序代码能够很容易地被自己和他人读懂。
一般的程序员都有这样的体验:如果不给程序加上适当的注解,一段时间后,自己也难以理清程序的流程。
给程序及时地加上注释是良好的编程习惯。
Delphi的注释需要加注在{}之间,编辑器会把它们处理成为空白。
Delphi保留了Borland Pascal编辑器的风格,关键字采用黑体字,被注释的部分会变暗,这使得编程风格良好,易读易写。
2.1.1 编写赋值语句在事件处理过程中,最常用到的工作就是把一个新值赋给一个属性或变量。
在设计用户界面时,可以使用Object Inspector(Object Inspector)来改变其属性;但有时需要在程序执行时改变属性的值,而且有些属性只能在执行时改变,这些属性在Delphi的在线帮助的“Proprety”主题中被标为执行期属性。
2.1.4 跳转语句Object Pascal的跳转语句有if和case两个。
2.1.4.1 if语句if语句会计算一个表达式,并根据计算结果决定程序流程。
在上文的例程中,根据ColorDialog.Execute的返回值,决定窗体的背景颜色。
if保留字后跟随一个生成Boolean值True或False的表达式。
一般用“=”作为关系运算符,比较产生一个布尔型值。
当表达式为True时,执行then后的语句。
否则执行else后的代码,if语句也可以不含else部分,表达式为False时自动跳到下一行程序。
if语句可以嵌套,当使用复合语句表达时,复合语句前后需加上begin…end。
else保留字前不能加“;”,而且,编译器会将else语句视为属于最靠近的if语句。
必要时,须使用begin…end保留字来强迫else部分属于某一级的if语句。
2.1.4.2 case语句case语句适用于被判断的变量或属性是整形、字符型、枚举型或子界型时(LongInt除外)。
用case语句进行逻辑跳转比编写复杂的if语句容易阅读,而且程序代码整形较快。
下面的例程显示一个使用case语句的窗体:建立如下的事件处理过程:procedure TForm1.Button1Click(Sender: TObject);varNumber : Integer;beginNumber := StrToInt(Edit1.Text);case Number of1,3,5,7,9: Label2.Caption := '奇数';0,2,4,6,8: Label2.Caption := '偶数';10..100:beginLabel2.Caption := '在10到100之间';Form1.Color := clBlue;end;elseLabel2.Caption := '大于100或为负数';end;end;执行程序,当Edit1部件接受到一个值,并按动“OK”按钮触发程序后,Number便被赋值为用户输入的数值。
第2章学好面向对象的Pascal好的工具是好的开发的基石。
Object Pascal就是好的工具。
基于上一章或您已有的技巧,本章将示范每个程序都需要的面向对象技巧。
Delphi在开发工具中是个例外,它本身就是用Object Pascal创建的。
本章中包含了一些代码,它将成为每一个程序的基础。
2.1 Delphi的惯例大约25年前,C语言是当时的新事物。
那时的编译器,像C语言,是弱类型的。
变量可以被声明为指针,然后传给整型参数,反过来也可以。
例如,一个整型变量可以被赋值0,然后被粗心地赋值给char*(在C中,即指向字符的指针)变量。
原因是,编译器并不严格执行数据类型的用法,时至今日依然如此。
不管怎么说,数据只是一些数字嘛。
可问题在于,如果把整数当作指针使用,可能刚好存取到BIOS(基本输入输出)内存的起始地址,真是糟糕透顶。
另一个有害的问题是全局变量。
如果不作检查,大多数人都记不住在一个月之前声明的变量的数据类型;当变量在其他人的代码中,更是如此。
过了几年之后,数百万的美元被浪费在跟踪与全局变量和误用整数及指针相关的程序错误,这时,解决方案出现了。
20世纪80年代早期,微软公司从施乐公司帕洛阿尔托研究中心雇佣了一位匈牙利人Charles Simonyi,他以发明了匈牙利命名惯列并使之流行而著称。
匈牙利命名惯列建立了一组前缀,用以识别变量的数据类型。
这意味着程序员通过看前缀,可以避免整数与指针的误用。
例如,用于存储零结尾字符串的char*变量可能会有前缀sz。
即使是刚起步的程序员也只需记住sz的意思是零结尾字符串(或字符串以零结尾)。
如果全局变量是有前缀的,而您又能够记住lpsz的意思,那么要决定变量的类型可能并不需要找出其声明。
提示或隐含的指导是有益的,但扪心自问一下:有多少人无视停车标志,在州际高速公路上车距过小或吸烟。
取决于您对“California stop”、three-second规则、吸入致癌物质的态度,您可能会忽略其中几项隐含的警告。