感叹:
设计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. ThinkPHP的基础使用

    最近学习了ThinkPHP框架写页面,趁着夜色写写自己的一些经验: 我这里用的服务器是phpStudy,数据库是Navicat,项目必须放在phpStudy的WWW目录里面. 1,搭建th项目 1.将 ...

  2. Android O Bitmap 内存分配

      我们知道,一般认为在Android进程的内存模型中,heap分为两部分,一部分是native heap,一部分是Dalvik heap(实际上也是native heap的一部分).   Andro ...

  3. js 翻页

    翻页功能是js很基础的一个算法,且用得很多,所以必须掌握此项技能. 我们要想清楚在实现翻页的过程中需要哪几个步骤: 1.我们首先需要的变量有哪些,必须的有一个存放当前页码的变量nowPage.一个存放 ...

  4. ECharts实例开发学习笔记二——时间轴

    记录一下ECharts时间轴的使用,首先是照着官方的示例做一遍,在这里不要忘了引入timelineOption.js,后面介绍如何动态创建时间轴的记录数,即根据需求可伸缩显示有多少天或者年月等轴标记数 ...

  5. eclipse版本和jdk的版本兼容问题

    eclipse也是有版本的,当版本过低时,无法兼容高版本的jdk 项目中用的是jdk1.8,但是低版本的eclipse只能选到jdk1.7,导致java文件在编译的过程中,不识别1.8版本jdk的语法 ...

  6. vi 命令学习(一)

    行内移动] w word 向后移动一个单词 b back ·向前移动一个单词 行首 ^ 行首,第一个不是空白字符的位置 $ 行尾 [行数移动] gg go 文件顶部 G go 文件末尾 数字gg go ...

  7. git怎么克隆远程仓库到本地仓库

    参考: https://blog.csdn.net/zhangzeshan/article/details/81564990 不知道为什么输入git的克隆地址就会提示密码错误 ,使用http地址就直接 ...

  8. [luogu4054 JSOI2009] 计数问题(2D BIT)

    传送门 Solution 2D BIT模板 Code //By Menteur_Hxy #include <cmath> #include <cstdio> #include ...

  9. SqlServer大数据的分区方案

    这里介绍的是大数据量的维护日志的分区解决方案: 每个月1张数据表,1个分组文件.31个分区(按每天1个分区).... 为了日后维护方便,直接删除旧的日志数据文件就可以,而不需要去做分区压缩. --用的 ...

  10. ES6-babel转码

    关于BaBel转码 有人问我babel的功能以及执行的过程和配置,在网上查阅了大量的资料~收集到这些~有错请指出,及时修改. ------------------------------------- ...