面向对象与面向过程的本质区别
条评论面向对象与面向过程这两种编程思想主要体现在一件事上:面向对象关心谁来做,而面向过程关心做什么。
举个例子,如果我现在要开发一个五子棋小游戏,在面向对象的思想中,实现步骤应该是这样的。
- 有一个窗口对象,可以让我的游戏内容展示在里面
- 创建棋盘对象
- 初始化棋盘
- 创建计分板对象
- 初始化计分板
- 玩家开始下棋,棋盘对象创建棋子对象,绘制出来
不难看出,面向对象就是在关心谁来做,先关心哪个对象去做,再去研究这个对象要去怎么做。抽象层级更高,但是符合人类的思维。从代码结构上来看,写面向对象更偏向在画一个树状图,一级一级划分谁要做什么事情,而面向过程更像一个线性的流程图,全程都在关心需要做什么事情。
更官方地说,面向对象以算法和流程为核心,强调步骤拆解。而面向对象以与对象交互为核心,强调责任分配
当然,写法在语言上就有所限定。C更适合面向过程,头文件的引用使用函数做事就意味着C很难实现面向对象的设计模式,当然有一些比较邪门的技巧,容易开枪把自己脚指头崩掉,比如void*
模拟泛型这种不在本文讨论范围。
C缺乏类、继承等基础语法支持,但可以用结构体加函数指针简单模拟对象,但设计难度有所增加,调试难度更有所增加。面向过程更适合处理逻辑简单的任务或算法密集型任务,而面向对象更适合构建GUI应用等复杂系统。
面向对象并非在所有情况下都是最优选择。还是需要依据开发项目的实际需求考量。