美文网首页
天下英雄出我辈,各领风骚数百年——C++的前世今生

天下英雄出我辈,各领风骚数百年——C++的前世今生

作者: 在安言庆 | 来源:发表于2020-07-26 11:24 被阅读0次

    信息学奥赛语言原本可选Pascal,C和C++,但官方称2022年取消前两种考试语言,咱们必须未雨绸缪,因此整个专栏将选择C++作为编程语言。

    我这有个认知事物的固定逻辑,致命三连:是什么?为什么?怎么用?

    1. 是什么:知其然,延展开可以是什么时间?什么地点?什么人物?什么事件?
    2. 为什么:知其所以然,或者说是有什么用?
    3. 怎么用:实践应用,为己所用。

    有点文化的人应该知道这就是“六何分析法”:when、where、who、what、why、how。可以说这是学习的万能公式,只要我们合理地嵌套递归使用,走向人生巅峰不是梦。

    我估计学过C++的人,让他写个程序可能问题不大,但让他说明白下面这两件事,怕是要一时语塞,你还好意思说自己学过C++么?丢不丢人?尴不尴尬?因此,这篇内容我来给大家扫盲,先带大家了解一下C++是什么,C++为什么会存在。

    C++是一门编程语言,废话,谁都知道,但我们把这句话拆分开,逐字咀嚼,味道就不一样了。

    1. 语言是人类用来沟通和表达的方式和工具。
    2. 程序是可以让计算机在对应时间做对应事情的一系列指令,也是人类与计算机沟通的语言。
    3. 编程是使用工具编写程序。

    至此,我们就能总结得到C++就是我们和计算机对话,让它帮助我们解决问题的语言和工具。但它存在的原因不只是能帮助我们解决问题,更主要的还是语言自身发展的需要。

    这还是要从1946年2月14日,世界上第一台计算机EINAC诞生说起。那时候都是由专家编写机器语言让计算机运行,由于艰涩难懂,人类惰性基因作祟,汇编语言被发明出来了,它用助记符代替操作码,用地址符号或标号代替地址码,也就开始了用符号取代机器语言的二进制码的编程时代。不过,汇编语言换汤不换药,只是表达方式上改进了一丢丢,它依旧是面向机器的语言,虽然延续了机器语言的高速度和高效率特点,但是你还是很难从代码上快速理解程序设计意图,移植性还是差。因此,高级语言应时而生。

    多的我就不说了,都能百度到,主要说说信奥用到过的三大编程语言。

    1. Pascal是具有丰富的数据类型和简洁灵活的操作语句的最早的结构化语言,它的这些特点也成就了其算法语言的地位,所以信奥这种设计算法问题的比赛,用Pascal就很理所应当了。
    2. C是一门面向过程、抽象化的通用程序设计语言,编程学习者不可能没听过它的名声。贝尔实验室开发出UNIX操作系统后,先是B语言被用来为系统开发应用以及更新系统,但最终因为移植性的需要,C语言取代了B语言。再后来LINUX的开源也促进了C语言的推广。
    3. C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。

    这有一个面向过程和面向对象的解释用例:
    用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。
    盖浇饭的好处就是”菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是”可维护性“比较好,”饭” 和”菜”的耦合度比较低。蛋炒饭将”蛋”“饭”搅和在一起,想换”蛋”“饭”中任何一种都很困难,耦合度很高,以至于”可维护性”比较差。

    软件工程追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。这正是C++,包括JAVA等一些面向对象的语言,其存在的重要意义。要不然,就用C语言不香么?(话说,对于真正的C语言大神,写代码考虑其可维护性那都是习惯使然,说白了发明C++还是惰性使然。)尽管如此,我依然不敢妄加揣测NOI为何要取消C这门语言来答题,难道是不想难为青少年?

    不管怎样吧,编程语言发展至今,都一直在做适应性改变,为的是让我们在特定场景面对一些特定类型问题时,有个趁手的解决工具。而我们学习一门编程语言,掌握其语法只是基本要求,训练以及应用编程思维才是真正目的,这也是我这个专栏的核心思想。

    天下英雄出我辈,各领风骚数百年。我希望每个读者都能有所收获,不说走上程序猿的秃头之路吧,若干年后也得称得上是“雄辈”“骚年”!

    相关文章

      网友评论

          本文标题:天下英雄出我辈,各领风骚数百年——C++的前世今生

          本文链接:https://www.haomeiwen.com/subject/vndwlktx.html