"面向对象"一直是我所推崇的解决复杂问题时应该采用的一种的有效的方法,更严格的说是一种方法论。我认为要理解这个方法必须结合现实世界的发展规律,比如说从人类历史发展的长河可以窥得这个社会已经进化出解决人类各种问题的方方面面的服务机构,各种不同的机构内又再次按照不同的责任进行部门划分。由此可以得出面向对象编程就是"面向责任"编程或者说"面向服务"编程。
"面向对象"最重要的应该在于我们要正确地理解"抽象"的概念。这个词本身就难于解释,我想应该可以这样理解,也就是说面向某种服务我们是否能总结出这方面服务所呈现出的特性,因此我认为"抽象"就等于"总结"。如果拿人类社会做比喻,一个国家算是一个服务方面的话,那么中国的最高最高抽象应该是国务院,直至最高层应该当属联合国了,再往上面是什么?这是一个非常难以回答的问题,也许最高层的抽象应该当属"阴阳"了。另外,这也是我崇拜古人的原因,他们早在千年之前就抽象出了世界由"阴阳"组成。
作为一个软件架构人员,面对一个复杂的系统应该怎样进行设计呢?仅发表一些我的拙见,一个软件系统先进行框架设计,这个框架要根据我们所解决的问题才能确定。就好像一个国家要进行机构的层次划分一样,有最高和最低职能机构。有了框架的分层设计,此时安排哪些服务应该对应于哪一层。然后针对每一层部署服务间的关系。就好像"N层系统结构"应该是在模拟当今人类社会复杂的社会分工一样。
要理解面向对象设计,我觉着可以适当去读一些历史,兵法,建筑类书籍,从这些书籍里面细心去体会,应该能够发现很多和软件设计关联的东西,关键在于去理解它的内涵,或者说是它的核心思想,更或是"抽象"。
其实C++中的模板就是在类的概念上进行更高层次的抽象。MFC的设计采用了面向对象思想,当然也包括ATL,OWL,VCL。它们都对服务进行了很好的抽象,或者说是对某种组织结构的抽象,我将它理解为软件的"思想"(框架)级别的抽象。思想是人类的灵魂,对思想进行抽象应是最高级别了。面向对象语言的出现就是希望在"无形中表现有形世界"。
"道生一,一生二,二生三,三生万物",万物还是由道组成。