今年有几篇文章在说“面向对象”的坏话。最早的一篇是“C++是个骗局”();一篇是
卡内基梅隆大学教授Robert Harper发的博客,声称学校不再把面向对象编程作为入门课程,因为它“反并行“和“反模块化”(http://developers.solidot.org/article.pl?sid=11/03/26/1459210),不适合做入门,但是,博客仍然说,会开始面向对象设计方法学的课程;还有一篇则是从oschina上看到“不要用面向对象迷惑程序新手”()。
我个人是OO的支持者,当然,我也承认OO有局限性,但是,它依然是我所知道的构造一个软件系统的最强有力的方法。我认为,上面的第三篇文章中的一句话可以非常好地概括我自己的观点:“从面向过程到面向对象的转移带来的后果是你从关注问题和解决方法转移到关注架构”。个人认为确实是这样。
面向过程编程的时候,更强调的是,采用自顶向下的结构化方法,对问题进行分析、分解,并用计算机理解的方式表达解决问题的流程。
函数式编程采用了更高级的,离数学更近也更形式化的抽象,是站在了更高的抽象级别在思考问题及其解决方法,深思熟虑后,常常有意象不到的收获,对问题的理解也更加深刻。
而面向对象的方法学强调的东西则是软件架构和代码的结构,如组织、封装、模块间的交互等。
之所以称面向对象是“谎言”,主要是因为在本科、硕士学习面向对象时,老师们总是强调“面向对象的思想更接近问题域的概念,更利于我们思考问题。”,我觉得,这句话是骗人的。工作了一段时间之后发现,对问题的思考更多的还是在使用类似结构化的方法和函数式的思想;但是,在把问题分析清楚并且梳理清楚解决方案中的主要技术点之后,在做设计、实现的时候,就会用到面向对象的思想。
通过类型、对象等提供一致的概念模型,通过封装和仔细的接口定义努力降低模块之间的耦合度,提高未来的可扩展性......等等。越是使用,就越能感觉到面向对象确实是一种强大的软件设计思想和代码构造工具。
阅读(1762) | 评论(0) | 转发(0) |