感叹:
设计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. Hibernate中使用子查询

    子查询:   子查询是SQL语句中非常重要的功能特性,它可以在SQL语句中利用另外一条SQL语句的查询结果,在Hibernate中HQL查询同样对子查询功能提供了支持.   如下面代码所示: List ...

  2. Leetcode0133--Clone Graph 克隆无向图

    [转载请注明]:https://www.cnblogs.com/igoslly/p/9699791.html 一.题目 二.题目分析 给出一个无向图,其中保证每点之间均有连接,给出原图中的一个点 no ...

  3. Java 基础入门随笔(2) JavaSE版——关键字、进制转换、类型转换

    1.Java语言-关键字 关键字:被java语言赋予了特殊含义的词,特点是所有的字母都为小写. java涉及到的关键字整理: 用于定义数据类型的关键字 class interface byte sho ...

  4. 转:selenium自动化脚本错误总结

    https://blog.csdn.net/zxy987872674/article/details/53141118

  5. Android中Webview使用经验总结

    很早前就喜欢在Android中使用Webview组件结合JS来做应用,总结了一些不错的小经验,在这里持续更新,自己备忘,也希望给其他需要的同学一些参考- 1.添加权限 要用Webview,确认你在** ...

  6. 中望CAD VBA检测文件是否存在

    Option Explicit Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "Path ...

  7. LeetCode--寻找数组中心索引

    给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和. 如果数组不存在中心索引,那么我 ...

  8. 洛谷——P1572 计算分数

    P1572 计算分数 模拟+字符串 注意有两位数的情况以及负数情况 #include<bits/stdc++.h> using namespace std; string s; ],b[] ...

  9. [CodeForces] 274E Mirror Room

    题意翻译 有一个n*m的格子图,其中有一些是黑色的,另一些为白色. 从某个白色格子的中心点向左上(NW),左下(SW),右上(NE),右下(SE)四个方向中的一个发出一束光线,若光线碰到黑色格子或者墙 ...

  10. Chat Group gym101775A(逆元,组合数)

    传送门:Chat Group(gym101775A) 题意:一个宿舍中又n个人,最少k(k >= 3)个人就可以建一个讨论组,问最多可以建多少个不同的讨论组. 思路:求组合数的和,因为涉及除法取 ...