命令式程序设计语言

来自计算思维百科
跳转至: 导航搜索

命令式程序设计语言(Imperative Programming Language)最大的特点是其每行代码都是一条具体的指令,让计算机执行具体的操作,通过一系列指令的叠加完成复杂的任务。

概念

命令式程序设计语言(Imperative Programming Language)最大的特点是其每行代码都是一条具体的指令,让计算机执行具体的操作,通过一系列指令的叠加完成复杂的任务。命令式程序设计语言是从机器语言发展起来的。基本上所有cpu都是命令式的,即反复地执行机器指令,每条机器指令完成一个具体的微小的操作。从机器语言到汇编语言,再到高级语言,虽然语言的功能有了巨大的增强,但是其基本的范型还是命令式的。

随着任务的逐渐复杂,早期的命令式程序设计语言程序变得越来越庞大,特别是跳转('Goto')语句和其它非结构化分支结构的大量使用,使得程序变得杂乱无章,难以阅读和维护,质量下降严重,编程代价巨大。程序的流向就像一盘意大利面一样扭曲纠结,因而被形象地称为意面代码('Spaghetti Code')。为了解决这个问题,计算机科学家们提出了结构化程序设计(Structured Programming)的概念

结构化程序设计

概念

结构化程序设计

结构化程序设计(Structured Programming)从1960年代开始发展,基本上可以认为是命令式程序设计的一个分支。1966年5月,意大利计算机学家科拉多·鲍姆(Corrado Böhm)和朱塞佩·贾可皮尼(Giuseppe Jacopini)在著名的《ACM通讯》(Communications of the ACM)上发表论文“Flow diagrams, turing machines and languages with only two formation rules”,认为任何一个包含goto语句的程序都可以改为完全不使用goto语句的程序。随后,荷兰计算机学家迪杰斯特拉(Edsger Wybe Dijkstra)(图 1)1968年3月在《ACM通讯》上发表了著名的论文“Go To Statement Considered Harmful”,认为应该禁止goto语言的使用。这两篇论文的发表,代表了结构化程序设计的开端。

10.3.1.png

图1 艾兹格·迪杰斯特拉(Edsger Wybe Dijkstra) (来源于维基百科)

结构化程序设计强调使用子程序、程序块和包括for循环等在内的控制语句来规划程序的结构,并强调应该尽量少地使用goto语句。其核心思想可以用结构化程序定理来概括。

结构化程序定理

结构化程序定理(Structured Program Theorem)认为任何一个可计算的算法都可以只用顺序、分支选择和循环这三种基本结构来表达。上述的三种结构可以完全描述CPU中的机器指令,也可以完全描述图灵机的运作,因此,虽然整个程序可能不是结构化的,但CPU所执行的指令可视为是某种“结构化程序”。鉴于迪杰斯特拉1968年的论文引用了鲍姆和贾可皮尼1966年的论文,一般都认为结构化程序理论是由鲍姆和贾可皮尼的1966年论文提出的。

结构化程序理论未提及如何编写结构化程序,也没有提到结构化程序的分析,后来1960至1970年代时,迪杰斯特拉、美国计算机学家罗伯特·弗洛伊德(Robert W Floyd)(图 2)和英国计算机学家东尼·霍尔(Sir Charles Antony Richard Hoare)(图 3)等计算机科学家在此领域作出了许多贡献,因此,迪杰斯特拉获得了1972年图灵奖,弗洛伊德获得了1978年图灵奖,霍尔获得了1980年图灵奖。此外,迪杰斯特拉还设计了著名最短路径算法和银行家算法等;弗洛伊德设计了求图中所有最短路径的弗洛伊德算法并且开创性地在程序验证中使用了逻辑断言,而且他还是1974年图灵奖得主唐纳德·克努斯(Donald Ervin Knuth)(图 4)的传世著作《计算机程序设计艺术》(The Art of Computer Programming)[4]的主要评审;霍尔则提出了著名的快速排序算法和霍尔逻辑。有趣的是,弗洛伊德和霍尔的本科主修专业都是文科,并且都有一个辅修的理科专业。

