从turbopascal到delphi


●牢骚



我是在高一接触pascal言语, 由于参与noi的需要, 顺理成章的要使用turbopascal来写程序了。 半年后, 我末尾想着如何编写windows程序, 又天经地义的找上delphi。 初见delphi, 除了begin, end让我觉得倍感亲切外, objectpascal里的增加的面向对象的语法却让我很是吃惊, 事先的我可根本不懂什么叫面向进程, 面向对象;最可恶的是, 国际那些教育家们, 除了会拿着清华的那本精简的不能再精简的pascal教材照本宣科外, 似乎再也没有什么本质性的工作了, 传说中的《turbopascal大全》更是无处可寻, 所以关于unit, interface这些delphi里随处可见的关键字我也很不明白。 所幸, 其后不久, 我失掉一本名为《计算机反病毒技术》的书, 里面统统都是用turbopascal编写的源代码, 经过它我迅速明白了早已存在于turbopascal中unit, interface等关键字的含义和用法, 又以delphi中的help文档为扶手, 末尾蹒跚学步了。



印象中, 国际delphi作家似乎更偏爱编写应用实例类的技术书籍, 至于语法这种东西, 没有几个人情愿多去触及, 即使书中必须谈及, 也是寥寥数笔, 匆匆带过, 或者干脆与某本书相似。 对objectpascal语法讲解最好, 最威望的恐怕就算《delphi5开发人员指南》了, 这本书至今也是备受推崇的。 但与如今众多的c++书籍相比, delphi依然逊色许多, 也难怪很多新手特别是从来没有接触过pascal言语的新手, 在学习objectpascal时会遇到不少困难。 自己的觉得是:在从turbopascal向delphi过渡的进程中, 由于没有正确的指引, 走了很多弯路;由于没有正确的桥梁, 必须要一步完成大跨越。 所以, 在这里, 我提出自己曾经遇见的沟壑, 路标性给出我自己的看法和总结, 希望给入门的同学们一些帮助。 我不打算详细引见语法知识, 并假设你曾经有一点pascal言语和面向对象概念的基础。 要想学习相关详细知识, 我引荐各位一定要阅读《delphi开发人员指南》和delphihelp文档中的相关章节。



习惯了在一个program模块内写完一切面向进程代码的我, 有几天的工夫不时未能彻底明白在非unit模块中, 自定义类的框架, 语法是如何的, vcl源代码虽然经典, 却过于繁杂, 不能让我迅速掌握根本, 我需要一个最复杂又最能阐明问题, 完整的可运转的代码, 苦于无处寻求答案, 只好亲身入手, 探究对应关系, 终成其下两段代码。



{以这个begin为标志, 主程序末尾, 其作用相当于c/c++中的main函数}



下面是一段极端复杂的包含记录类型声明和进程声明的代码, 二者基本规则如下:用户自定义的数据类型, 需要放在以保留字“type”扫尾的代码段中;进程(procedure)和函数(function)要放在以保留字“var”扫尾的代码段中;最后一个夹在begin和end间的代码段是主程序的末尾, 也就是整个程序的入口, 作用相当于c/c++里的main函数, 请留意, 只有在以program保留字扫尾的代码模块中, 这个begin和end才具有程序入口的作用。



再看下面的代码:



类作为用户自定义的一种数据类型, 其声明的规则, 成员函数、进程的完成方法都符合经典pascal的基本规则, 独一不同的是保留字变了, 从记录体变成了类(详细比拟代码结构和语法规则), 这也阐明objectpascal是在经典pascal的基础上进行了面向对象内容的语法扩充。 当然, 内部的运转机制并没有外表语法扩充这么轻松, 可那是编译器的事情, 在这里, 我们完全不必理会。 差点遗忘通知读者怎么调试下面的代码了:在ide环境主菜单里选择filenewother, 在newitem项里选择consoleapplication, 这时呈现了代码编辑框, 再将下面的代码贴入, f9, 完成!



代码内的{$apptypeconsole}是一个编译开关, 它通知编译器, 这是控制台程序, 在格式上它与注释的差异就是那个“$”符号;tmyclass=class(tobject)可以简写为



tmyclass=class, 表示tmyclass类从tobject类承继而来, tobject是delpi中一切类的祖先, 这也是为什么我在代码中没有声明destroy进程却依然可以使用的缘由;delphi中类的结构很风趣, 请留意myclass:=tmyclass. create这一句, 这与c++不同[注1]。 readln使程序停顿下来, 直到用户按下回车键才完毕程序退出。 更多详细内容请参考《delphi开发人员指南》



节。



