计算机语言调查报告
一.当前主流计算机语言
语言特性对比表:
C C++ JAVA NET RUBY JavaScript
类型无类型强类型强类型强类型强类型强类型
静态/动态静态静态静态检验类
动态解释执
动态动态
支持面向过
是是否否否是
支持基于对
否是否是是是支持范型否否是是否否支持模板否是否否否否支持面向对
否是是是否否主流计算机语言发展史:
4月份的节日
C语言优劣考
C语言由来
让我们先回顾一下历史。
电脑使用CPU指令,通过寄存器,内存等物件执行计算。最早的编程,是直接使用代
表CPU指令的机器码编写的。
直接使用二进制的数据编程,当然很容易出错。
于是,人们后来发明了一种方法,就是使用英语单词作为助记符,代表各条CPU指令。
这就是汇编语言。现在,程序员可以使用英语单词进行编程,然后使用一个解释程序,把汇编指令翻译成机器语言,再交给计算机执行。
1970年,UNIX操作系统的研制者丹尼斯·里奇(Dennis Ritchie)和肯·汤普逊(Ken Thompson)为了更好地编写操作系统,发明了C语言。
C语言比汇编语言更先进。它使用了面向过程的编程范式。同时它仍是一门十分接近汇编语言,面向
机器的编程语言。适合编写操作系统和其他直接操纵硬件硬件的编程。
面向过程编程范式
下面是我查到的过程式设计的定义:航班延误查询
过程式设计:
1、自上而下(top-down)的设计方式:是一个自顶向下,逐步求精的过程;
2、以main函数概括出整个应用程序需要做的事情,而main函数由对一系列的子函数的调用组成;
main中的每一个子函数都可以被精炼成更小的函数。重复这个过程,即可完成一个过程式的设计;
3、特征是以函数为中心,以函数作为划分程序的基本单位,数据往往处于从属地位。
过程式设计的优点:易于掌握与理解,符合人们的思维习惯;
过程式设计的缺点:
1、不能适应问题比较复杂,或者需求经常变化的情况;
2、数据与操作分离开,对数据与操作的修改变得很困难;
3、程序架构的依赖关系不合理:main函数依赖于子函数,子函数又依赖于更小的子函数;
而子函数往往是细节的实现,这些实现是经常变化的,造成的结构就是:
程序的核心逻辑依赖于外延的细节,一个细节上的小改动,会引起一系列的变动。
我对于面向过程编程范式是这样理解的:
面向过程编程,就是使用函数代表处理的过程。这些函数使用的数据,要么是参数,要么是外部的数据。
使用函数编程,这看上去很像函数式编程。但面向过程的编程范式不同于函数式编程。函数式编程的函数,一般不使用外部的数据。不维持外部的状态。这有很多优点,但也同样有了很大的局限性,不似面向过程编程这样方便。
C语言就是典型的面向过程编程语言。它通过函数抽象了过程处理。函数,就是C语言的接口。
C语言中,数据常常作为全局的变量保存起来。这样,使用C语言编程就很难保证其他代码不破坏函数依赖的数据的状态。这是C++基于对象编程范式出现的原因。这个我们稍后
六部尚书再说。
我们再看看C语言对机器指令的抽象。
C语言是一门十分接近汇编语言的语言。所以有人说C语言既是一门高级语言(面向过程,函数),也是一门低级语言(面向机器,直接反映计算机的实际计算过程)。
C语言使用原生类型,数组,Struct等来表示数据。C语言中,数据在内存中的表示是十分确定的。程序员可以充分控制。如,C语言中可以使用memcpy()直接复制内存中的数据。
现在,大多数的操作系统原生函数库,都使用C语言作为其接口。绝大多数的语言都具备与C语言函数库进行互操作的能力。
C语言可以说是程序世界的世界语。
C语言的优点
1,面向过程开发,以函数为中心。简单有效。实现了简单的接口。
2,面向机器,让用户可以完全的操纵机器,效率较高。
C语言运行高效,广泛应用于各种计算领域。对于简单的任务,非常有效。
C语言的缺点
1,函数无法有效控制需要的数据。不能保证外部状态不变。容易出现Bug。
2,对于机器的控制太强,也就是依赖太强。由于过于强调效率,使用C语言编程时,更多的需要考虑机器,而不是问题本身。
由于过于关注机器,而不是问题域本身,因此抽象能力不足。容易出现各种Bug。对于编写大型的程序,常常力不从心。
C语言的使用方法
C语言作为一种简单高效的编程语言,适用于编写简单的程序。在编程中,应该注意扬长避短,使用面向过程的编程范式,少用对机器的依赖。
1,使用函数编程时,应该尽量使用函数参数传递状态,少用全局数据。因为,你无法保证全局数据不被其他代码改变。适合心情低落的句子
这样使用函数,叫作“纯函数”。类似于函数式编程的用法。而且,使用这种方式编程,由于不存在全局数据,在进行多线程开发时,还不需要考虑多线程问题。
2,使用结构化的编程方式。不要卖弄技巧。
3,函数是接口。尽量使用函数调用,而不是直接的代码。通过层层分层,分配职责,编写出短小精悍,易于维护的代码。
4,尽管C语言是一种面向机器的语言。但是,我们还是应该尽量少地依赖机器。多从问题域来考虑和抽象问题。如,少用内存假设等等。因为,我们会使用很多种语言,C,C++,Java,C#等语言的很多语法类似。但是实际的表现,各个语言都是不同的。如果
过分考虑C的机器特性,那么很可能会因为记错而编写出错误的代码。
5,代码,首先是给人看的。顺便给机器执行!
不要处处优化代码。只应该优化性能瓶颈。因为优化的代码,常常表示很难看懂!
6,应该大量使用Struct组织相关的数据。在用C语言编程时,也应该树立类型和对象状态的概念。把Struct作为函数的参数传递数据。
C++语言优劣考
在C语言优劣考中曾经说过:C语言中,数据常常作为全局的变量保存起来。这样,使用C语言编程就很难保证其他代码不破坏函数依赖的数据的状态。这是C++基于对象编程范式出现的原因。
C++最初是作为C语言的扩展出现的,最初的名字就叫“带类的C”。后来,C++逐渐演化成一门独立的语言。但还是和C语言兼容
基于对象的编程范式
基于对象的编程范式,又称“抽象数据类型”(ADT)。
面向过程的编程范式中,函数无法控制函数外的共享数据。这使面向过程的编程语言不能很好地编写大型系统。为了解决这个问题,人们发明了基于对象的编程范式。
就是把数据和处理数据的函数都封装在一个类中。这样,共享的数据就不会再被外部的代码改变了!
下面是我查到的定义:
抽象数据类型(Abstract Type简称ADT)
ADT是指抽象数据的组织和与之相关的操作。可以看作是数据的逻辑结构及其在逻辑结构上定义的操作。
ADT的描述规范
一个ADT可描述为:
ADT ADT-Name{
Data://数据说明谷歌地图高清街景
数据元素之间逻辑关系的描述
Operations://操作说明
Operation1://操作1,它通常可用C或C﹢﹢的函数原型来描述
Input:对输入数据的说明
Preconditions:执行本操作前系统应满足的状态//可看作初始条件
Process:对数据执行的操作
Output:对返回数据的说明
Postconditions:执行本操作后系统的状态//"系统"可看作某个数据结构
Operation2://操作2
……
}//ADT
抽象数据类型可以看作是描述问题的模型,它独立于具体实现。它的优点是将数据和操作封装在一起,使得用户程序只能通过在ADT里定义的某些操作来访问其中的数据,从而实现了信息隐藏。在C﹢﹢中,我们可以用类(包括模板类)的说明来表示 ADT,用类的实现来实现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语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。
Delphi是Borland公司研制的新一代可视化开发工具,可在Windows3.x、Windows95、WindowsNT等环境下使用。当前,DELPHI 也可以为LINUX平台上开发应用,其在LINUX上的对应产品Kylix。
DELPHI 拥有一个可视化的集成开发环境(IDE),采用面向对象的编程语言ObjectPascal和基于部件的开发结构框架。Delphi它提供了500多个可供使用的构件,利用这些部件,开发人员可以快速地构造出应用系统。开发人员也可以根据自己的需要修改部件或用Delphi 本身编写自己的部件。主要特点如下: