概要
如何理解 C++ 的面向对象特性以及 C 的面向过程?参考《C++ Primer》。
主要内容
C 语言的面向过程
一般来说,计算机要处理两个概念——数据和算法。数据是程序使用和处理的信息,而算法是程序使用的方法。面向过程的语言意味着它强调的是编程的算法方面。程序命令计算机按一系列流程造成特定的结果,就像菜谱指定了厨师做菜时就遵循的一系列步骤一样。
随着程序规模的扩大,计算机科学家开发了一种更有序的编程方法——结构化编程。C 语言就包含发这些结构(for 循环,while 循环,do while 循环和 if else 语句)。结构化编程反映了过程性编程的思想,根据执行的操作构思一个程序。
另一个新原则是自顶向下的设计。在 C 语言中,其理念是将大型程序分解为更小的任务,便于任务的管理,就像收拾书房一样,先从桌了开始,然后整理每个抽屉等等,最后完成任务。C 语言的设计有助于使用这种方法,它鼓励程序员开发程序单元(函数)来表示各个任务模块。
面向对象编程
虽然结构化编程的思想提高了程序的清晰度、可靠性,使之易维护,但对于现代大型程序来讲,仍远远不够。所以面向对象编程(OOP)就被提出来了。与强调算法的过程性编程不同的是,OOP 强调的是数据,其理念是设计与问题的本质特性相对应的数据格式。在 C++ 中,类是一种规范,描述了这种新型数据格式,对象是根据这种规范构造的特定数据结构。例如,类可以描述公司管理人员的基本特征(姓名、头衔、工资、特长等),而对象则代表特定的管理人员(如 王三,经理,¥16666,沟通交流)。当然,通常情况下,类规定了可使用哪些数据来表示对象以及可以对这些数据执行哪些操作。
OOP 程序设计方法首先设计类,它们准确地表示了程序要处理的东西,类定义描述了对每个类可执行的操作。但是 OOP 编程不仅仅是将数据和方法合并为类定义。例如 OOP 还有助于创建可重用的代码,这将减少大量的工作,信息隐藏可以保护数据,使其免遭不适当的访问,多态能够为运算符和函数创建多个定义,通过编程上下文来确定使用哪个定义,继承能够使用旧类派生出新类等等。 ###为什么要面向对象 简单来说,是为应对复杂程度不断提高的现代编程任务而设计的。
总结
一名话来说,就是思维的差异。
- 面向过程的语言意味着它强调的是编程的算法方面,面向对象编程强调的是数据。
- 面向过程性编程试图满足语言的过程性方法,面向对象编程试图满足问题的要求。