C需要能干什么?
对于“C 语言能干什么”这个问题,我的回答是:C 语言能干一切其他语言能干的事。
C 语言自身的特性使得它能完全操作计算机所有的资源,因此它生来就是开发操作系统等底层核心软件的。不仅仅是开发操作系统,还有一些数据库和一些其他高级编程语言的编译器、解析器等。C 语言简单的语法,被 C++、Java、Go、JS 等语言效仿。其实从 C 语言的语言特性就可以看出来,它属于高级语言中的低级语言,又是低级语言中的高级语言,能适应一切底层开发。
然而,C 语言既然能做一切底层开发,就一定能做一切上层开发,只是对开发者的能力要求远高于 Java、Go 这些高级语言。其实,所有的高级语言都有共同的目标,就是降低开发者的学习使用成本和心智负担,从而降低软件的开发和维护成本。比如,Java 用虚拟机实现了一次编译处处运行,用垃圾内存回收机制解决了程序员使用内存的困难,不用时刻担心内存没有释放。这些归根结底是为了降低软件开发成本。
对于“C 语言能干一切其他语言能干的事”这句话,你可能还有这样的疑问:C 语言是一门面向过程的编程语言,而在工程应用中,我们多使用面向对象的编程方式。用 C 语言来做现代大型软件项目,是不是不太现实?
确实,由于 C 语言函数之间的强耦合和内存的低级控制特性,在用它开发大型工程项目时,如果不设计好架构和相关的编码规则,将会给项目的开发、协同和后期维护带来很多困难。但是,C 语言是一门面向过程的编程语言,并不意味着我们不能用它来实现面向对象的编程方式。接下来,我就具体讲讲,怎么用面向对象的思想开发 C 语言程序。
面向过程和面向对象的两种思想
我先带你回顾下面向过程和面向对象这两种思想,以及一些容易混淆的相关概念。
对于计算过程的不同认识,产生了不同的计算模型。基于计算模型进行分类,我们可以将语言分为命令式、函数式、面向过程、面向对象四大类。如果从程序的本质上来看,可以进一步归纳为两种:命令式语言和说明式语言。
面向过程是命令式语言的主要实现手段,而面向对象是当前应用编程领域中最常用的语言类型。但是,无论从语言定义还是数据抽象发展来看,面向对象都是面向过程的衍生。
命令式这个词太过于学术化了,其实我们常见的编程语言,从汇编到 C 再到 C++、 Java,都是命令式语言。命令式语言在很大程度上受到了“冯·诺依曼”计算体系的影响。这个体系又以“存储”和“处理”为核心,其中存储被抽象为内存,处理被抽象为运算指令和语句。于是,命令式的核心就是通过运算去改变内存(数据)。郑州哪家精神病医院好http://www.juenpt.com/
听到这里,你应该能把这些概念的关系理清楚了:面向过程 / 面向对象这些概念,和命令式并不在同一个维度上。前者是运算类型,表现为语言;后者着重表达的则是程序设计和开发的方法。
C 语言和 C++ 都是命令式语言,不过 C 语言是面向过程的语言,C++ 是面向对象的语言,那么面向过程和面向对象有什么区别呢?其实它们大同小异,只不过是“思考问题的方式”不同。为了方便你理解,这里我用“吃饭”来类比。
过程是对每个功能或者动作的精确实现。用“吃饭”来举例子:吃饭这个“功能”,包含怎么吃,吃多少。小猫能吃饭,人也能吃饭,但二者吃饭的“过程”肯定有区别。