学习Delphi面向对象编程的一点心得

2012-09-29 Xie Jingyi 更多博文 » 博客 » GitHub »

Delphi OOP

原文链接 https://hsfzxjy.github.io/2012-09-29-impression-for-delphi-OOP/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


以前我是完全不理解类的概念的,我只是把它当成一个Record来看,只不过它里面可以包含函数和过程罢了。但深入VCL学习后我才发现,原来面向对象的世界是这么精彩。

大家都应该见过闹钟吧?随便给一个人一个闹钟,他都会用,不管是电子钟还是机械钟。但如果给一个人一堆零件,有谁能够将他们组装成一个闹钟呢?如果没有专业的知识,恐怕没有人会。为什么呢?为什么人人都会用但很少人懂得其内部结构呢?因为闹钟这一类事物提供一个标准的操作接口,如发条、钟表盘等。不管是液晶屏还是钟表盘,虽然他们形式不同,但他们都是用来显示时间的;同时,闹钟有隐藏了其内部实现的细节,用一层外壳将他们“封装”起来,使外界无法接触其内部,保持了内部的稳定性以及保证了机械运作的安全。这,便是类在生活中的一个真实缩影。

类有三个特性:封装,继承,多态。

  1. “封装”就是隐藏内部实现细节。就像一个人,有为人知的一面,像外表,性格,衣着等;也有不为人知的一面,如其的心理状态以及复杂的内心世界及想法。在面向对象中,为人知的一面称为“接口”,即public段和published段的成员;不为人知的一面称为“私有成员”,即private和protected段(其实protected段也不完全是)。人们可以通过接口获得一些数据或完成一些操作,但不会影响类自己的数据的安全性、合法性和稳定性(当然,要保证类封装的合法性和合理性,像一辆只剩下骨架的汽车,连发动机都露出来了,有人敢去开吗?能保证发动机运行的稳定吗?)。

  2. “继承”就是“子承父业”。一个类可以继承另一个类的所有成员(不包括private段),并在其基础上增加属于自己的成员。这样做的好处是提高代码的可重用性。就像金属和铝的关系一样,铝是一种金属并且拥有金属的一切性质。

  3. “多态”就是“多种状态”,即一个method,可以在本类中实现(static),也可以实现一部分,另一部分让子类去实现(dynamic或virtual),还可以不实现,让子类自己去发挥(abstract)。这极大地提升了类的灵活性,同时也真实地反应了现实生活:一个人不是万能的,他不能干所有的事,但或许他的后代可以,即“青出于蓝而胜于蓝”。

类似乎是生活中的一个真实写照,世界上任何一个物体都满足这三个特性,无论是抽象的(如水果)还是具体的(如苹果)。这不仅仅是一种编程思想,还是对生活的一种总结,对生命的一种感悟,对世界的一种新认识。

程序基于数,而数皆万物也。