10.3.2.png

图2 罗伯特•弗洛伊德(Robert W Floyd)(来源于图灵奖官方网站)

10.3.3.png

图3 东尼•霍尔(Sir Charles Antony Richard Hoare)(来源于维基百科)

10.3.4.png

图4 唐纳德•克努斯(Donald Ervin Knuth)(来源于维基百科)

结构化程序设计禁止goto语句的使用,这是存在争议的。克努斯在1974年发表的论文“Structured Programming with Goto Statements”,提出了一些使用goto语句可以使得程序更清楚有效的反例。目前,绝大多数的计算机科学学者均已同意使用结构化程式设计的好处。

常见的结构化程序设计语言包括FORTRAN、ALGOL、COBOL、PASCAL、BASIC和C等。以下分别介绍。

FORTRAN语言

FORTRAN是FORmula TRANslator(公式翻译器)的缩写,是在20世纪50年代中期由美国IBM公司的约翰·巴克斯(John Backus)(图 5)领导的小组为IBM 704计算机设计的。巴克斯同时还发明了著名的BNF范式(Backus-Naur form)。他获得了1977年图灵奖。

10.3.5.png

图5 约翰•巴克斯(John Backus)(来源于维基百科)

FORTRAN语言标准称为FORTRAN 66,在70年代修订为FORTRAN 77,分全集和子集。1991年国际化标准组织又批准新的FORTRAN标准,称为Fortran 90。它是国际上第一个支持多字节字符集的标准,该标准采纳了我国FORTRAN工作组关于CHARACTER的建议。

FORTRAN语言主要用于数值计算,由于IBM公司在FORTRAN语言诞生不久,就为计算机配置了FORTRAN编译程序,所以使FORTRAN很快普及。FORTRAN语言的特点是接近数学公式,简单易用,易读性强。FORTRAN已经是具有强大数值计算能力的现代高级语言,程序的书写更趋结构化,模块化。

BASIC语言

