精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>各行各业>>IT人论坛>>【行业与研究】>>迷失于对象

主题:迷失于对象
发信人: ninja_xena()
整理人: hnyjchuhong(2001-12-10 19:56:51), 站内信件
    “面向对象”现在已经成为IT业中最为时髦的词汇了。各种的OOA OOD OOP的书籍汗牛充栋。大家写程序,做项目,言必称对象。可是,同样有很多大师还在苦口婆心的劝学对象,仿佛这个东西永远也有人没真正掌握。
    有人说“JAVA”是面向对象比较好的。“C++”是不完全的。“SMALLTALK”是真正的面向对象语言的。所有的这些定义,其实到底争论都是一些语法上的设置、约束。但,到底什么才是面向对象呢?
    记得我刚接触面向对象编程的时候,是在开始写MUD这种游戏的时候。那时候的程序是在MUDOS上用LPC这种被“包装”过的C上面写的。可以说语言本身并不具备很多面向对象的特性,但那里的一个房间,一个人物,一个物品,都是由一个“类”来描述的。从概念上来说,整个程序的确是由各种的对象构成的。
    因此我开始的思想,就是把对象做为一种世界观。认为写面向对象的程序,必须要把现实的东西映射为某个对象,然后描述为某个类。的确,在随后的各种C/S程序中,这样的思想知道我写了一大堆的程序,而且我自己看不出有什么不妥的地方。而且心里想:所谓面向对象,不过如此嘛!
    但真正让我迷惑的是在我看了“四人帮”的那本《设计模式》之后。此书提及的各种模型,各种对象结构,如同变戏法一样的可以自我适应无数的需求变更。要知道,先确定需求,在设计编程,曾经是我写程序的不二法则。而且一旦遇到需求的变更,只能看运气好坏来决定程序修改的幅度。“写出适合于需求变更的程序”正是《设计模式》给我的最大启示,也狠狠的敲碎了我的面向对象的概念。
    在原来的观点里,描述一个售票亭,需要一个类。而有人来买票,则需要又描述一个“客户”的类,最后通过“买票”的方法交互。如果此票亭又卖汽水,则需要重新定义“票”和“汽水”,同时需要修改“客户”和“售票亭”类。但如果把“买票”和“买汽水”都描述成一个基类的不同子类,这样就算需要再买些别的什么东西,只需要增加描述这动作的类就可以了。这就是在《设计模式》里提及的Command模式,多么精巧的设计,多么新奇的想法?当我第一次了解的时候,就深深的感觉,面向对象不仅仅是方便我调用动态绑定方法的机制,而是一种拥有无限可能性的强大机制。
    可以说,现在我认为“面向对象”的思想是一种方法论,而不是一种世界观。尽管很多入门的书把它介绍成如同一个僵死的“世界观”,但其实这个世界是可以由无数个不同方向去观察的。而“面向对象”的概念就是提供了自由观察,按最需要的方式描述世界的一种方法论!

[关闭][返回]