【转帖】计算机编程语言

计算机编程语言html

https://www.cnblogs.com/Kevin-Yang/p/11221332.html

最近博客园的文章 周天还没时间仔细看。 等工做日时仔细看一下。

 

 

 

用于表达数字计算机的一组详细指令的各类语言。 当这些指令处于称为机器语言的计算机制造商特定数字形式时,在用相应汇编语言表达的简单替换过程以后,或者在从某些“更高级别”语言翻译以后,能够直接执行这些指令。 虽然有许多计算机语言,但相对较少被普遍使用。程序员

机器和汇编语言是“低级别的”,要求程序员明确管理计算机的全部数据存储和操做的特殊功能。 相比之下,高级语言能够防止程序员担忧这些注意事项,并提供程序员更容易编写和读取的符号。算法

语言类型

<!-- Low Level Language -->数据库

机器语言和汇编语言(Machine and assembly languages)编程

<!-- High Level Language -->小程序

算法语言(Algorithmic languages)数组

FORTRAN
ALGOL
LISP
C浏览器

面向商业的语言(Business-oriented languages)安全

COBOL
SQL服务器

面向教育的语言(Education-oriented languages)

BASIC
Pascal
Logo
Hypertalk

面向对象的语言(Object-oriented languages)

C++
Ada
Java
Visual Basic

声明性语言(Declarative languages)

脚本语言(Scripting languages)

文档格式化语言(Document formatting languages)

TeX
PostScript
SGML

万维网显示语言(World Wide Web display languages)

HTML
XML
Web scripting

元素编程语言(Elements Of Programming)

Control structures
Data structures

 

语言类型

机器语言和汇编语言(Machine and assembly languages)

机器语言由特定计算机能够直接执行的操做数字代码组成。 代码是0和1的字符串,或二进制数字(“位”),它们常常被转换为十六进制(基数16)以供人类查看和修改。 机器语言指令一般使用一些位来表示操做,例如加法,一些用于表示操做数,或者可能用于表示下一条指令的位置。 机器语言难以读写,由于它不像传统的数学符号或人类语言,而且其代码因计算机而异。

汇编语言旨在轻松转换为机器语言。 尽管能够经过名称而不是经过其机器地址来引用数据块,可是汇编语言不提供组织复杂信息的更复杂的方法。 与机器语言同样,汇编语言须要详细了解内部计算机体系结构。 当这些细节很重要时,如在编程计算机以与输入/输出设备(打印机,扫描仪,存储设备等)交互时,它是有用的。

算法语言(Algorithmic languages)

算法语言旨在表达数学或符号计算。 它们能够用相似于数学的符号表示代数运算,并容许使用包含经常使用操做的子程序进行重用。 它们是第一种高级语言。

FORTRAN
第一个重要的算法语言是FORTRAN(公式转换),由John Backus领导的IBM团队于1957年设计。 它旨在用于实数的科学计算,并将它们的集合组织为一维或多维数组。 其控制结构包括条件IF语句,重复循环(所谓的DO循环)和容许非顺序执行程序代码的GOTO语句。 FORTRAN使得用于常见数学运算的子程序变得方便,而且构建了它们的库。

FORTRAN还旨在转化为高效的机器语言。 它当即成功并继续发展。

ALGOL
ALGOL(算法语言)由美国和欧洲计算机科学家委员会在1958年至1960年期间设计,用于发布算法以及进行计算。 与LISP(在下一节中描述)同样,ALGOL具备递归子程序 - 能够调用自身来解决问题的过ALGOL为描述编程语言Backus-Naur Form的结构提供了一种符号,Backus-Naur Form在某些变体中成为说明编程语言语法(语法)的标准工具。 ALGOL在欧洲普遍使用,多年来它仍然是计算机算法发布的语言。 许多重要的语言,如Pascal和Ada(后面都有描述),都是它的后代。程,将其减小为同类的较小问题。 ALGOL引入了块结构,其中程序由可能包含数据和指令的块组成,而且具备与整个程序相同的结构。 块结构成为用于构建小型组件的大型程序的强大工具。

LISP
LISP(列表处理)是由约翰麦卡锡在麻省理工学院(MIT)于1960年开发的,它创建在递归函数的数学理论之上(其函数出如今它本身的定义中)。 LISP程序是应用于数据的函数,而不是FORTRAN和ALGOL中的一系列程序步骤。 LISP使用一种很是简单的表示法,其中操做及其操做数在括号列表中给出。例如,(+ a(* b c))表明a + b * c。虽然这看起来很尴尬,但这种符号适用于计算机。 LISP还使用列表结构来表示数据,而且因为程序和数据使用相同的结构,所以LISP程序很容易在其余程序上做为数据运行。

