为四川人民祈祷! www.onefoundation.cn

OO vs NS

面向对象技术很早就已经出现了,在过去的十多年中被人认识,熟知并追捧⋯⋯在那之后,如果某种语言不声称自己是面向对象的,必然遭到大众的遗忘

面向对象技术是重要的软件技术之一,但是说实话,也不是那么神圣。大多数的时候,我们几乎无需使用它

很多人认为写类就是面向对象了,在这里我必须指出,很多人写了无数个class以后依然没有使用过面向对象技术,其实他在使用的叫做命名空间(namespace)。没错,在C++等很多种语言中,都有这样的概念存在,C和PHP没有。许多人定义类实际上只是为了使用命名空间。

为什么,因为问题远没有复杂到需要OOP的程度。我们没有使用继承,没有抽象类,没有虚函数。我们不需要设计模式,我们要做的仅仅是做在一台电脑面前,默默的敲下代码,完成一件事情,一个程序只需要main()一个函数。

是的,最简单的情况正如上面所说的,当退出main()的时候,函数中的所有数据都被清除了。问题再复杂一点的时候,全局变量就是我们最简单的选择。但是事实远不像我们所想的那么简单,这也就是为什么世俗的眼光如此仇视全局变量的原因。

很明显,在程序简单的情况下,这样完全没有问题。一旦你的程序需要为别的程序服务,所有人必须保证自己的全局变量不会被别人使用,要不你可以在变量前面加上复杂的前缀,要不我们开始在迫于世俗的压力下用类来封装自己的代码。

我相信,迫于这样的压力做这样的事情的朋友都不会承认自己在使用OO技术。还是同样的原因,问题根本没有那么复杂。他们一定相信函数就可以解决这类问题,只是迫于世俗的压力去把代码封装成类。他们使用的技术实际上就是命名空间

我们很容易发现一个观点,似乎全局对象比较容易被别人接受,然而全局变量却被人所不齿。崇尚设计模式的人,一定空想着一个低耦合性的世界。然而,理想世界很遥远,或许真的有这样的完美世界,现在,我们依然要忍受着现实的缺憾⋯⋯哈哈,扯远了

我想说的是,就算你是一个OOP的坚决反对者,或者标榜自己对lambda是如何,那也不妨碍自己定义几个class

就像zen of python中所说的,命名空间是个好东西,让我们用吧
 
by kernel1983
Comments »
  1. 2007-06-23 10:38
    Helloixk - this is just a testing, dont worry about it
Leave a Comment:
code:199