面向对象的程序设计语言是一种 c++是面向过程还是面向对象


在今日下午的项目回顾会议中,同事深入分享了运用DDD(领域驱动设计)理念对三个模块的重构经验。他将原先Service层中的部分业务逻辑下放到领域层,引发了热烈的讨论。

部门负责人指出,其实业务的总体逻辑并未减少,只是对边界进行了重新界定。

参与开发的同事表示,在第二个模块(如任务系统,涵盖任务拆分和状态等)中,这种思想的优势更为显著,而在一三项目中则不是特别明显。

这让我们引出了一个关键问题:什么是面向对象,什么是面向过程?在何种情境下应采用何种方法更为合适?

以C语言和Java语言为例来探讨。C语言虽无类,但有结构体,而结构体中只能定义属性而不能包含函数。这恰恰体现了在面向过程的思维模式下,数据与操作是如何被严格分离开的。

相较之下,Java的类中没有函数定义的先后顺序,这与其和面向过程、面向对象的最小定义粒度紧密相关。面向过程的最小单位是流程、方法或函数,而在面向对象中,最小单位是对象。对象的行为没有先后之分,都被包容在对象这一大概念之中。

封装、抽象、继承和多态等概念,实际上是对类比的对象进行建模的方式。比如人这一概念,有些属性是的,只向特定的人展示,这就是封装。人所掌握的知识其实是现实世界中某种现象的抽象。人继承了父母的生活习惯但又有自己独特的表现,这就是多态的体现。

子类相对于父类在建模真实世界时有着不同的表现形式。这也是面向对象的四大终极目标。

那么,为何面向对象的思维方式更有利于项目的扩展与维护呢?以一个工作岗位为例,当岗位的工作要求发生变化且需求增多时,若采用面向对象的思维进行适应,只需要对特定对象或其相关部分进行适当调整和扩展。相比之下,若采用面向过程的思维,每次变化都可能涉及到整个流程的调整,这无疑增加了复杂性和维护的难度。

面向过程要求我们拥有良好的流程化思维,而面向对象则要求我们具备更强的抽象思维能力。那么,如果未来出现了“面向文档编程”的概念呢?这或许要求我们拥有更好的问题描述能力,将复杂情况清晰表达。换句话说,面向过程就是按照既定流程思考问题,而面向对象则是针对特定模型进行思考。

以入职流程为例,高级人才的入职流程与新员工的流程可能截然不同。若我们将这种入职行为定义为employee对象的一个方法,这就是面向对象的写法。而如果采用维护一个入职流程的方法,根据不同员工的特点使用如switch case的方式进行不同行为的跳转,那么就是面向过程的体现。