LISP成为人工智能(AI)编程的通用语言,部分缘由是因为LISP和AI工做在麻省理工学院的合做,部分缘由是可以“学习”的AI程序能够用LISP编写为自修改程序。 LISP经过众多方言发展,例如Scheme和Common LISP。

C
C编程语言由AT&T公司的Dennis Ritchie和Brian Kernighan于1972年开发,用于编程计算机操做系统。它经过较小单元的组合构建数据和程序的能力与ALGOL至关。它使用紧凑的表示法,使程序员可以使用数据地址及其值进行操做。这种能力在系统编程中很重要,C与汇编语言共享能够利用计算机内部架构的全部功能。 C及其后代C ++仍然是最经常使用的语言之一。

面向商业的语言(Business-oriented languages)
COBOL
COBOL(通用业务导向语言)自1959年成立以来一直被企业大量使用。计算机制造商和用户委员会以及美国政府组织成立了CODASYL(数据系统和语言委员会),以开发和监督语言标准,以便确保其在不一样系统中的可移植性。

COBOL在介绍时使用相似英语的符号小说。业务计算组织和操做大量数据,COBOL为这些任务引入了记录数据结构。记录将异构数据(例如姓名,ID号,年龄和地址)聚合到一个单元中。这与科学语言造成对比,在这种语言中,同质数组是常见的。记录是将数据“分块”成单个对象的重要示例,它们几乎出如今全部现代语言中。 

SQL
SQL(结构化查询语言)是一种用于指定数据库组织(记录集合)的语言。使用SQL组织的数据库称为关系数据库,由于SQL提供了查询数据库以查找属于给定关系的信息的功能。例如,查询多是“查找包含last_name Smith和city New York的全部记录。”商业数据库程序一般使用相似SQL的语言进行查询。

面向教育的语言(Education-oriented languages)
BASIC
BASIC(初学者的通用符号指令代码)是由John Kemeny和Thomas Kurtz于20世纪60年代中期在达特茅斯学院设计的。它旨在让初学者,特别是非计算机科学专业的学生容易学习,而且在具备许多用户的分时计算机上运行良好。它具备简单的数据结构和符号,而且被解释为:BASIC程序逐行翻译并在翻译时执行,这使得查找编程错误变得容易。

它的小巧和简洁也使BASIC成为早期我的电脑的流行语言。它最近的形式采用了其余当代语言的许多数据和控制结构,这使得它更强大但对初学者来讲不太方便。

Pascal

大约1970年,瑞士的Niklaus Wirth设计了Pascal来教授结构化编程,强调了在没有GOTO语句的状况下有条理地使用条件和循环控制结构。 虽然Pascal在表示法中相似于ALGOL,但它提供了定义用于组织复杂信息的数据类型的能力,这是超出ALGOL以及FORTRAN和COBOL功能的功能。 用户定义的数据类型容许程序员引入复杂数据的名称,而后语言翻译者能够在运行程序以前检查其是否正确使用。

在20世纪70年代末和80年代,Pascal是最普遍使用的编程指令语言之一。 它几乎能够在全部计算机上使用,而且因为其熟悉性,清晰度和安全性,它被用于生产软件和教育。

LOGO
标志起源于20世纪60年代后期,做为教育的简化LISP方言; Seymour Papert和其余人在麻省理工学院用它来向学龄儿童传授数学思惟。它有一个比LISP更传统的语法,并以“乌龟图形”为特点,这是一种生成计算机图形的简单方法。 (这个名字来自一个早期项目,用于编写一个相似乌龟的机器人。)海龟图形使用了以身体为中心的指令,其中一个对象经过命令移动到屏幕上,例如“左90”和“前进”,指定相对的动做到目前的对象的位置和方向,而不是固定的框架。与递归例程一块儿,这种技术使得编写复杂和有吸引力的模式变得容易。

Hypertalk
Hypertalk是由Bill Atkinson为Apple的Macintosh设计的“咱们其余人的编程”。使用简单的相似英语的语法,Hypertalk使任何人均可以快速将文本,图形和音频组合成“连接堆栈”,能够经过在程序提供的标准按钮上单击鼠标来导航。在20世纪80年代和90年代早期,Hypertalk在教育工做者中特别受欢迎,用于课堂多媒体演示。尽管Hypertalk具备面向对象语言的许多功能(在下一节中描述),但Apple并无为其余计算机平台开发它并让它精神萎顿;随着苹果公司在20世纪90年代的市场份额降低,一种新的跨平台显示多媒体的方式使得Hypertalk几乎已通过时(参见万维网显示语言部分)。

