面向过程(Process oriented) 和 面向对象(Object Oriented)都是软件分析、设计和开发的一种"思想",它指导着人们以不同的方式去分析、设计和开发软件。

早期先有了面向过程思想,随着软件规模扩大,问题复杂性的提高,面向过程的弊端越来越明显。出现了面向对象思想并成为主流的方式,两者贯穿于软件分析、设计和开发各个阶段:

面向对象分析(OOA)
面向对象设计(OOD)
面向对象编程(OOP)

如果说C语言是一个典型的面向过程语言,Java则是一种典型的面向对象语言。

"面向过程"(Process oriented) 思考问题时,我们首先思考 "怎么按步骤实现" 并将步骤对应成方法,一步一步最终完成。这个不需要过多协作的情况下。比如用 "面向过程思想" 思考开车:

1.发动汽车-》2.踩离合-》3.挂挡-》4.踩油门-》5.走你

而 "面向对象"(Object Oriented)思考问题时比较契合人的思维模式。首先思考的是宏观上的问题,比如思考怎么造车,假设一辆车会有 轮胎 - 发动机 - 车壳 - 座椅 - 挡风玻璃 - 等等.....各种零件,我们就会先思考 "车怎么设计" ,而不是 "怎么按步骤造车的问题" 。这就是思维方式的转变。

用 "面向对象思想" 思考造车:

2311a.png

为了便于协作,我们找轮胎、发动机、车壳、座椅、挡风玻璃工厂完成这些制造的步骤,这样,大家可以同时进行车的制造,最终进行组装。大大提高了效率。但是具体到轮胎厂的一个流水线操作仍然是有步骤的,还是离不开面向过程思想!


总结:

1.都是解决问题的思维方式,都是代码组织的方式:

  • 面向对象:宏观上的
  • 面向过程:微观上的。

2.解决简单的问题可以使用 "面向过程" 思维。
3.解决复杂的问题可以使用 "面向对象" 思维。
4.面向对象 具有封装性、继承性和多态性。


1个经典的比喻:

面向对象是盖浇饭、面向过程是蛋炒饭。盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低。