面向对象与面向过程是两种不同层级的思路,两者都是解决问题的方式,但是它们的出发点不同,适用的问题也不同。

面向过程的方式关注的是通过什么样的手段或技巧来逐渐解决问题,一般通过一系列紧密联系的步骤达到解决问题的目的。面向对象的方式关注的是怎么样将问题尽量拆分为相互独立的任务,然后以不同的身份去解决这些任务,最后组合这些任务输入达到解决问题的目的。

这样看来面向过程的方式显得更直接一些,但是当遇到的问题规模和复杂程度很大时,这样的处理方式会使得解决的过程变得十分繁琐,思路不够清晰,并且当问题有所变化时,解决方案不好及时作出调整。面向对象的方式,首先将大的问题拆分为相关性很小的不同的子任务模块,这样就可以将这些子模块分配给不同的对象去解决,各个对象之间不需要知道对方内部的具体工作内容,只需要知道相互之间可以彼此传递什么信息且以怎样的方式传递就可以了。通过模块之间的相互调用协作完成最终的大问题,当问题需求出现变化时,很可能只需要调整各个模块之间的协作方式,就能做出及时的应对,而不需要从头来过。所以面向对象的思想更加适合真实世界中复杂问题场景的需求。

可以这样理解,面向过程是面向对象的基础环节,面向对象是面向过程的上层建筑。面向对象的解决思路中,一个个的子模块中的子问题的解决依然是面向过程的方式,它们通过一层层的包装实现了模块化的结构,就像是一个个提前生产好的工具包,这样可以减少不必要的重复工作,降低任务间的耦合程度,更加灵活地应对不同场景的需求。