面向对象的语言(Object-oriented languages)
面向对象的语言有助于管理大型程序的复杂性。对象打包数据及其上的操做,以便只有操做可公开访问,而且隐藏数据结构的内部细节。经过容许程序员单独考虑程序的每一个部分,这种信息隐藏使大规模编程变得更容易。此外,对象能够从更通常的对象派生,“继承”它们的能力。这样的对象层次结构使得能够定义专用对象而不重复更通常的对象中的全部对象。

面向对象的编程始于Simula语言(1967),它为ALGOL添加了隐藏信息。另外一个有影响力的面向对象语言是Smalltalk(1980),其中一个程序是一组经过彼此发送消息来交互的对象。

C ++
C ++语言由Bjarne Stroustrup在20世纪80年代中期在AT&T开发,经过在保留C程序效率的同时添加对象来扩展C语言。它一直是教育和工业编程最重要的语言之一。许多操做系统的大部分,例如Microsoft Corporation的Windows 98,都是用C ++编写的。

Ada
阿达以奥古斯塔·阿达·金(Augusta Ada King)的名字命名,她是洛夫莱斯的伯爵夫人,曾是19世纪英国发明家查尔斯·巴贝奇的助手,有时被称为第一位计算机程序员。阿达语是20世纪80年代初为美国国防部开发的大规模节目。它将相似Pascal的表示法与将操做和数据打包成独立模块的能力相结合。它的第一个形式Ada 83并非彻底面向对象的,但随后的Ada 95提供了对象以及构造它们的层次结构的能力。虽然Ada再也不被受权用于国防部的工做,但仍然是工程大型项目的有效语言。

Java
在20世纪90年代早期,Java由Sun Microsystems,Inc。设计,做为万维网(WWW)的编程语言。虽然它在外观上相似于C ++,但它彻底是面向对象的。特别是,Java省去了较低级别的功能,包括操做数据地址的能力,这种功能在分布式系统的程序中既不可取也不实用。为了便于移植,Java程序由特定于每一个计算机平台的Java虚拟机翻译,而后执行Java程序。除了经过Web“applet”向Internet添加交互功能以外,Java还被普遍用于编写小型便携式设备,例如移动电话。

Visual Basic
Visual Basic是由Microsoft开发的,经过添加对象和“事件驱动”编程来扩展BASIC的功能:按钮,菜单和图形用户界面(GUI)的其余元素。 Visual Basic也能够在其余Microsoft软件中用于编写小例程。

声明性语言(Declarative languages)

声明性语言,也称为非过程或很是高级别,是编程语言,其中(理想状况下)程序指定要执行的操做而不是如何执行。在这些语言中,程序的规范与其实现之间的差别小于到目前为止所描述的过程语言。两种常见的声明性语言是逻辑和函数语言。

逻辑编程语言,其中PROLOG(逻辑编程)是最熟知的,将程序称为一组逻辑关系(例如,祖父母是某人的父母的父母)。这些语言相似于SQL数据库语言。程序由“推理引擎”执行,该推理引擎经过系统地搜索这些关系来回答查询以作出将回答查询的推断。 PROLOG已普遍用于天然语言处理和其余AI程序。


功能语言具备数学风格。经过将函数应用于参数来构造函数程序。功能语言,如LISP,ML和Haskell,被用做语言开发,自动数学定理证实器和一些商业项目中的研究工具。

 

脚本语言(Scripting languages)

脚本语言有时被称为小语言。它们旨在解决相对较小的编程问题,这些问题不须要数据声明的开销和使大型程序易于管理所需的其余功能。脚本语言用于编写操做系统实用程序,用于特殊用途的文件操做程序,而且由于它们易于学习,有时用于至关大的程序。


PERL(实用提取和报告语言)是在20世纪80年代后期开发的,最初用于UNIX操做系统。它旨在拥有早期脚本语言的全部功能。 PERL提供了许多方式来陈述常见操做,从而容许程序员采用任何方便的方式。在20世纪90年代,它成为一种系统编程工具,不管是小型实用程序仍是大型原型程序。与下面讨论的其余语言一块儿,它也变得流行于编程计算机Web“服务器”。

