软件设计师教程

文章介绍了程序设计语言的基本概念,包括低级语言与高级语言的区别,编译程序和解释程序的作用。讨论了程序设计语言的定义,涉及语法、语义和语用。提到了几种代表性语言如Fortran、C、C++、Java、Python等的发展和特点,并对程序设计语言的分类进行了概述,包括命令式、面向对象、函数式和逻辑型语言。
摘要由CSDN通过智能技术生成

第2章程序设计语言基础知识

程序设计语言是为了书写计算机程序而人为设计的符号语言,用于对计算过程进行描述、组织和推导。程序设计语言的广泛使用始于1957年出现的 FORTRAN ,程序设计语言的发展是一个不断演化的过程,其根本的推动力是更高的抽象机制以及对程序设计思想的更好支持。

2.1程序设计语言概述

本节主要介绍程序设计语言的基本概念、基本成分和一些有代表性的程序设计语言。

2.1.1程序设计语言的基本概念

1.低级语言和高级语言

计算机硬件只能识别由0、1组成的机器指令序列,即机器指令程序,因此机器指令是最基本的计算机语言。由于机器指令是特定的计算机系统所固有的、面向机器的语言,所以用机器语言进行程序设计时效率很低,程序的可读性很差,也难以修改和维护。因此,人们就用容易记忆的符号代替0、1序列来表示机器指令,例如,用 ADD 表示加法、用 SUB 表示减法等。用符号表示的指令称为汇编指令,汇编指令的集合被称为汇编语言。汇编语言与机器语言十分接近,其书写格式在很大程度上取决于特定计算机的机器指令,因此它仍然是一种面向机器的语言,人们称机器语言和汇编语言为低级语言。在此基础上,人们开发了功能更强、抽象级别更高的语言以支持程序设计,于是就产生了面向各类应用的程序设计语言,称为高级语言。常见的有 Java 、 C 、 C ++、 PHP 、 Python 、 Delphi 、 PASCAL 等。这类语言与人们使用的自然语言比较接近,提高了程序设计的效率。

2.编译程序和解释程序

计算机只能理解由0、1序列构成的机器语言,因此高级程序设计语言需要翻译,担负这一任务的程序称为"语言处理程序"。语言之间的翻译形式有多种,基本方式为汇编、解释和编译。

用某种高级语言或汇编语言编写的程序称为源程序,源程序不能直接在计算机上执行。如果源程序是用汇编语言编写的,则需要一个汇编程序将其翻译成目标程序后才能执行。如果源程序是用某种高级语言编写的,则需要对应的解释程序或编译程序对其进行翻译,然后在机器上运行。

解释程序也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行;而编译程序(编译器)则是将源程序翻译成目标语言程序,然后在计算机上运行目标程序。这两种语言处理程序的根本区别是:在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程;而在解释方式下,解释程序和源程序(或其某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。简单来说,在解释方式下,翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立保存的目标程序。

3.程序设计语言的定义

一般地,程序设计语言的定义都涉及语法、义和语用等方面。

语法是指由程序设计语言的基本符号组成程序中的各个语法成分(包括程序)的一组规则,其中由基本字符构成的符号(单词)书写规则称为词法规则,由符号构成语法成分的规则称为语法规则。程序设计语言的语法可用形式语言进行描述。

语义是程序设计语言中按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义。静态语义指编译时可以确定的语法成分的含义,而运行时刻才能确定的含义是动态语义。一个程序的执行效果说明了该程序的语义,它取决于构成程序的各个组成部分的语义。

语用表示了构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。

语言的实现则有个语境问题。语境是指理解和实现程序设计语言的环境,包括编译环境和运行环境。

4.程序设计语言的分类

程序设计语言有交流算法和计算机实现的双重目的,现在的程序设计语言种类繁多,它们在应用上各有不同的侧重面。若一种程序设计语言不依赖于机器硬件,则称为高级语言;若程序设计语言能够应用于范围广泛的问题求解过程中,则称为通用的程序设计语言。

1)程序设计语言发展概述
各种程序语言都在不断地发展之中,许多新的语言也相继出现,各种开发工具在组件化和可视化方面进展迅速。

Fortran ( Formula Translation )是第一个被广泛用来进行科学和工程计算的高级语言。一个 Fortran 程序由一个主程序和若干个子程序组成。主程序及每一个子程序都是独立的程序单位,称为一个程序模块。该语言自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠的源程序。 Fortran 语言的最大特性是接近数学公式的自然描述,具有很高的执行效率,目前广泛地应用于并行计算和高性能计算领域。

ALGOL ( ALGOrithmic Language )诞生于晶体管计算机流行的年代, Algol 60是程序设计语言发展史上的一个里程碑,主导了20世纪60年代程序语言的发展,并为后来软件目动化及软件可靠性的发展莫定了基础。ALGOL60有严格的公式化说明,即采用巴科斯范式 BNF 来档述语言的语法。 Algol 60引进了许多新的概念,如局部性概念、动态、递归等。

