老子中有云“道生一,一生二,二生三,三生万物”。
道的生长历程到三嘎然而止,因为没有说三生四,而说三生万物。从上应该可以说事物到“三”已经表示了一个复杂的阶段。
如果把上面的“道”是指c++类设计和编程的话,那是什么样子呢?
我们用c++编程不是表示说我们必须要用类来实现需求,这里只是假设我们通过类来实现。
下面我用老子的智慧套用在c++类设计和编程上:
“道生一”阶段,我们通过设计一个类来实现需求。对于简单的需求来说一个类可能已经足够,它包含私有的数据结构和暴露给外部的接口。应该说,这种设计非常简单实用,它属于一个封闭的世界中,过着自给自足的生活。为了应对外部变化的世界,它对自己的国民(属性)和对外贸易(接口)进行调整。总之,它是属于闭关锁国的阶段,就像18世纪前的中国一样。
“一生二”阶段,就像伊甸园中从亚当到亚当和夏娃一样。对于我们来说可能会问,伊甸园中为什么会多出一个夏娃来呢?她来自哪里,为什么要来,来干吗?就像这个世界为什么有男人和女人,为什么有白天和黑夜,为什么有夏天和冬天,为什么有阴有阳,...?为什么不让“一”一直发展下去呢,我们为什么那么狠心要把“一”分裂呢?
在开始我们设计了一个类A,随着人类贪婪需求的增长和对懒惰功能的扩充,我们又设计了类B。我们让B做一些事情,然后又通过类A来调用它。
“一”的世界 "二"的世界
A A <——> B
我们为什么要多创造一个B,就像上帝为什么多创造一个夏娃出来,这是为什么?难道上帝觉得亚当无聊所以创造夏娃来陪他吗?在程序的世界中,我们可以把自己暂时比作上帝,我们无所不能,我们可以随心所欲的创造世界(对象等),我们可以让它生,可以让它死。在这里我们可以把类A看成亚当,我们为什么还要创造B呢?
工具的限制。我们可以把所有B的结构和功能并入A中,感觉这也是非常好的一件事情。前几天看了一本电子书《大道至简》,其中说到Delphi的原始时代,因为编译器的限制导致一个程序的大小若超过64K的话,它就没法编译了。这就意味着若当时你的程序是65K的话,那就编译不了。你说我可以通过优化算法等渠道把程序字节数缩小使它的大小小于64K,那不就OK了吗。那若是不管你用什么办法程序的大小已经没有办法缩小了,它必须超过64K,这时怎么办,编译不了,意味着写的程序没办法执行,即使程序中有美妙的算法那又怎么样,不能允许还不是“废铜烂铁”。那时的办法只能“分裂”它,把它一分为二再说,至于后面的编译和链接是以后的事了。这里由于工具的限制导致必须一分为二。