C++的编程范式

“C++ 三人谈”中看到恶魔曾经指出C++ 的编程 范式可以分为ADT+PP,GP,OO三个方向。

1、 ADT+PP

ADT:abstract data type; 抽象数据类型
PP:procedure programme; 面向过程的编程范式
ADT+PP 就是说面向过程的编程范式+抽象数据类型,你可以理解为c++的前身:带类的C。

2、 GP
GP :泛型编程,GP(Generic Programming,泛型编程)号称编程思想的又一次革命。但是,在论述GP的资料中,一般都是以C++语言为基础来讨论。
泛型编程(Generic Programming, GP)是一种基于参数化(parameterization)的编程技巧:可以使用类型参数化另一种类型(例如,vector 的元素类型就是通过参数确定的);算法也可以参数化另一种算法(例如,使用比较函数参数化排序函数)。GP的目的是将有用的算法或者数据结构尽可能地一般化,并使其最优化。

GP 在某些方面比 OOP 要灵活得多。特别是,它不依赖于层级。例如,int 和 string 之间没有任何层级关系。总的来说,GP 的结构化程度更甚于 OOP。事实上,GP 常被称为“参数多态(parametric polymorphism)”;而 OOP 常被称为“ad hoc 多态”。就 C++ 而言,GP 于编译时就解析了所有名称;它不需要任何动态(运行时)调度。因此,GP 在对运行时效率要求很高的领域占据了主导地位。

请注意,GP 并非万灵丹。很多时候,程序并不需要参数化多态,而需要运行时调度(OOP)。

3、OO:面向对象的编程
面向对象(object oriented, OO),面向对象编程(object-oriented programming, OOP),以及面向对象编程语言(object-oriented programming languages, OOPL)的定义多种多样。想了解我对 OO 的详细看法,请阅读 C++ 为什么不仅仅是面向对象的语言 。我在那里写道,OOP 这种编程风格起源于 Simula(约 40 年以前!),它依赖于封装(encapsulation)、继承(inheritance)以及多态(polymorphism)。就 C++(及许多其它源于 Simula 的语言)而言,OOP 的意思是利用类层级(class hierarchies)及虚函数进行编程,从而可以通过精制的接口操作各种类型的对象,并且程序本身也可以通过派生(derivation)进行功能增量扩展。

请注意,OOP 并非万能药。不要简单地把“OOP”等同于“好”。如果你的问题的基本要素中没有与生俱来的层级关系,那么类层级和虚函数对你的代码不会有任何帮助。 OOP 的优势在于类层级可以有效地表达很多问题;OOP 的主要弱点在于太多人设法强行用层级模式解决问题。并非所有问题都应该面向对象。也可以考虑使用普通类 (plain class)、泛型编程 和独立的函数(就像数学、C,以及 Fortran 中那样)作为解决问题的方案。

多范型编程
多范型(multiparadigm)编程是“以多种风格编程,各尽所能”的花哨讲法。例如,当需要在运行时区分对象类型时用面向对象编程,而在需要静态类型安全性,并且追求执行效率的时候使用泛型编程。显然,多范型编程的主要威力体现在使用多种范型(编程风格)的程序中,要通过用多种支持不同范型的语言来创建同样效果的系统是很难的。多范型编程的最引人注目的效果是:如果使来自不同范型的技术紧密协作,就可以写出比用单范型的程序更精致、维护性更好的代码。

相关推荐