文档格式化语言(Document formatting languages)
文档格式化语言指定打印文本和图形的组织。它们分为几类:文本格式符号能够提供与文字处理程序相同的功能,页面描述语言由打印设备解释,最多见的是标记语言,用于描述文档各部分的预期功能。

TeX
TeX是1977-86期间开发的,由斯坦福大学教授唐纳德·克努特(Donald Knuth)用做文本格式化语言,以提升他书中数学符号的质量。文本格式化系统与WYSIWYG(“所见即所得”)字处理器不一样,在文档中嵌入纯文本格式化命令,而后由语言处理器解释这些命令以生成用于显示或打印的格式化文档。 TeX标记斜体文本,例如,{\ it it is iticicized},而后显示为斜体。

TeX很大程度上取代了早期的文本格式语其强大而灵活的功能使专家可以精确控制字体的选择,表格的布局,数学符号以及文档中图形的包含。它一般在“宏”包的帮助下使用,这些包定义了用于常见操做的简单命令,例如启动新段落; LaTeX是一种普遍使用的包。 TeX包含用于不一样类型文档的许多标准“样式表”,而且这些能够由每一个用户进一步调整。还有一些相关的程序,如BibTeX,管理书目,并具备全部常见书目样式的样式表,以及具备各类字母的语言的TeX版本。

PostScript

PostScript是一种页面描述语言,由Adobe Systems Incorporated在20世纪80年代早期在Xerox PARC(Palo Alto研究中心)的工做基础上开发。这些语言描述的文件能够由我的计算机解释,以在其屏幕上或经过打印机或排版设备中的微处理器显示文档。

例如,PostScript命令能够以各类字体和大小精肯定位文本,绘制数学描述的图像,并指定颜色或阴影。 PostScript使用后缀,也称为反向波兰表示法,其中操做名称跟随其参数。所以,“300 600 20 270弧形行程”意味着:在位置(300,600)处绘制(“行程”)270度弧,半径为20。尽管PostScript能够由程序员读取和写入,但它一般由文本格式化程序,文字处理器或图形显示工具生成。

PostScript的成功归功于其规范属于公共领域,而且与高分辨率激光打印机很是匹配。它影响了打印字体的发展,制造商生产各类各样的PostScript字体。

SGML
SGML(标准通用标记语言)是标记语言定义的国际标准;也就是说,它是一种元语言。标记由称为标记的符号组成,这些标记指定文本的功能或如何显示。 SGML强调描述性标记,其中标记多是“<emphasis>”。这样的标记表示文档功能,它能够被解释为计算机屏幕上的反向视频,打字机下划线或排版文本中的斜体。

SGML用于指定DTD(文档类型定义)。 DTD经过指定文档中必须出现的元素(例如,<Title>)来定义一种文档,例如报表,并为文档元素的使用提供规则,例如段落可能出如今表条目中可是表格可能不会出如今段落中。解析程序能够分析标记的文本以肯定它是否符合DTD。另外一个程序能够读取标记以准备索引或将文档翻译成PostScript以进行打印。另外一种可能会为视觉或听觉障碍的读者生成大型或音频。

万维网显示语言(World Wide Web display languages)
HTML
万维网是用于在计算机监视器上显示经过因特网检索的文本,图形和音频的系统。每一个检索单元称为网页,这些页面一般包含容许检索相关页面的“连接”。 HTML(超文本标记语言)是用于编码网页的标记语言。它由Tim Berners-Lee于20世纪80年代在瑞士CERN核物理实验室设计,由SGML DTD定义。 HTML标记标记指定文档元素,例如标题,段落和表格。它们标记文档以供计算机程序(称为Web浏览器)显示。浏览器解释标签,在布局中显示标题,段落和表格,以适应屏幕大小和可用的字体。

HTML文档还包含锚点,这些锚点是指定指向其余网页的连接的标记。锚的形式为<A HREF= "http://www.britannica.com">EncyclopædiaBritannica</A>,其中引用的字符串是连接指向的URL(通用资源定位符)(Web“地址) “)及其后面的文本是Web浏览器中显示的内容,下划线表示它是指向另外一个页面的连接。显示为单个页面的内容也能够由多个URL造成,一些URL包含文本和其余图形。