下面两段代码相互对应, 虽然很复杂, 不过我却认为他们在某种程度上很容易让同学发现由经典pascal向objectpascal过渡的一些方法, 对objectpascal的类定义语法有个初步理解, 这是很重要的一步。 当初我要是可以看到这两段代码, 或许能少浪费很多工夫了。



另外, 在tp5. 5–delphi7. 0中都支持object类型(对象类型)。 语法如下:



method允许以下几种形式:



不错的, 结构函数和析构函数都支持virtual, 在结构函数中, 还有一个有用的东西是fail函数, 当结构函数的初始化失败时, 它可以用来释放曾经分配的资源。



接下来的代码, 是turbopascal的help文档中, 关于fail函数的演示代码, 可以让大家对此有个较深的看法。 turbopascal确实是很弱小和优秀的。



DELPHI{判断父类的初始化能否成功}



自定义的object不一定要从tobject承继下来, 因而它也没有内建的结构、析构和其他方法, 通常使用new进程和dispose进程建立和销毁它的实例。 delphi中依旧支持object, 并有property成员了, 但是依然不允许published。 kol[注2]也使用该类型完本钱人的构架。 但是对此关键字的保留主要是为了兼容, 建议用户改用class关键字。



interface局部用来声明对外接口, 也就是可以被外部援用该文件的程序使用的函数和进程;implementation局部包含接口局部声明的各种函数、进程详细完成的代码;begin不时到最后的end. 之间都是初始化局部, 可以为本unit内的各种变量, 进程, 函数初始化。 假设没有内容需要初始化, 那么begin可以省略, 但end. 必须存在。



也可以这样写:



finalization局部的功用, 有点相似于析构函数, 它主要针对本unit模块中initialization局部初始化的资源进行释放, 并且是在程序完毕时运转, 假设程序以halt进程完毕了, 该局部的程序将不能执行。



unit模块中的interface等关键字和结构初看似乎有些限制程序员的自由度, 但也正是这种语法规定表现出pascal言语的严谨和优美, 为减少程序出错的几率做出保证。



给出一个复杂的initialization例子。 在菜单中选择filenewapplication, 再在窗体上放置一个按钮, 双击该按钮编写它的click事件处置代码, 完整代码如下:



以上所述, 是过渡中两个基本的重要问题, 弄懂它们方可初步明白自己为什么要这样编写代码, 该在哪里编写代码, 如何扩展代码功用。



●我引荐的参考书籍



《delphi5开发人员指南》机械工业出版社



《delphi深度历险》陈宽达科学出版社



《pascal精要》网络下载电子版



《windows2000开发人员指南》中国水利水电出版社



delphi组件参考书我暂时没有发现特别好的, 平时我主要依靠论坛, 源代码, delphi自带的demo和文档来学习组件的使用。



●再说点



现在有一些大学取消了pascal言语课程, 去年的acm大赛也取消了pascal言语的使用, 不禁心寒, 启蒙教育没有人做了, 这些都使得delphi在先生中的处境更加困难。 在国际的delphi论坛上, 常罕见到许多半吊子程序员在享用delphi的快速开发的时候, 嘴巴里还在责备delphi功用太弱, 不能搞什么底层开发, 甚至直接责怪pascal言语, 殊不知, 在dos年代, 有多少著名软件使用pascal开收回来的呢, 有多少底层控制程序有着pascal的身影呢?现在我手头上还有pascal编写的病毒代码, 反病毒代码, ic芯片控制代码。



或许正是delphi的rad能力降低了程序开发的门槛, 让很多半吊子进入了程序界, rad开发蒙蔽了许多半吊子编程者(称谓他们为程序员或许稍欠火候)的眼睛, 但是国际的教育界异样有着不可推卸的责任, 选修课开vb的不少, 讲delphi的很少, 我曾经还遇到过一个从心底里就瞧不起delphi, 不啻



教师, 而理想上他根本就没有用过delphi。 我现在常去本国网站, 发现国际被争论不休的问题, 在国外早就有人在做, 并且做的十分棒。



似乎我在为delphi翻案, 不停的维护它, 没辙, 谁要我是它的fans呢, 人总要有点信仰, 喜好不是吗?所以我认为, 与其花工夫咒骂一个工具的“缺乏之处”, 不如花工夫研究如何解决这个问题。

文章由淘宝缩阴产品排行榜整理,收集辛苦,希望能保留出处。原文链接: https://www.cnblogs.com/jiyizhen3721/archive/2011/05/15/2047029.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/25507

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午3:21
下一篇 2023年2月8日 上午3:21

相关推荐