类的实 现来实现 ADT。因此,C﹢﹢中
实现的类相当于是数据的存储结构及其在存储结 构上实现的对数据的操作。 ADT 和类的概念实际上反映了程序或软件设计的两层抽象:ADT 相当于是在概念 层(或称为抽象层)上描述问题,而类相当于是在实现 层上描述问题。此外,C﹢﹢中的类只是一个由用户定义的普通类型,可用它来 定义变量(称为对象或类的实例)。因此,在 C﹢﹢中 ,最终是通过操作对象来解决实际问题的,所以我们可将该层次看作是应用层。 例如,main 程序就可看作是用户的应用程序。
C++支持多范型的开发方式:面向过程,基于对象,面向对象,模版。 C++和 C 语言是兼容的。因此,你完全可以使用 C++编译系统编写 C 语言的程序, 因此,支持面向过程编程是很自然的。 但是,使用面向过程编程,还能说是在使用 C++编程吗? 另外,需要注意,C++语言,实际上是一种不同于 C 语言的新语言。在内存上, 除了一些 C 语言的元素之外,新的语言元素并不像 C 那样 面向机器。 对于 C++,你不能使用 memcpy 等内存操作的函数,很可能会出现错误。因为 C++ 语言建立在一些高级概念的规范上,这些规范并没有规 定内存如何分配等机器方面的细节。 我在基于对象和面向对象编程范式辨析和主流编程语言中的应用 一文中已经指 出基于对象和模板是必须组合在一起使用的技术。 C++中首选的编程范式是“模板支持的基于对象”的编程范式。实现静态多态。 然后才是面向对象的编程范式。实现动态多态。 最后是 C 语言风格的面向过程编程。 C++的使用方法 使用 C/C++开发环境,我们可以同时使用 C 和 C++开发。既然 C++和 C 是兼容的, 我认为完全没有理由使用 C 语言,而不使用 C++进行开发
。 即使是很小的问题,使用 C++的“模板支持的基于对象”的编程范式也是首选的 开发方式。 另一方面,在整个类库的外部,如果我们希望向其他语言提供接口,那么我们还 应当提供 C 语言的 API 函数作为接口。 C 语言是程序世界的世界语。 使用 C++的基本类型,struct,STL 库的 Vector,STL 的 string::c_str()等都 可以得到 C 语言兼容的接口。还不能使用异常。因为 C 语言 不支持异常,而且 C++本身的异常,在不同的编译器中也可能不兼容。
总之 1,使用 C++开发,只在外部接口中使用 C 语言开发。使用“模板支持的基于对 象”的编程范式,或者面向对象的编程范式。不要使用 面向过程的编程范式。 2,尽量把代码放到类中,而不是使用全局或者命名空间的变量。 3,尽量不要使用操作符重载。 4,必须注意到 C++不像 C 语言那样面向机器,不能对 C++对象的内存布局进行假 设。不能根据内存内的数据
直接构建对象。不要进行内 存操作。 5,C++还是很面向机器的。很多语言规则都规定了内存的布局,必须按照规则定 义、初始化等等。这和 Java,.NET,Ruby 等语言不同 。用惯高级语言的程序员特别需要注意 C++和 C 对程序员的繁琐要求。 C/C++的设计哲学中,始终把自己作为一门系统编程语言,针对机器进行了很多 优化。因此,对于人,就很不照顾了。很多规则很不 人性化。但没办法,你必须适应它们! 它们就是为了高效而生的。它们就是汇编的替代者。
Java 语言优劣考 Java 是一门静态强类型面向对象的编程语言。 它是 C++和 Smalltalk 取长补短的 产物。 Java 是静态编译的强类型语言。你必须声明变量的类型,以便编译器能够检查 代码的类型是否正确。 这和 C++是相同的。 Java 是一门类型非常安全的编程语言。 Java 只支持一种编程范式:面向对象编程范式。对于过时的面向过程编程范式
并不支持。也不支持基于对象的编程范式,也没有模板。 原因可能是,当 java 在 90 年代中期刚刚诞生时,面向过程的编程已被唾弃。而 C++的基于对象的编程方式,由于没有和模板相互结合,而名声扫地。C++对于面 向对象的编程范式的支持又比较差。于是,汲取经验教训之后, Java 作为一门 纯正的面向对象编程语言诞生了。Java 使用面向对象的编程范式实现了动态多 态,实现了抽象化的编程方式。取得了巨大的成功。 Java 语言中,除了基本类型是值类型之外,没有任何值类型,你也不能创建任 何值类型。这样,基于对象编程这条路就被卡死了。 虽然丧失了值类型的效率,但是也避免了基于对象编程的大量错误。 Java 语言中所有方法也都是虚函数。这也是为了保证纯正的面向对象编程。 Java 语言是静态面向对象编程范式的顶峰。使用面向接口的抽象编程,是有效 使用 java 开发的唯一途径! 另一方面,Java 实际上是一门动态语言。它是动态解释执行的。和 Ruby, JavaScript 等一样。这使 java 具备了运行时的灵活性。可以实现自省,反射等 C++等传统静态语言无法实现的功能。 .NET 语言优劣考 .NET 是 java 的兄弟。是微软因为被 Sun 排除在 java 之外而开发的一套语言。 主要包括 C#,VB.net,C++/CLI 等语言。 它的设计理念基本和 java 相同,也是一个支持静态面向对象编程范式的平台。 对于.NET 语言平台,我选择 C#和 C++/CLI 这两种语言进行论述。VB.NET 和 C# 类似,这里就不再多说了。
C# C#.net 还支持值类型,也就是基于对象的编程范式。(当然,.NET 框架也是支 持值类型的) C#.net 的泛型类型替换是在运行时执行的。对于引用类型(在堆内存中创建实例 的类型),它使用
类型强制转换,而不是 C++模板的源 代码生成来实现参数化类型。 对于值类型,则使用类似于 C++模板的 MSIL 中间代码生成机制实现。 顺便提一下,java 的泛型实现和 C#的机制类似。也是使用强制类型转换实现。 而且,Java 中没有值类型,也不能对基本类型进行泛型 操作,因此没有 C#和 C++中的源代码扩张问题。 但是,老实说,java 的泛型机制确实太弱了!
C#语言首选的是面向对象编程范式。 C#也可以使用泛型支持的基于对象的编程范 式。 使用值类型, 对于用惯面向对象编程范式的 C#和 java 程序员来说有一定的难度。 而且,提升的效率也并不很高。 同时,在语法层面上,C# 泛型是实现参数化类型的更简单方法,不具有 C++ 模 板的复杂性。此外,C# 并不尝试提供 C++ 模板所提 供的所有功能。 因此,C#泛型支持的基于对象编程要比模板支持的基于对象的编程要弱很多。 理念上,泛型编程有些不伦不类,有着太强的面向对象编程的气味。 C#中,使用泛型支持的基于对象的编程范式不如面向对象编程范式。 我认为,C#语言还是应该首先使用面向对象编程范式。
C++/CLI C++/CLI 是为了让 C++使用.NET 平台而提供的扩展机制。 .NET 平台是类似于 java 的静态强类型动态执行的执行平台。是面向对象编程范 式理念的框架。 C++/CLI 使用了新的语法,使用 C++/CLI 进行.NET 开发时,类似于 C#编程。 同时,也可以使用模板进行 C++/CLI 编程。这是 C++/CLI2005 新增的功能。 使用 C++/CLI 进行.NET 编程时,既可以使用 C#样式的面向对象编程。也可以使 用模板支持的基于对象的编程范式进行开发。 可以把
上一篇:
主流程序语言大PK该学哪一种_Ruby代码
下一篇:
软件工程毕业设计论文