XML
HTML不容许定义新的文本元素;也就是说,它不可扩展。 XML(可扩展标记语言)是SGML的简化形式,适用于在Web上发布的文档。与SGML同样,XML使用DTD来定义文档类型以及它们中使用的标记的含义。 XML采用易于解析的约定,例如文档实体由开始和结束标记标记,例如<BEGIN> ... </ BEGIN>。 XML提供比HTML更多种类的超文本连接,例如双向连接和相对于文档子部分的连接。

由于做者能够定义新标记,因此XML DTD还必须包含指示Web浏览器如何解释它们的规则 - 如何显示实体或如何生成诸如准备电子邮件之类的操做。

Web scripting
标记有HTML或XML的网页主要是静态文档。 Web脚本能够在读者使用它时向页面添加信息,或者让读者输入能够例如传递给在线业务的订单部门的信息。 CGI(通用网关接口)提供了一种机制;它在读者的Web浏览器和提供页面的Web服务器之间传输请求和响应。服务器上的CGI组件包含称为脚本的小程序,这些程序从浏览器系统获取信息或提供用于显示的信息。一个简单的脚本可能会询问读者的姓名,肯定读者使用的系统的Internet地址,并打印问候语。脚本能够用任何编程语言编写,可是,由于它们一般是简单的文本处理例程,因此像PERL这样的脚本语言是特别合适的。

JavaScript

另外一种方法是使用为Web脚本设计的语言由浏览器执行。 JavaScript就是这样一种语言,由Netscape Communications Corp.设计,能够与Netscape和微软的浏览器一块儿使用。 JavaScript是一种简单的语言,与Java彻底不一样。 JavaScript程序能够嵌入到具备HTML标记<script language =“JavaScript”>的网页中。选择页面后,浏览器将执行该标记后面的JavaScript指令。为了加速动态(交互式)页面的显示,JavaScript一般与XML或其余语言结合使用,以便在服务器和客户端浏览器之间交换信息。特别是,XMLHttpRequest命令启用来自服务器的异步数据请求,而不须要服务器从新发送整个Web页面。编程的这种方法或“哲学”称为Ajax(异步JavaScript和XML)。

VB脚本是Visual Basic的子集。最初是为Microsoft Office程序套件开发的,后来也用于Web脚本。它的功能相似于JavaScript,它能够以相同的方式嵌入HTML中。

使用这种脚本语言进行Web编程的背后是组件编程的想法,其中程序是经过组合独立的先前编写的组件而无需任何进一步的语言处理来构造的。 JavaScript和VB Script程序被设计为能够附加到Web浏览器的组件,以控制它们显示信息的方式。

元素编程语言(Elements Of Programming)
尽管存在符号差别,但当代计算机语言提供了许多相同的编程结构。这些包括基本控制结构和数据结构。前者提供表达算法的手段,后者提供组织信息的方法。
 
控制结构(Control structures)
用过程语言编写的程序,最多见的相似于食谱,有成分列表和使用它们的逐步说明。几乎每种程序语言中的三种基本控制结构是:

1.顺序 - 混合液体成分,而后加入干燥的成分。
2.有条件 - 若是西红柿是新鲜的,那么煨它们,但若是罐装,跳过这一步。
迭代击败蛋清直到造成软峰。
Sequence是默认的控制结构;说明一个接一个地执行。例如,它们能够执行一系列算术运算,将结果分配给变量,以找到二次方程ax2 + bx + c = 0的根。条件IF-THEN或IF-THEN-ELSE控制结构容许程序遵循替代执行路径。迭代或循环为计算机提供了大部分功能。他们能够根据须要重复一系列步骤,适当重复很是简单的步骤能够解决复杂的问题。

能够组合这些控制结构。序列可能包含几个循环;循环能够包含嵌套在其中的循环,或者条件的两个分支能够包含具备循环和更多条件的序列。在本文中使用的“伪代码”中,“*”表示乘法,“←”用于为变量赋值。如下编程片断使用IF-THEN结构来查找二次方程的一个根,使用二次方程式:


 二次公式

二次公式假设a是非零而且判别式(平方根符号内的部分)不是负的(为了得到实数根)。条件检查这些假设:

  • IF a = 0 THEN
  • ROOT ← −c/b
  • ELSE
  • DISCRIMINANT ← b*b − 4*a*c
  • IF DISCRIMINANT ≥ 0 THEN
  • ROOT ← (−b + SQUARE_ROOT(DISCRIMINANT))/2*a
  • ENDIF
  • ENDIF

