题目有些大,是标题党。此类文章多不好驾驭,鄙猿何知,勉为此文,以期将自己平日写的代码的所思所悟,写成清楚可读的文字。
- 什么是面向对象编程
相比大陆的译名,我更喜欢Object-Oriented Programming的台湾译名——“物件导向编程”。
“面向对象编程”是一个太自以为是的译名——仿佛面对一个问题,高高在上的程序员可以自由地选择不同的方式解决他,可以选择面向结果,也可以选择面向对象。见过太多难以维护的代码,我深以为高高在上、不以为然、面向结果的心态正是灾难之源。
“物件导向编程”则恰到好处地指明了“物件”是主宰,卑微的程序员当以敬畏之心,在“物件”的引导下书写代码,以求少出错——恰如一个面对老师的提问,细心作答的小学生。
譬如要从一个XML文件获取想要的信息,面向结果的程序员会随手写一个正则之流的匹配,再取个子字符串,也许自知不够优雅,but it works!
以我写正则匹配的经验,一切正则匹配都是基于程序员的假设,而假设必然不可靠。
依据XML文件自身的结构,去获取信息,如疱丁解牛,符合物件的本质,自然便能适应多变的XML文件。
- 什么是类
举个Geek一些的例子,文本编辑器是一个类,这个类的作用就是:
-
- 编辑文本
- 保存到硬盘
那么为什么要为Vim设计一个子类呢?
-
- 增加功能
Vim除了基本的文本编程,还可以调用外界的脚本,甚至能通过一些插件调用Eclipse的代码补全功能,这显然是基本的文本编辑器所无的。
-
- 实现多态
譬如文本编辑器类有个保存函数:
public void save() { writeDataToDisk(); }
那么Vim类的保存函数大致要这样写:
public void save() { command("w"); super.save(); }
诚然可以不为Vim设计一个子类,而在save方法中通过条件判断要不要执行w命令,但这不符合事件的本质,这样的代码难以扩展,难以维护。
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>