面向对象与哲学
1 面向对象与语言无关
初学者往往喜欢选择一门声称强力支持面向对象的语言。在这些面向对象的语言的布道者和拥趸者看来,是否面向对象成为唯一的标准。面向对象超过了面向对象本身之后,就变成了一种语言美化自己和贬低对手的工具。
我本无意于纠缠这个类似恐龙是怎样灭绝的一样的远古时代的话题,面向对象好像沦落风尘已久的美丽女子,因为不再年轻,反招人厌恶。提供了构造,析构,垃圾回收,所有这些与面向对象无关,仅仅属于一种便利的基础设施。语言,无论其自身的实现如何,都与面向对象无关。
Java可以面向对象,C, 汇编一样可以。
2 面向对象的形而上学
面向对象仅仅存在于我们思考问题和解决问题的方式。所有采用面向对象编程的应该正确采用的逻辑思维方式就是脑子里始终长满了一棵树。不要一开始就设计对象,直到它必须存在的时候。面向对象应该是演化出来的,而不是设计出来的。如同“上帝”没有设计人,“上帝”只设计了夸克,等离子体。
凡是架构都是应该像树一样生长出来,而不是移植出来。面向对象这颗树是从根部开始生长还是从树上的一个果实开始生长,取决于问题域。也和个人水平和习惯有关。没有一定之规。初学者最易犯的错误就是脑袋里始终徘徊着对象。就如同武术的入门者,总想着招式。面向对象应该是你的思考方式而不是行为方式。面向对象同时也应该是你的行为方式而不是思考方式。最后的层次就是,一切皆是对象,一切又皆不是对象。上来就设计类层次,设计泛型,设计class,设计属性,方法的人,肯定不是真正理解面向对象的人。
记住树的生长原则,你需要的仅仅是从需求的一个或几个点开始。永远记住这几个关键点,然后去实现它,扩展它,重构它。这是自然选择的方式,是基因进化的方式。没有比这种天然的方法更好的方法学,没有,记住,不要去试图寻找。如果有,人类就不会产生。面向对象就不会存在。
也许有100种解决问题的方法,我只是表面我的立场,你可以不同意我的见解!