跳到主要内容

编程范式游记

1.起源

  • 类型带来的问题:同一事物的不同类型导致处理时复杂度的提高,因此需要抽象与隔离
  • C语言存在的问题:
    1. 一个通用的算法需要适配处理的数据类型,但C语言在适配过程中只能使用 void 或者 宏替换 的方式,这两种方式导致类型过于宽松,带来其他问题
    2. 适配数据类型时需要传入额外参数,以为无法识别被泛型后的数据类型
    3. 算法实际上是对数据结构的操作,而数据存放在数据结构中,因此真正的泛型除了适配数据类型,还需要适配数据结构,会导致泛型算法复杂度急剧上升(容器内存的分配与释放、不同数据体的内存分配和是泛模型、对象之间的复制等)
    4. 实现泛型算法时的权衡,什么该封装,什么该抛给调用者处理
  • C语言的编程范式决定了他是一门过程式的编程语言,底层灵活且高效,适用于开发运行较快且对系统资源利用率要求较高的程序

2. 泛型编程

  • C++ 早期的许多工作是对 C 的加强和净化,并把完全兼容 C 作为强制性要求
    1. 用引用解决指针的问题
    2. namespace解决名字空间冲突的问题
    3. 通过try-catch解决检查返回值编程的问题
    4. class解决对象的创建、复制、销毁的问题,从而解决在结构体嵌套时深度复制的内存安全问题
    5. 通过重载操作符达到操作上的泛型
    6. 通过模板template和虚函数的多态以及运行时识别来达到更高层次的泛型和多态
    7. RALL、智能指针的方式,解决C语言中因为需要释放资源而出现的丑陋、易出错的代码问题
    8. STL解决C语言中算法和数据结构的一些坑
  • 良好的泛型需要解决的问题:
    1. 算法的泛型
    2. 类型的泛型
    3. 数据结构(数据容器)的泛型