BASIC全称初学者多用符号式指令代码(Beginner's All-purpose Symbolic Instruction Code)。其主要目的是易用性,是由美国达特茅斯学院(Dartmouth College)的科学家约翰·基米尼(John George Kemeny)(图 6) 和托马斯·科茨(Thomas Eugene Kurtz) 于1964年发明的。

10.3.6.png

图6 约翰•基米尼(John George Kemeny)(来源于维基百科)

基米尼是一位犹太-匈牙利裔的美国计算机科学家。在普林斯顿大学读本科期间,他曾经休学一年去著名的美国洛斯阿拉莫斯国家实验室参加研制首枚原子弹的曼哈顿计划。他在那里的老板是著名物理学家理查德·费曼(Richard Phillips Feynman),并且曾与冯·诺依曼共事。基米尼的博士导师是著名的美国数学家和计算机科学先驱阿隆佐·邱奇(Alonzo Church),后者同时也是计算机科学之父阿兰·图灵(Alan Mathison Turing)的导师。基米尼从1970年到1981年担任了美国著名常青藤大学达特茅斯学院的校长,并担任了美国历史上最严重的核泄漏事件--三哩岛事件的总统调查委员会的主席。

经过不断丰富和发展,BASIC现已成为一种功能全面的中小型计算机语言。BASIC易学、易懂、易记、易用,是初学者的入门语言,也可以作为学习其他高级语言的基础。BASIC有解释方式和编译方式两种翻译程序。

一般人类自然语言有标准语言,也有方言,计算机语言亦是如此。不同的计算机都有BASIC语言,但其语法、规则、功能不尽相同,而同一种计算机所使用的BASIC语言也可能有不同版本或由不同的软件公司开发的不同品牌BASIC语言,只是大家一致地继承了BASIC创始者所设计的基本形态与精神,而分别赋予独特的设计手法并增添独特功能。

1978年美国发布最小BASIC国家标准ANSI X3.60-78,1984年该标准上升为国际标准ISO 6373-84,1987年美国发布全BASIC国家标准ANSI X3.113-87。我国于1991年发布BASIC子集国家标准GB12856-91。1991年,伴随着MS-DOS5.0的推出,微软公司同时推出了Quick BASIC的简化版QBASIC,将其作为操作系统的组成部分免费提供给用户。

PASCAL语言

Pascal为纪念17世纪法国数学家和哲学家布莱兹·帕斯卡(Blaise Pascal)(图 7)而命名,他于1642年发明了现代计算机的雏型机—加减法计算机。Pascal的设计者瑞士苏黎世联邦工业大学的尼克劳斯·维尔特(Niklaus Wirth)(图 8)获得了1984年图灵奖。

10.3.7.png

图7 布莱兹•帕斯卡(Blaise Pascal)(来源于维基百科)

10.3.8.png

 图8 尼克劳斯•维尔特(Niklaus Wirth)(来源于维基百科)

PASCAL是一种结构化程序设计语言,于1971年正式发表,是从ALGOL60衍生的,但功能更强且容易使用。其主要特点有:严格的结构化形式;丰富完备的数据类型;运行效率高;查错能力强。Pascal语言可以被方便地用于描述各种算法与数据结构。尤其是对于程序设计的初学者,Pascal语言有益于培养良好的程序设计风格和习惯。目前,作为一个能高效率实现的实用语言和一个极好的教学工具,PASCAL语言在高校计算机软件教学中一直处于主导地位,既可用于科学计算,又能用来编写系统软件,应用范围日益广泛。

C语言

20世纪70年代初,在美国AT&T(电报与电话)公司的贝尔(Bell)实验室进行小型机PDP-11的Unix操作系统开发工作中,丹尼斯·里奇(Dennis Ritchie)在 肯·汤普逊(Ken Thompson)(图9)研制的B语言的基础上推出了一种新型的程序设计语言C。最初的C语言是为描述和实现Unix操作系统而设计的,它随着Unix的出名而闻名。1973年,汤普逊和里奇合作把Unix的90%以上内容用C语言进行了改写,即大家熟知的Unix第5版(原来的Unix操作系统是用汇编语言开发成功的)。1978年以后,C语言先后移植到大、中、小和微型计算机上,成为世界上应用最广泛的程序设计语言。两位科学家共同获得了1981年图灵奖。

10.3.9.png

图9 丹尼斯•里奇(Dennis Ritchie)(右)和 肯•汤普逊(Ken Thompson) (来源于维基百科)

C语言的主要特色是兼顾了高级语言和汇编语言的特点,简洁、丰富、可移植。使用C语言编写程序,既感觉到使用高级语言的自然,也体会到利用计算机硬件指令的直接,而程序员却无需卷入汇编语言的繁琐。自20世纪90年代初,C语言在我国开始推广以来,学习和使用C语言的人越来越多,掌握C语言成为计算机开发人员的一项基本功。

随着计算机的日益普及,出现了许多的C语言版本,且相互兼容。但是C语言编译系统版本繁多,也造成不同版本之间的某些差异,它主要体现在标准函数库中收入的函数在种类、格式和功能上有所不同,这种差异对于计算机应用技术的发展显然不利。

1983年,美国国家标准协会(ANSI)成立了一个委员会,根据C语言问世以来各种版本对C语言的发展和扩充,制定了第一个C语言标准草案(ANSI C),ANSI C比原来的C有了很大的发展。1989年,ANSI公布了一个完整的C语言标准----ANSI X3.159-1989(常称C89),1990年国际标准化组织ISO(International Standard Organization)接受C89作为国际标准ISO/IEC 9899:1990。1995年ISO对C89做了一些修订,即“1995基准增补1(ISO/IEC 9899/AMD1:1995)”。1999年,ISO又对C语言标准进行修订,在基本保留原来的C语言特征的基础上,针对应用的需要,增加了一些功能,尤其是C++中的一些功能,命名为ISO/IEC 9899:1999。2001年和2004年先后进行了两次技术修正,即2001年的TC1和2004年的TC2。ISO/IEC 9899:1999及其技术修正被称为C99,C99是C89(及1995基准增补1)的扩充。

COBOL语言

COBOL的全称是COmmon Business Oriented Language,即:通用商业语言,又称为企业管理语言、数据处理语言等,是最早的高级编程语言之一,是世界上第一个商用语言。其设计思想在很大程度上来自于美国女计算机科学家格蕾丝·穆雷·霍普(Grace Murray Hopper)(图 10)。因此,霍普也被称为COBOL之母。

在企业管理中,数值计算并不复杂,但数据处理信息量却很大。为专门解决经企管理问题,于1959年,由美国的一些计算机用户组织和政府部门共同设计了专用于商务处理的计算机语言COBOL,并于1961年由美国数据系统语言协会公布。经不断修改、丰富完善和标准化,已发展为多种版本,如COBOL-68、COBOL-74、COBOL-85和COBOL-2002等。

10.3.10.png

图10 格蕾丝•穆雷•霍普(Grace Murray Hopper)(来源于维基百科)

COBOL语言使用了300多个英语保留字,大量采用普通英语词汇和句型,程序通俗易懂,素有“英语语言”之称。COBOL语言语法规则严格。用COBOL语言编写的任一源程序,都要依次按标识部、环境部、数据部和过程部四部分书写,COBOL程序结构的“部”内包含“节”,“节”内包含“段”,段内包含语句,语句由字或字符串组成,整个源程序象一棵由根到干,由干到枝,由枝到叶的树,习惯上称之为树型结构。目前COBOL语言主要应用于情报检索、商业数据处理等管理领域。

ALGOL语言

ALGOL是算法语言(ALGOrithmic Language)的缩写。从设计之初,ALGOL就以算法描述作为主要目的,其语法设计清晰严格,虽然语言本身没有被广泛的使用,但它是许多现代程序语言的概念基础。从某种意义上说,很多现代语言都可以称为“类ALGOL”语言。同时,目前常用于算法描述的伪代码,其语法风格也主要是从ALGOL演变来的。

1958年,一群欧洲和美国科学家在瑞士苏黎世联邦理工学院召开的一次会议上提出了一个新的语言:International Algorithmic Language (IAL),后来被命名为ALGOL 58。约翰·巴克斯(John Backus)为ALGOL 58 设计了用来描述程序设计语言的巴克斯范式(Backus normal form)。

1960年1月,在巴黎召开的一次由多位著名欧洲和美国计算机科学家参加的会议上提出了ALGOL 60。丹麦计算机科学家彼得·诺尔(Peter Naur)为ALGOL 60修改和扩充了巴克斯范式,这就是著名的BNF范式(Backus Normal Form)。ALGOL 60会议的参加者可谓星光闪耀,包括1966年第一位图灵奖得主艾伦·佩利(Alan Jay Perlis)(图 11)、1971年图灵奖得主约翰·麦卡锡(John McCarthy)(图 12)、1977年图灵奖得主约翰·巴克斯(John Backus)、2005年图灵奖得主彼得·诺尔(Peter Naur)(图 13)以及1972年图灵奖得主迪杰斯特拉(Edsger Wybe Dijkstra)的博士导师Adriaan van Wijngaarden等。ALGOL 60是程序设计语言发展史上的一个里程碑,它标志着程序设计语言成为一门独立的科学学科,并为后来软件自动化及软件可靠性的发展奠定了基础。

10.3.11.png

图11 艾伦•佩利(Alan Jay Perlis)(来源于图灵奖官方网站)

10.3.12.png

图12 约翰•麦卡锡(John McCarthy)(来源于维基百科)

10.3.13.png

图13 彼得•诺尔(Peter Naur)(来源于维基百科)

ALGOL 68 对ALGOL 60作了进一步的扩充。有趣的是,瑞士苏黎世联邦工业大学的尼克劳斯·维尔特(Niklaus Wirth)先是在ALGOL 60的基础设计了ALGOL W并希望以之作为ALGOL 60的下一代。但是ALGOL W并没有被ALGOL 68委员会接纳。尼克劳斯·维尔特离开了这个委员会随后设计了Pascal语言,并获得了1984年图灵奖。

面向对象程序设计

概念

结构化程序设计侧重于功能抽象,它将解决问题的过程视为一个处理过程,每个模块都是一个处理单位。程序被看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。20世纪60年代,随着软硬件环境逐渐复杂,如何提高软件开发效率并进行良好的维护渐渐成为当时的程序设计领域面临的一个巨大挑战,并于60年代中期爆发成为总所周知的软件危机(Software Crisis)面向对象程序设计(Object-Oriented Programming)就是在这样的背景下逐渐产生的。

面向对象程序设计综合了功能抽象和数据抽象,它将解决问题的过程视为一个分类演绎过程。作为面向对象程序设计核心的对象是数据和操作的封装,程序运行时刻的基本成分。在结构化程序设计中,过程为一独立实体,显式地为使用者所见;而在面向对象程序设计中,操作是对象私有的,只能通过消息传递来引用。

面向对象程序设计可以被视作一种在程序中包含各种独立而又互相调用的单位和对象的思想,这与传统的思想刚好相反:面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“智能体”,或者说是负有责任的角色。目前已经被证实,面向对象程序设计增强了程序的灵活性和可维护性,并且在大型项目设计中广为应用。

面向对象程序设计中的基本概念有对象、类、继承和多态性等。

对象

对象用来描述客观事物的实体,反映系统为之保存信息和与之交互的能力。每个对象有各自的内部属性和操作方法。

类具有相同的属性和操作方法,并遵守相同规则的对象的集合。类是对象集合的抽象,规定了这些对象的公共属性(即数据结构)和方法(操作数据的函数)。对象是类的一个实例。

继承性

它是面向对象程序所特有的。在面向对象程序设计中,可以从一个类生成另一个类,即子类或派生类。派生类继承了其父类的数据成员和成员函数,派生类代表父类的一种改良,因此增加了新的属性和新的操作。派生类一般通过声明新的数据成员和成员函数来增加新的功能。

引入继承机制的目的在于:避免可公用代码的重要开发,减少数据冗余,增强数据的一致性,尽量降低模块间的耦合程序。

多态性

多态性是一种面向对象的程序设计功能。它是指当同样的消息被不同的对象接收时,却导致完全不同的行为,即完成不同的功能。

面向对象程序设计的雏形,早在1960年的Simula语言中即可发现。20世纪70年代的Smalltalk语言在面向对象方面堪称经典——以至于30年后的今天依然将这一语言视为面向对象语言的基础。

常见的面向对象程序设计语言包括Java、C#和Python等。很多结构化程序设计语言后来也增加了面向对象的特性,例如从C语言发展出来的C++语言、从BASIC发展出来的Visual Basic和从Pascal发展出来的Delphi等。

Visual Basic语言

Visual Basic(VB)是由微软公司于1991年在BASIC语言基础上发布的第三代事件驱动程序设计语言(Event-Driven Programming Language)集成开发环境(Integrated Development Environment,IDE)。VB的目标之一是令初学者易学易用。它包含了Alan Cooper(图 14)设计的用于开发图形用户界面(Graphical User Interface,GUI)快速应用程序开发(Rapid Application Development,RAD)系统,并可以轻松地使用DAO、RDO或者ADO连接数据库,或者轻松的创建Activex控件。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。从任何标准来说,VB都是目前世界上使用人数最多的语言。

10.3.14.png

图14 Alan Cooper (来源于维基百科)

事件驱动程序设计的基本思想是指是程序的执行流程是由所发生的事件决定的。事件可以是使用者的动作(如鼠标的按键,键盘的按键动作)或者是由其他程序传递的消息等决定。程序员的主要工作是为事件编写相应的事件处理程序。用于开发图形用户界面(Graphical User Interface,GUI)的快速应用程序开发(Rapid Application Development,RAD)系统则是一种简捷的图像界面设计模式。其基本思想是拖放(Drag-And-Drop)。也就是说直接把需要的控件(如按钮、下拉框等)用鼠标拖到其宿主窗口上,RAD系统就会自动生成相应的代码为宿主窗口产生一个控件。例如实现图形界面的“hello world”程序(即主窗口上有一个按钮,点击后显示“hello world”),只需要两个步骤:(1)在RAD系统里面拖一个按钮控件到主窗口上;(2)在按钮的点击事件的事件处理程序中打印“hello world”。编写这样一个图形界面的程序大概只需要2分钟,而用户自己需要编写的程序只有完成打印工作的1行。采用RAD的GUI开发模式也称为“可视化编程”。

早期的VB是Microsoft Visual Studio的组件,先后发布了从VB 1到VB 6等版本。其中1995年发布的VB 4.0版本其中包含了对类的支持,逐步引入了面向对象的程序设计思想。2001年,微软发布了.NET Framework,此后VB跟随其一起发布,称为Visual Basic .NET.

微软开发了一系列从VB派生出来的脚本语言,例如用于在微软的应用程序中(比如Microsoft Office)进行应用开发的VBA(Visual Basic for Applications)和用于Windows脚本编写(Shell Script)和网页编码(HTML)中的VBScript

C++语言

为了提供面向对象特性,1979年,Bell实验室的Bjarne Stroustrup(图 15)开始对C进行改进和扩充,最初的成果称为“带类的C”,1983年正式命名为C++,在经历了3次C++修订后,于1994年制定了ANSI C++标准的草案。以后又经过不断完善,成为目前的C++。

C++这个词在汉语中通常被读做“C加加”,因为+的英文是“plus”,西方的程序员通常读做“C plus plus”,而C++程序的后缀也采用“CPP”。 C++语言是从C语言继承发展而来的一种混合型的面向对象的程序设计语,支持多重编程范型(如过程化程序设计和面向对象程序设计)的通用程序设计语言。一方面C++语言全面兼容C语言,另一方面C++支持面向对象的方法。C++保持了C的紧凑、灵活、高效和易移植性强的优点,它对数据抽象的支持主要在于类概念和机制,对面向对象风范的支持主要通过虚拟函数。C++既有数据抽象和面向对象能力,又比其他面向对象语言如Smalltalk、Eiffel、Commonloop等的运行性能高得多。加上C语言的普及和C++与C的高度兼容,从C至C++的过渡较为平滑,数量巨大的C程序能方便地在C++环境中重用,使得C++迅速流行,成为当前面向对象程序设计的主流语言。

10.3.15.png

图15 Bjarne Stroustrup(来源于维基百科)

基于C++也出现了包含可视化编程机制的集成开发环境(integrated development environment,IDE),如微软开发的Visual C++等。

Java语言

Java是由升阳(Sun Microsystems,Stanford University Network)公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。其主要设计者詹姆斯·高斯林(James Gosling)(图 16)被称为“Java之父”。Java分为三个体系JavaSE(Java2 Platform Standard Edition,java标准版),JavaEE(Java2 Platform,Enterprise Edition,java企业版),JavaME(Java 2 Platform Micro Edition,java微型版)。

Java编程语言的风格十分接近C++语言。它继承了C++语言面向对象技术的核心,用引用(reference)代替了C++语言中容易引起错误的指針,用接口(interface)代替了C++的多重继承特性,并增加了垃圾回收器功能。Java语言的基本特征是简捷易学、面向对象、适用于网络分布环境、解释执行和多线程、具有一定的安全健壮性。太阳公司对Java语言的解释是:“Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言”。

Java不同于一般的编译语言和直译语言。Java平台由Java虚拟机(Java Virtual Machine)和Java应用编程接口(Application Programming Interface、简称API)构成。Java应用编程接口为Java应用提供了一个独立于操作系统的标准接口。它首先将源代码编译成字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。在早期JVM中,这在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的执行速度有了大幅提升。

与微软等其它公司不同,升阳公司在推出Java时就将其作为开放的技术,包括源程序、文档和开发包等都是免费共享的。 “Java语言靠群体的力量而非公司的力量”是升阳公司的口号之一。微软公司后来推出了与之竞争的.NET平台以及从Java衍生的C#语言。升阳公司被甲骨文公司于2009年并购,Java也随之成为甲骨文公司的产品。

10.3.16.png

图16 詹姆斯•高斯林(James Gosling)(来源于维基百科)

Delphi

Delphi最早的版本由美国Borland(宝兰)公司于1995年开发。主创者为安德斯·海尔斯伯格(Anders Hejlsberg)(图 17)。它是一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面(Graphical User Interface,GUI)为开发环境,配合连结数据库的功能,构成一个以面向对象程序设计为中心的应用程序开发工具。

Delphi的前身是DOS时代盛行一时的“Borland Turbo Pascal”。从Turbo Pascal 5.5版开始,Borland公司在传统Pascal的基础上加入了面向对象的功能。Delphi在本质上应该归类为软件开发工具,而非程序设计语言,但由于Delphi几乎是目前市场上唯一使用Pascal,并持续推出新版本的商业产品。因此,一般人们会把Delphi视为Pascal的面向对象版本。

在微软与Java两大阵营的激烈竞争下,Delphi正逐渐被边缘化。

10.3.17.png

图17 安德斯•海尔斯伯格(Anders Hejlsberg)(来源于维基百科)

C#语言

C# 是微软公司发布的一种面向对象的、运行于.NET Framework上的高级程序设计语言。原Broland公司的首席研发设计师丹麦人安德斯·海尔斯伯格(Anders Hejlsberg)(图17)在开发了Delphi后于1996年跳槽去了微软,并在微软开发了Java的可视化集成开发环境Visual J++ 1.0。由于Visual J++和Java不完全兼容,SUN公司认为Visual J++ 违反了Java开发平台的中立性协议,对微软提出了诉讼。2000年6月26日微软在奥兰多举行的“职业开发人员技术大会”(PDC 2000)上,发表新的语言C#。C# 语言取代了Visual J++,语言本身深受Java、C和C++的影响。

C#的发音为C Sharp,其中“#”读作“sharp”。在音乐中“C#”表示C升半音,为比C高一点的音节,这也是微软采用这个符号的原因之一。它是一种安全的、稳定的、简单的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)。C# 综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

Python语言

Python语言是今年来日渐流行的一直面向对象程序设计语言,它同时也支持命令式程序设计和函数式程序设计。它经常被当作脚本语言用于处理系统管理任务和网络编程编写,然而它也非常适合完成各种高级任务。Python的创始人是Guido van Rossum(图 18)。他在Python社区被认为“慈祥的独裁者(BDEL)”,意思是他仍然关注Python的开发进程,并在必要的时刻做出决定。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,之所以选中 Python(大蟒蛇)作为程序的名字,是因为他是Monty Python飞行马戏团的忠实粉丝。他目前在Google工作,在那里他把一半的时间用来维护Python的开发。

10.3.18.png

图18 Guido van Rossum(来源于维基百科)

Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine来执行这些编译好的byte code。这种机制的基本思想跟Java和微软的.NET是一致的。然而,Python Virtual Machine与Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一种抽象层次更高的Virtual Machine。

在实际开发中,Python常被昵称为胶水语言,也就是说它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,速度要求非常高,就可以用C++重写。

基于Python的相关技术正在飞快的发展,使用者数量快速扩大,相关的资源非常多。Python定义了WSGI标准应用接口来协调Http服务器与基于Python的Web编程之间的沟通,可以让编程设计师轻松地开发和管理复杂的Web编程。在很多作业系统里,Python是标准的系统元件。一般说来,Python编写的系统管理脚本在可读性、性能、源代码重用度、扩展性几方面都优于普通的shell脚本。Python对于各种网络协定的支援很完善,因此经常被用于编写服务器软件。据说,YouTube、Google、Yahoo!、NASA都在内部大量地使用Python。