上述片断中使用的SQUARE_ROOT函数是子程序(也称为过程,子例程或函数)的示例。子程序就像是一次给出的酱汁配方,并做为许多其余食谱的一部分使用。子程序接受输入(须要的数量)并产生结果(酱汁)。经常使用的子程序一般位于提供语言的集合或库中。子程序能够在其定义中调用其余子程序,如如下程序所示(其中ABS是绝对值函数)。 SQUARE_ROOT是经过使用WHILE(不定)循环实现的,该循环产生实数的平方根的良好近似,除非x很是小或很是大。经过声明其名称,输入数据类型和输出来编写子程序:

  • FUNCTION SQUARE_ROOT(REAL x) RETURNS REAL
  • ROOT ← 1.0
  • WHILE ABS(ROOT*ROOT − x) ≥ 0.000001
  • AND WHILE ROOT ← (x/ROOT + ROOT)/2
  • RETURN ROOT

子程序能够将问题分解为更小,更易处理的子问题。 有时能够经过将问题减小到原始版本较小的子问题来解决问题。 在这种状况下,例程被称为递归子程序,由于它经过重复调用自身来解决问题。 例如,数学中的阶乘函数(n!= n∙(n-1)⋯3∙2∙1,即前n个整数的乘积)能够编程为递归例程:

  • FUNCTION FACTORIAL(INTEGER n) RETURNS INTEGER
  • IF n = 0 THEN RETURN 1
  • ELSE RETURN n * FACTORIAL(n−1)

递归的优势在于它一般是对精肯定义的简单重述,避免了迭代解决方案的簿记细节。

在机器语言级别,循环和条件是用分支指令实现的,分支指令说“跳转到”程序中的新点。高级语言中的“goto”语句表达相同的操做,但不多使用,由于它令人类难以遵循程序的“流程”。某些语言(如Java和Ada)不容许这样作。

数据结构(Data structures)
控制结构组织算法,而数据结构组织信息。特别是,数据结构指定数据类型,所以能够对它们执行哪些操做,同时消除了程序员跟踪存储器地址的须要。简单的数据结构包括整数,实数,布尔值(真/假),以及字符或字符串。经过组合一个或多个数据类型来造成复合数据结构。

最重要的复合数据结构是数组,同类数据集合,以及记录,异构集合。数组能够表示数字向量,字符串列表或向量集合(数组数组或数学矩阵)。记录能够存储员工信息名称,职称和薪水。记录数组(例如员工表)是元素的集合,每一个元素都是异构的。相反,记录可能包含一个矢量,即一个数组。

记录组件或字段按名称选择;例如,E.SALARY可能表明记录E的工资字段。数组元素由其位置或索引选择; A [10]是数组A中位置10的元素。所以FOR循环(肯定迭代)能够经过具备索引限制的数组(在下面的示例中为FIRST TO LAST)运行,以便对其元素求和:

  • FOR i ← FIRST TO LAST
  • SUM ← SUM + A[i]

数组和记录具备固定的大小。 能够增加的结构是使用动态分配构建的,可根据须要提供新的存储。 这些数据结构具备组件,每一个组件包含数据和对其余组件的引用(以机器术语,它们的地址)。 这种自引用结构具备递归定义。 例如,bintree(二叉树)要么是空的,要么包含带有数据的根组件以及左右bintree“children”。这样的bintree有效地实现了信息表。 对它们进行操做的子程序天然是递归的; 如下例程打印出bintree的全部元素(每一个都是某个子树的根):

  • PROCEDURE TRAVERSE(ROOT: BINTREE)
  • IF NOT(EMPTY(ROOT))
  • TRAVERSE(ROOT.LEFT)
  • PRINT ROOT.DATA
  • TRAVERSE(ROOT.RIGHT)
  • ENDIF

抽象数据类型(ADT)对于大规模编程很重要。他们将数据结构和操做打包在其上,隐藏内部细节。例如,ADT表为用户提供插入和查找操做,同时保持底层结构(不管是数组,列表仍是二叉树)不可见。在面向对象语言中,类是ADT,对象是它们的实例。下面的面向对象的伪代码示例假定存在ADT bintree和“超类”COMPARABLE,表征存在比较操做的数据(例如整数的“<”)。它定义了一个新的ADT,TABLE,它隐藏了它的数据表示并提供了适合于表的操做。此类根据COMPARABLE类的元素类型参数进行多态定义。它的任何实例都必须指定该类型,这里是一个带有员工数据的类(COMPARABLE声明意味着PERS_REC必须提供比较操做来对记录进行排序)。实现细节被省略。

相关文章
相关标签/搜索