(同步自http://www.blogjava.net/AndersLin/archive/2006/05/31/49142.html)
面向对象,嗯,是个老话题了。
书店了关于面向对象对象的多不盛数,面向对象的框架一个又一个,更有大名鼑鼑的设计模式。。。
在看了无数本这样的书,并学习了无数的框架,同时在工作中广泛应用了的设计模式及其变种;
熟练的使用分层框架,而不是一个jsp包打天下;
熟练的使用抽象和多态,而不是难看的if...else;
小心翼翼的贯彻各个面向对象的原则,并写着大量的unittest,
开始沾沾自喜的也以为自己真的懂了面向对象。
但是,(如果没有但是。。。)随着工作越久发现自己的认识其实很浅。
自己所接触到,或者说是自己所体会,思考,以及应用的其实只是面向对象的实现技术部分,
而面向对象分析技术部分才刚刚开始学习。
Booch在其《面向对象分析与设计》一书中分为面向对象编程,面向对象分析,面向对象设计。
不过事实上,正如马丁同学所说的,关于分析和设计的界限很模糊,我愿意按自己的分类的理解:
1. 实现技术,即面向对象设计,其代表就是《设计模式》,以及《企业应用架构模式》。
至于面向对象编程只是面向对象实现的支撑——因为一个具体的语言提供能力会导致同一个设计有着不同表现,如同样的设计模式用java,c++和c#, 甚至smalltalk,python等动态语言下的实现可能不一样。关于语言,在javaeye上有过热烈讨论http://forum.javaeye.com/viewtopic.php?t=17677
2. 分析技术,即面向对象分析,其代表就是《分析模式》(感谢马丁同学的劳动)。
目前的资料和讨论,相对于实现技术来说太少了。即便如此,现有的一些资料也不是很容易理解,如《分析模式》我第一次阅读是在2003年夏天,受限于经验,只理解了chapter2,而其它的分析模式章节几乎是似是而非。在这2006年的春夏之交当我重新翻开《分析模式》,有了更多的体会。