PASCAL 是一种过程式、结构化程序设计语言,由瑞士苏黎世联邦工业大学的沃( N . Wirth )教授设计,于1970年发表。该语言是从ALGOL60衍生的,但功能更强且容易使用 PASCAL 语言曾经在高校计算机软件教学中一直处于主导地位,其集成开发工具 Turbo Pascal 曾经非常流行。1985年发布了 Object Pascal。

C 语言是20世纪70年代初发展起来的一种通用程序设计语言, UNIX 操作系统及其上的许多软件都是用 C 编写的。它兼顾了高级语言和汇编语言的特点,提供了一个丰富的运算符集合以及比较紧凑的语句格式。由于 C 提供了高效的执行语句并且允许程序员直接访问操作系统和底层硬件,因此在系统级应用和实时处理应用开发中成为主要语言。

C++是在 C 语言的基础上于20世纪80年代发展起来的,与 C 兼容,但是比 C 多了封装和抽象,增加的类机制使 C ++成为一种面向对象的程序设计语言。

C #( C Sharp )是由 Microsoft 公司所开发的一种面向对象的、运行于.NET Framework 的高级程序设计语言,相对于 C ++,这个语言在许多方面进行了限制和增强。

Objective - C 是根据 C 语言所衍生出来的语言,继承了 C 语言的特性,是扩充 C 的面向对象编程语言,其与流行的编程语言风格差异较大。由于 GCC ( GNU Compiler Collection , GNU 编译器套装)含 Objective - C 的编译器,因此可以在 gcc 运作的系统中编写和编译。该语言主要由 Apple 公司维护,是 MAC 系统下的主要开发语言。与 C #类似, Objective - C 仅支持单一父类继承,不支持多重继承。

Java 产生于20世纪90年代,其初始用途是开发网络浏览器的小应用程序,但是作为一种通用的程序设计语言, Java 得到非常广泛的应用。 Java 保留了 C ++的基本语法、类和继承等概念,删掉了 C ++中一些不好的特征,因此与 C ++相比, Java 更简单,其语法和语义更合理。

Ruby 是松本行弘( Yukihiro Matsumoto ,常称为 Matz )大约在1993年设计的一种解释性、面向对象、动态类型的脚本语言。在 Ruby 语言中,任何东西都是对象,包括其他语言中的基本数据类型,比如整数;每个过程或函数都是方法;变量没有类型;任何东西都有值(不管是数学或者逻辑表达式还是一个语句,都会有值)等等。

PHP ( Hypertext Preprocessor )是一种在服务器端执行的、嵌入 HTML 文档的脚本语言,其语言风格类似于 C 语言,由网站编程人员广泛运用。 PHP 可以快速地执行动态网页,其语法混合了 C 、 Java 、 Perl 以及 PHP 自创的语法。由于在服务器端执行, PHP 能充分利用服务器的性能。另外, PHP 支持几乎所有流行的数据库以及操作系统。

Python 是一种面向对象的解释型程序设计语言,可以用于编写独立程序、快速脚本和复杂应用的原型。 Python 也是一种脚本语言,它支持对操作系统的底层访问,也可以将 Python 源程序翻译成字节码在 Python 虚拟机上运行。虽然 Python 的内核很小,但它提供了丰富的基本构建块,还可以用 C 、 C ++和 Java 等进行扩展,因此可以用它开发任何类型的程序。

JavaScript 是一种脚本语言,被广泛用于 Web 应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常,将 JavaScript 脚本嵌入在 HTML 中来实现自身的功能。

Delphi 是一种可视化开发工具,在 Windows 环境下使用,其在 Linux 上的对应产品是 Kylix ,其主要特性为基于窗体和面向对象的方法、高速的编译器、强大的数据库支持、与 Windows 编程紧密结合以及成熟的组件技术。它采用面向对象的编程语言 Object Pascal 和基于构件的开发结构框架。

Visual Basic . NET 是基于微软. NET Framework 的面向对象的编程语言。用. NET 语言(包括 VB . NET )开发的程序源代码不是编译成能够直接在操作系统上执行的二进制本地代码,而是被编译成为中间代码 MSIL ( Microsoft Intermediate Language ),然后通过. NET Framework 的通用语言运行时( CLR )来执行。程序执行时,. NET Framework 将中间代码翻译成为二进制机器码后,使它得以运行。因此,如果计算机上没有安装. NET Framework ,这些程序将不能够被执行。
各种程序设计语言都在不断地发展之中,也出现了许多新的语言,开发工具在组件化和可视化方面进展迅速。’

2)程序设计语言分类
程序语言的分类没有统一的标准,这里根据设计程序的方法将程序语言大致分为命令式和结构化程序设计语言、面向对象的程序设计语言、函数式程序设计语言和逻辑型程序设计语言等范型。

