数据库系统 —— 2.1 程序语言概述(基本概念)

记录自学的过程,分享自己的笔记


2.1.1 程序语言的基本概念


(1)低级语言和高级语言

  • 低级语言:机器语言和汇编语言。是一种面向机器的语言,其格式取决于计算机的机器指令。难以理解,程序可读性差,程序设计效率低。
  • 高级语言:面向各类应用的程序语言。如Java、C、C++、Python、PHP、JavaScript等等。与人们使用的语言较为接近,便于理解,提高了程序设计的效率。

(2)编译程序和解释程序

高级程序语言必须进行翻译才能为计算机硬件所理解,常用的翻译方式有汇编解释编译

  • 汇编语言编写的:需要一个汇编程序将其翻译成目标程序后才能执行。

  • 高级语言编写的:需要对应的解释程序或编译程序对其进行翻译,然后在机器上运行。

    解释程序(解释器):要么直接解释执行源程序,要么将源程序翻译成某种中间代码后再加以执行。

    编译程序(编译器):将源程序翻译成目标语言程序,然后再计算机上运行目标程序。

    两种语言处理方式的区别:编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程;
    在解释方式下,解释程序和源程序要参与到程序的运行过程中,运行程序的控制权在解释程序。
    注:在解释方式下,翻译源程序时不生成独立的目标程序,它按源程序中的语句执行顺序,逐条翻译并立即执行相关功能,而编译器则将源程序翻译成独立保存的目标程序。

    编译和解释的比较
    ①编译比解释方式可能取得更高的效率
    ②解释方式比编译方式更灵活
    ③解释方式移植性好。

(3)程序设计语言的定义

程序设计语言的定义涉及语法语义语用等方面。

  • 语法是指由程序语言的基本符号组成程序中的各个语言结构的一组规则,其中由基本字符构成的符号(单词)书写规则称为词法规则,由符号构成语法成分的规则称为语法规则。
  • 语义是程序语言中按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义。静态语义指编译时可以确定的语法成分的含义,而运行时才能确定的含义是动态语义。一个程序的执行结果说明了该程序的语义,它取决于构成程序的各个组成部分的语义。
  • 语用表示构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。语言的实现则有个语境问题。语境是指理解和实现程序设计语言的环境,包括编译环境和运行环境。

(4)程序设计语言的分类

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

  • 程序语言发展概述

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

    ALGOL诞生于晶体管计算机流行的年代,ALGOL60是程序设计语言发展史上的一个里程碑,主导了20世纪60年代程序语言的发展,并为后来软件自动化及软件可靠性的发展奠定了基础。

    PASCAL是一种过程式、结构化程序设计语言。该语言是从ALGOL60衍生的,但功能更强且容易使用。

    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(编译器套装)含Objective-C的编译器,因此可以在GCC运载的系统中编写和编译。该语言主要由Apple公司维护,是MAC系统下的主要开发语言。

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

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

    PHP是一种在服务器端执行的、嵌入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编程紧密结合以及成熟的组件技术。

    Visual Basic.NET是基于微软.NET Framework的面向对象的编程语言。用.NET语言开发的程序源代码不是直接编译成能够直接在操作系统上执行的二进制本地代码,而是被编译成为中间代码MSIL(Microsoft Intermediate Language),然后通过.NET Framework的通用语言运行时来执行。程序执行时,.NET Framework将中间代码翻译成为二进制机器码后,使它得以运行。因此,如果计算机上没有安装.NET Framework,这些程序将不能够被执行。

  • 程序语言的分类

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

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

    ②面向对象的程序设计语言。程序设计语言的烟花从最开始的机器语言到汇编语言到各种结构化高级语言,最后到支持面向对象技术的面向对象语言,反映的就是一条抽象机制不断提高的演化道路。
    C++、Java和Smalltalk都是面向对象程序设计语言的代表,它们必须支持新的程序设计技术,如数据隐藏、数据抽象、用户定义类型、继承和多态等。

    ③函数式程序设计语言。函数式语言是一类以λ-演算为基础的语言,其基本概念来源于LISP,这是一个在1958年为了人工智能应用而设计的语言。函数是一种对应规则(映射),它使定义域中每个元素和值域中唯一的元素相对应。
    函数定义 1:Square[x]: = x * x
    函数定义 2:Plustwo[x]: = Plusone[Plusone[x]]
    函数定义 3: fact[n]:= if n=0 then 1 else n*fact[n-1]

    在函数定义2中,使用了函数复合,即将一个函数调用嵌套在另一个函数定义中。在函数定义3中,函数被递归定义。由此可见,函数可以看成是一种程序,其输入就是定义中左边括号中的量。它也可以将输入组合起来产生一个规则,组合过程中可以使用其他函数或该函数本身。这种用函数和表达式建立程序的方法就是函数式程序设计。函数型程序设计语言的优点之一就是对表达式中出现的任何函数都可以用其他函数来代替,只要这些函数调用产生相同的值。
    函数式语言的代表LISP在许多方面与其他语言不同,其中最为显著的是,其出现和数据的形式是等价的,这样数据结构就可以作为程序执行,程序也可以作为数据修改。

    ④逻辑型程序设计语言。逻辑型语言是一类以形式逻辑为基础的语言,其代表是建立在关系理论和一阶谓词理论基础上的PROLOG。PROLOG程序是一系列事实、数据对象或事实间的具体关系和规则的集合。通过查询操作把事实和规则输入数据库。用户通过输入查询来执行程序。在PROLOG中,关键操作是模式匹配,通过匹配一组变量与一个预先定义的模式并将该组变量赋给该模式来完成操作。以值集合S和T上的二元关系R为例,R实现后,可以询问:

    1. 已知a和b,确定R(a,b)是否成立。
    2. 已知a,求所有使R(a,y)成立的y。
    3. 已知b,求所有使R(x,b)成立的x。
    4. 求所有使R(x,y)成立的x和y。

    逻辑型程序设计具有与传统的命令型程序设计完全不同的风格。PROLOG数据库中的事实和规则是形式为“P:P1,P2,… ,Pn”的Hore子句,其中n ≥ 0,Pi(1 ≤ i ≤ n)为形如Ri(…)的断言,Ri是关系名。该子句表示规则:若P1,P2,… ,Pn均为真(成立),则P为真。当n = 0时,Hore子句变成P.,这样的子句称为事实。
    一旦有了事实与规则后,就可以提出询问。测试用户询问A是否成立时,采用归结方法。

    1. 如果程序中包含事实P,且P和A匹配,则A成立。
    2. 如果程序中包含Hore子句“P:P1,P2,…,Pn”,且P和A匹配,则PROLOG转而测试P1,P2,…,Pn。只有当P1,P2,…,Pn都成立时才能断言P成立。当求解某个Pi失败时,则返回到前面的某个成功点并尝试另一种选择,也就是进行回溯。
    3. 只有当所有可能情况都已穷尽时,才能推导出P失败。

    PROLOG有很强的推理功能,适用于书写自动定理证明、专家系统和自然语言理解等问题的程序。

你可能感兴趣的:(数据库系统 —— 2.1 程序语言概述(基本概念))