本章导航地图:
1.什么是编程范式?
编程范式:ProgrammingParadigm。即模范的意思,范式即方式、方法,是一种典型的编程风格。说白了就是指从事软件工程的一种方法论。
C语言
C语言诞生于年,到现在已经有45年的历史,在它之后,C++、Java、C#等语言前仆后继,一浪高过一浪,都在试图解决那个时代的那个特定问题。我们不能去否定某个语言,但可以确定的是,随着历史的发展,每一门语言都还在默默迭代,不断优化和更新。同时,也会有很多新的编程语言带着新的闪光耀眼的特性出现在我们面前。
C语言有哪些特性呢?
1.C语言是一个静态弱类型语言,在使用变量时需要声明变量类型,但是类型间可以有隐式转换;
2.不同的变量类型可以用结构体(struct)组合在一起,以此来声明新的数据类型;
3.C语言可以用typedef关键字来定义类型的别名,以此来达到变量类型的抽象;
4.C语言是一个有结构化程序设计、具有变量作用域以及递归功能的过程式语言;
5.C语言传递参数一般是以值传递,也可以传递指针;
6.通过指针,C语言可以容易地对内存进行低级控制,然而这加大了编程复杂度;
7.编译预处理让C语言的编译更具有弹性,比如跨平台。
C语言的这些特性,可以让程序员在微观层面写出非常精细和精确的编程操作,让程序员可以在底层和系统细节上非常自由、灵活和精准地控制代码。
2.泛型编程
泛型编程来源于C语言中对于各种数据类型的适配问题,对类型的抽象,这就是所谓的泛型编程。
2.1C语言泛型的实现
1.使用void*关键字函数接口中增加了一个size参数函数的实现中使用了memcpy()函数函数的实现中使用了一个temp[size]数组2.使用宏定义
2.2C++解决了C语言中的哪些问题和不便?
1.用引用来解决指针的问题。2.用namespace来解决名字空间冲突的问题。3.通过try-catch来解决检查返回值编程的问题。4.用class来解决对象的创建、复制、销毁的问题,从而可以达到在结构体嵌套时可以深度复制的内存安全问题。5.通过重载操作符来达到操作上的泛型。6.通过模板template和虚函数的多态以及运行时识别来达到更高层次的泛型和多态。7.用RAII、智能指针的方式,解决了C语言中因为需要释放资源而出现的那些非常ugly也很容易出错的代码的问题。8.用STL解决了C语言中算法和数据结构的N多种坑。
2.3C++的泛型如何实现?
1.通过类的方式来解决类里面会有构造函数、析构函数表示这个类的分配和释放还有它的拷贝构造函数,表示了对内存的复制还有重载操作符,像我们要去比较大于、等于、不等于2.通过模板达到类型和算法的妥协模板有点像DSL,模板的特化会根据使用者的类型在编译时期生成那个模板的代码模板可以通过一个虚拟类型来做类型绑定,这样不会导致类型转换时的问题3.通过虚函数和运行时类型识别虚函数带来的多态在语义上可以支持“同一类”的类型泛型运行时类型识别技术可以做到在泛型时对具体类型的特殊处理。
2.4类型系统
编程世界中的类型系统主要有两种:内建类型和抽象类型。
内建类型,如int、float和char等;抽象类型,如struct、class和function等。
在编程世界中建立类型系统有什么作用呢?
程序语言的安全性利于编译器的优化代码的可读性抽象化
基于类型系统就衍生除了两类语言,静态类型语言和动态类型语言。所谓静态类型语言,就是有严格的类型声明,类型在声明出来后就不能随意改变了,如C、C++、Java;所谓的动态类型语言就是没有严格的类型声明,类型可以随意改变,如Python、PHP、JavaScript等。
类型的本质:
1.类型是对内存的一种抽象不同的类型,会有不同的内存布局和内存分配的策略2.不同的类型,有不同的操作对于特定的类型,也有特定的一组操作
2.5泛型的本质
标准化掉类型的内存分配、释放和访问标准化掉类型的操作。比如:比较操作,I/O操作,复制操作……标准化掉数据容器的操作。比如:查找算法、过滤算法、聚合算法……标准化掉类型上特有的操作。需要有标准化的接口来回调不同类型的具体操作……
那么泛型的本质就是屏蔽掉数据和操作数据的细节,让算法更为通用,让编程者更多的