(1)命令式和结构化程序设计语言。命令式语言是基于动作的语言,在这种语言中,计算被看成是动作的序列。命令式语言族开始于 Fortran , PASCAL 和 C 语言都可以体现命令式程序设计的关键思想。

通常所称的结构化程序设计语言属于命令式语言类,其结构特性主要反映在以下几个方面:一是用自顶向下逐步精化的方法编程,二是按模块组织的方法编程,三是程序只包含顺序、判定(分支)及循环构造,而且每种构造只允许单入口和单出口。结构化程序的结构简单清晰、模块化强,描述方式接近人们习惯的推理式思维方式,因此可读性强,在软件重用性、软件维护等方面都有所进步,在大型软件开发中曾发挥过重要的作用。目前仍有许多应用程序的开发采用结构化程序设计技术和方法。 C 、 PASCA 等都是典型的结构化程序设计语言。

(2)面向对象的程序设计语言。程序设计语言的演化从最开始的机器语言到汇编语言到各种结构化高级语言,最后到支持面向对象技术的面向对象语言,反映的就是一条抽象机制不断提高的演化道路。

面向对象的程序设计在很大程度上应归功于从模拟领域发展起来的 Simula ,其提出了对象和类的概念。 C ++、 Java 和 Smalltalk 是面向对象程序设计语言的代表,它们都必须支持新的程序设计技术,如数据隐藏、数据抽象、用户定义类型、继承和多态等。

(3)函数式程序设计语言。函数式语言是一类以演算为基础的语言,其基本概念来自子 LISP ,这是一个在1958年为了人工智能应用而设计的语言。函数是一种对应规则(映射),它使定义域的每个元素和值域中唯一的元素相对应。
函数定义1: Square [ x ]:= x * x
函数定义2: Plustwo [ x ]:= Plusone [ Plusone [ x ]]
函数定义3: fact [ n ]:= if n =0 then l else n * fact [ n -1]
在函数定义2中,使用了函数复合,即将一个函数调用嵌套在另一个函数定义中。在函数定义3中,函数被递归定义。由此可见,函数可以看成是一种程序,其输入就是定义中左边括号中的量。它也可以将输入组合起来产生一个规则,在组合过程中可以使用其他函数或该函数本身。这种用函数和表达式建立程序的方法就是函数式程序设计。函数式程序设计语言的优点之一就是对表达式中出现的任何函数都可以用其他函数来代替,只要这些函数调用产生相同的值。

函数式语言的代表 LISP 在许多方面与其他语言不同,其中最为显著的是,其程序和数据的形式是等价的,这样数据结构就可以作为程序执行,程序也可以作为数据修改。在 LISP 中,大量地使用递归。常见的函数式语言有 Haskell 、 Scala 、 Scheme 、 APL 等。

(4)逻辑型程序设计语言。逻辑型语言是一类以形式逻辑为基础的语言,其代表是建立在关系理论和一阶谓词理论基础上的 PROLOG . PROLOG 代表 Programming in Logic 。 PROLOG 程序是一系列事实、数据对象或事实间的具体关系和规则的集合。通过查询操作把事实和规则输入数据库。用户通过输入查询来执行程序。在 PROLOG 中,关键操作是模式匹配,通过匹配一组变量与一个预先定义的模式并将该组变量赋给该模式来完成操作。以值集合 S 和 T 上的二元关系 R 为例, R 实现后,可以询问:
①已知 a 和 b ,确定 R ( a , b )是否成立。
②已知 a ,求所有使 R ( ay )成立的
)己知 b ,求所有使 R ( x , b )成立的 x 。
第2章程序设计语言基础知识
④①求所有使 R ( x , y )成立的 x 和 y .
逻辑型程序设计具有与传统的命令式程序设计完全不同的风格。 PROLOG 数据库中的事实和规则是形式为" P :-P1,P2…, P ,“的 Hore 子句,其中 n ≥0, P ,(1≤ i ≤ n )为形如 RA (…)的断言, R 是关系名。该子句表示规则:若P1, Pz ,… P ,均为真(成立),则 P 为真。当 n =0时, Hore 子句变成 P .,这样的子句称为事实。
一旦有了事实与规则,就可以提出询问。测试用户询问 A 是否成立时,采用归结方法。
①如果程序中包含事实 P ,且 P 和 A 匹配,则 A 成立。②如果程序中包含 Hore 子句” P :-P1,P2,… P ,",且 P 和 A 匹配,则 PROLOG 转而测试 Pi 、P2、…、 Pn 。只有当 Pi 、P2、…、 Pn 都成立时才能断言 P 成立。当求解某个 P ,失败时,则返回到前面的某个成功点并尝试另一种选择,也就是进行回溯。
③只有当所有的可能情况都已穷尽时才能推导出 P 失败。
PROLOG 有很强的推理功能,适用于编写自动定理证明、专家系统和自然语言理解等问题的程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值