有一种说法,说是一个长时间搞面向过程的人(搞c的人)很难理解OO的精髓,很难做出好的OO设计。
以前我也是同意这种说法的,不过那是在学校的时候。
现在我的观点是
不论面向过程还是面向对象,要做一个好的设计,必须掌握足够的计算机底层知识。
1 最根本的理由,软件开发是在计算机上的,因此,天然的要受到计算机的限制。计算机对程序的执行过程本身就是一个过程,其他任何的高级概念都是建立在这个基础之上的一个抽象。因此,有必要了解计算机是怎么执行这个程序的,不论该程序是用什么语言写的。
2 学习面向过程语言的时候有更多的机会了解计算机系统底层,以及数据结构,算法的一些知识。这个当然是因人而异的,并不是说一个学c的人一定在这些方面比学java的人强。但是,平均而言,的确是这样的,这个还是有很多调查数据做支持的。
3 OO只是站在一个更高的层次去思考问题,只是思考问题的时候,忽略掉了很多细节的问题。但是,这并不代表不需要知道底层的东西。一个不懂得基本排序算法的人,一个不懂bit和byte区别的人,一个不懂计算机存储层次的人,你能相信他能做出一个好的设计,真正的用好OO吗。
4 某些非功能特性,比如安全,面向过程面向对象在这个时候已经是实现细节了。