讲得很好。
我这几天思考发现组合和继承实际可能代表两种完全不同的思维方式。这两种思维体现在Unix和Windows的不同上。
Unix是典型的组合思维,包括Go语言,我们使用Unix命令行,比如“ps -ax | grep java”,这种管道式过滤能力非常强大和灵活,缺点是初学者不容易掌握,不形象。
而Windows是典型的继承思维,大窗口里有小窗口,不断打开小窗口,就进行树结构的深入层次,这种方式非常形象,适合初学者,但是问题也是显然,不够灵活强大,以至于我们经常借助于DOS的bat来完成各种特定的要求,以至于需要编程,使用编程语言组合成我们希望得到的功能。
Windows这种窗口方式非常对象化,也是微软长期对操作系统这个业务掌握后的抽象,它是一种形象化的树形结构,带领初学者进入深处。
Unix的命令组合是一种动态的树形结构,类似函数编程,通过通过函数碎块组合成使用者想达到的强大功能。
很多人思维如果局限在Windows这种继承思维中,会觉得Unix好像不人性化,对程序员不够尊重,这其实是身在庐山中不识庐山真面貌。
什么是人性化?让程序员想做他想做的任何事,给予程序员最大的自由如同Unix风格才是对程序员最大尊重,将自由选择权交给了程序员自己,而Windows是对初学者最大尊重,限制一定自由,但是能够循循善诱。所以,是否对程序员尊重是分层次的,不同层次程序员的需求不同,就像人的层次不同,需求不同一样,没有吃饱饭认为吃饱饭是最大幸福,而吃饱饭的认为精神自由才是人生最高境界。
总结,两种比较常用的思考方法(或解决方法),用哪一种,还是取决于问题域 ,我们千万不能厚此薄彼。对于复杂问题域,使用组合无疑强大,对于熟悉的简单的问题域,使用继承比较形象,一目了然。
对于人来说:组合思维总是暗示自己“我们总是目光短浅,组合的风险比继承少”, 依靠范畴论的科学工具步步为营前行,而继承思维需要牛人,“如果有人能够综观某个事物(行业)几十年的发展,也就是常说的吃透了业务,在这种假定之下来用继承来设计业务,那一定会成为经典”,一旦成为经典,牛人会认为自己是天才。这就是经验与科学的区别。
[该贴被banq于2015-03-17 16:54修改过]