感叹:
设计VCL的人真是神人啊,感觉比Pascal编译器的设计人还要牛很多,把整个Windows架构理了一遍,封装的如此之好,复用的如此之好(以至于Delphi的控件满天飞,使用还特别容易),简直惊为天人。
难怪charles petzold当初觉得不可能用PASCAL语言做Windows编程(李维说的),以前我对这句话的理解是,Pascal语言本身达不到windows编程的要求,可能是因为他这方面的功力达不到(觉得可能是因为petzold对比anders的编译器功力相差太远,不知道编译器的许多细节可以达到这一要求)。而我一直觉得语言不过是语法糖,变来变去其实都是一回事,通过高超的编译器手段,用PASCAL语言翻译一下有什么不可以的。今天忽然觉得,charles petzold可能是指VCL不能很好全面的封装windows API,也许会封装的很肤浅(那样岂不是等同于失败),也许会有诸多不适应(能用但别扭,作为一个世界级的编程平台,仍然等同于失败,petzold可能是指这个意思),但最终Pascal编译器+VCL库+IDE的设计(这个相对次要一点)达到了Windows编程的目的(90年代Delphi火成什么样了,后来是有诸多失误Borland才完蛋的:收购dbase,开发office,不受欢迎的kylix,不支持unicode,Web开发落伍,人才流失,妄图精力集中于ALM,盲目跟随.Net战略导致失败的Delphi8与C#编译器,资金实力不够等等),早点学EMB做踏踏实实的开发,不可能会完蛋),而且VCL的设计是如此成功,简直难以置信,如今FireMonkey跨平台编程,照样堂而皇之的继承自VCL的TComponent,一点问题没有(从TControl开始已经是Windows编程了,所以舍弃)。

-----------------------------------------------------------------------------------------

我对全局变量函数与OOP编程关系的一点体会:
1. 多年以前学Java的时候,面对诸多Get/Set觉得很麻烦,但又只能这样,似乎天经地义。其实Delphi里早就准备好了了property(java和delphi项目都开始于1995年),好用又更安全。现在C#也学会了,Java好像至今没有。属性还有一个额外的好处,就是放在IDE里还能强迫其设置正确的值。
2. 以前看Bjarne Stroustrup的书,总是提到一句话,要是C++能够去掉C语言的特性而实现纯OOP就好了,觉得可能是这么一回事(毕竟人家是大师)。
另外我发现Java也好,C++也好,调用类的静态变量/静态很别扭,要写上长长的类名前缀,而且还没有什么很大意义。
而且书上总是强调:编程要尽量不使用全局变量(哦,还没提到全局函数呢。在他们眼里哪有全局函数这个概念呢)。
现在看了Delphi的源码,通过实际使用体会,感觉事情不是那么绝对,还是OOP与过程编程结合最好。允许使用全局变量和全局函数最好(何况还可以带上Unit名称加以区别)。这样既不失OOP的编程特性(只要需要,不需要的话也就可以使用全局变量了)(有哪个语言的复用能超过Delphi),又特别方便编译器自动帮助找到全局函数和全局变量,若参数不同,还能自动判断使用哪一个,全局函数也重载!不像Python,为了实现这个方便好用的特征,还饶了一道弯子:通过两种不同的import语法来实现(但这也间接说明直接使用全局函数是有用的),而Java和C++根本没有这个特点。Bjarne Stroustrup可能还是学者的研究味太浓了,Borland的工程师早就把实际工作做的炉火纯青。所以尽管Pascal语言本身小众(尽管语言不是私有的,但世界上就Borland一家公司在发展它),但Delphi却始终立于不败之地。反过来说,Pascal这么小众,Borland又没什么钱,如果不是诸多特性这样优秀,Delphi/Pascal早就被世界潮流淘汰到垃圾堆里去了。

3. 说了这么多,不知道与Delphi地位相近的VB在各方面是怎么样一个情况?有空可以了解一下。

Delphi研究,对全局变量函数与OOP编程关系的一点体会 good的更多相关文章

  1. 函数响应式编程(FRP)从入门到”放弃”——基础概念篇

    前言 研究ReactiveCocoa一段时间了,是时候总结一下学到的一些知识了. 一.函数响应式编程 说道函数响应式编程,就不得不提到函数式编程,它们俩到底有什么关系呢?今天我们就详细的解析一下他们的 ...

  2. PHP面向对象(OOP)编程入门教程

    面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就 ...

  3. php面向对象(OOP)编程完全教程

    摘自:http://www.php-note.com/article/detail/41 面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行P ...

  4. Python核心编程读笔 10:函数和函数式编程

    第11章 函数和函数式编程 一 调用函数  1 关键字参数 def foo(x): foo_suite # presumably does some processing with 'x' 标准调用 ...

  5. js原生设计模式——4安全的工厂方法模式之oop编程增强版

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  6. RxJS入门之函数响应式编程

    一.函数式编程 1.声明式(Declarativ) 和声明式相对应的编程⽅式叫做命令式编程(ImperativeProgramming),命令式编程也是最常见的⼀种编程⽅式. //命令式编程: fun ...

  7. 面向过程编程(OPP) 和面向对象编程(OOP)的关系

    面向过程编程(OPP) 和面向对象编程(OOP)的关系 原文链接:http://blog.csdn.net/phphot/article/details/3985480 关于面向过程的编程(OPP)和 ...

  8. PHP面向对象(OOP)编程入门教程链接

    PHP官方学习OOP: http://php.net/manual/zh/oop5.intro.php 从其他博主学习:(以下链接来源: http://blog.snsgou.com/post-41. ...

  9. Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

    Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print(" ...

随机推荐

  1. Ajax——异步基础知识(一)

    基础概念 1.异步请求可以做到偷偷向服务器发送请求,而页面却不刷新 2.get异步请求传递参数是通过url追加键值对的方式 3.post异步请求比较特殊,需要设置请求的类型 User-Agent:浏览 ...

  2. Nagios事件机制实践

    Nagios事件机制实践  blog地址:http://www.cnblogs.com/caoguo 一.事件触发执行脚本 [root@Nagios ~]# cd /usr/local/nagios/ ...

  3. haproxy故障处理

    1. haproxy 在配置健康检查的时候,默认没有配置页面检查 ,通过端口状态来检测.后端IIS web服务开始可能 是一个站点,或者采用了基于域名的配置方式,导致目前站点停了,后端主机不能被hap ...

  4. python笔记之发送邮件

    发送邮件前提:开启邮箱授权码 一.开启授权码(以163邮箱为例) 1.登录163邮箱,点击设置--POP3/SMTP/IMAP,出现设置界面   2. 开启SMTP服务且可以查询SMTP的host地址 ...

  5. Shell基本运算符

    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用. expr 是一款表达式计算工具,使用它能完成表达式的求值操作. 例如,两个数相加(注意使用 ...

  6. %2d

    %2d是C语言中printf函数的输出格式说明符. 具体解释如下: 使输出的int型的数值以2位的固定位宽输出.如果不足2位,则在前面补空格:如果超过2位,则按实际位数输出. 注:如果输出的数值不是i ...

  7. windows 小知识---windows下生成公钥和私钥

    首先Windows操作系统需要安装git. 安装完成后,再到任意的文件夹内,点击右键.选择git bash here 打开之后,输入ssh-keygen,一路按enter键. 全部结束后,再到C:\U ...

  8. webpack-dev-middleware 与 webpack-hot-middlware

    dev-middleware:  live reload的实现: 思考一下我們要如何更新(live reload)呢? 當然是需要取得 webpack 編好的資料啊,於是就需要在從 request 到 ...

  9. Heaters (codeforces 1066B)

    贪心题 策略 在最左边设置一个array 0,每一次从右往左,如果有heater的话就寻找heater左边界是不是小于等于目前的上一个heater的右边界,如果没有一个这样的,那么就直接输出-1 代码 ...

  10. PHP排序算法之快速排序

    原理:找到当前数组中的任意一个元素(一般选择第一个元素),作为标准,新建两个空数组left.rignt,遍历整个数组元素,如果遍历到的元素比当前的元素小就放到数组left,比当前的元素大放到rignt ...