怎样面向对象编程(上)

来源:互联网 发布:ubuntu 退出命令行 编辑:程序博客网 时间:2024/04/26 18:25

        题目有些大,是标题党。此类文章多不好驾驭,鄙猿何知,勉为此文,以期将自己平日写的代码的所思所悟,写成清楚可读的文字。

  • 什么是面向对象编程

        相比大陆的译名,我更喜欢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"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击