zoukankan      html  css  js  c++  java
  • 高级程序设计语言概述

    常用的高级程序设计语言

    常用的高级程序设计语言

    语言 特点
    FORTRAN 数值计算
    COBOL 事务处理
    PASCAL 结构化程序设计
    LISP 函数式程序设计
    PROLOG 逻辑程序设计
    C 系统程序设计
    Smalltalk 面向对象程序设计
    Java Internet应用,可移植性
    Python 解释型

    高级程序设计语言的优点

    相对机器语言或汇编语言,高级程序设计语言

    • 更接近于数学语言和工程语言,更直观、自然和易于理解
    • 更容易验证其正确性、改错
    • 编写程序的效率更高
    • 更容易移植

    程序设计语言的定义

    标识符是语法概念,名字是语义概念

    语法

    • 程序本质上是一定字符集上的字符串
    • 语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序
    • 词法规则:单词符号的形成规则
      • 单词符号是语言中具有独立意义的最基本结构
      • 一般包括:常数、标识符、基本字、算符、界符等
      • 描述工具:有限自动机
      • 语法规则:语法单位的形成规则
      • 语法单位通常包括:表达式、语句、分程序、过程、
    • 函数、程序等;
      • 描述工具:上下文无关文法

    E→i
    E→E+E
    E→E*E(不能理解成乘号)
    E→(E)
    语法规则和词法规则定义了程序的形式结构
    定义语法单位的意义属于语义问题

    语义

    • 语义
      一组规则,用它可以定义一个程序的意义
    • 描述方法
      • 自然语言描述
        二义性、隐藏错误和不完整性
      • 形式描述
        操作语义
        指称语义
        代数语义

    语用

    程序语言的基本功能和层次结构

    • 程序,本质上说是描述一定数据的处理过程
    • 程序语言的基本功能
      描述数据和对数据的运算

    层次结构

    程序

    | |

    子程序或分程序、过程、函数

    | |

    语句

    | |

    表达式

    | |

    数据引用 运算符 函数调用

    程序语言成分的逻辑和实现意义

    • 抽象的逻辑的意义
      • 数学意义
    • 计算机实现的意义
      • 具体实现

    高级程序设计语言的一般特性

    高级语言的分类

    • 强制式语言(Imperative Languge)/过程式语言
      • 命令驱动,面向语句
      • FORTRAN、C、Pascal,Ada
    • 应用式语言(Applicative Language)
      • 注重程序所表示的功能,而不是一个语句接一个语句地执行
      • LISP、ML
    • 基于规则的语言( Rule-based Language)
      • 检查一定的条件,当它满足值,则执行适当的动作
      • Prolog
    • 面向对象语言(Object-Oriented Language)
      • 封装、继承和多态性
      • Smalltalk,C++,Java

    程序结构

    FORTRAN

    • 一个程序由一个主程序段和若干辅程序段组成
    • 辅程序段可以是子程序、函数段或数据块
    • 每个程序段由一系列的说明语句和执行语句组成,各段可以独立编译
    • 模块结构,没有嵌套和递归
    • 各程序段中的名字相互独立,同一个标识符在不同的程序段中代表不同的名字
    PROGRAM …//主程序
    …
    end
    SUBROUTINE …//辅程序1
    …
    end
    FUNCTION …//辅程序2
    …
    end
    

    PASCAL

    • PASCAL程序本身可以看成是一个操作系统调用的过程,过程可以嵌套和递归
    • 一个PASCAL过程
          过程头;
          说明段(由一系列的说明语句组成);
          begin
          执行体(由一系列的执行语句组成);
          end
    

    作用域

    • 同一个标识符在不同过程中代表不同的名字
    • 作用域:一个名字能被使用的区域范围
    • 名字作用域规则——"最近嵌套原则"
    最近嵌套原则
    • 一个在子程序B1中说明的名字X只在B1中有效(局部于B1)
    • 如果B2是B1的一个内层子程序且B2中对标识符X没有新的说明,则原来的名字X在B2中仍然有效
    • 如果B2对X重新作了说明,那么,B2对X的任何引用都是指重新说明过的这个X
    program main
    var A, B:real;
    …
    procedure P1
    var B:boolean;
    …
    begin
    …
    end
    procedure P2
    var A:integer;
    …
    begin
    …
    end
    begin
    …
    end
    

    P2的代码能够调用P1

    JAVA

    • 面向对象的高级语言
      • 类(Class)
      • 继承(Inheritance)
      • 多态性(Polymorphism)和动态绑定(Dynamic binding)
    class Car{
    int color;
    int door;
    int speed;
    …
    public push_break ( ) {
    …
    }
    public add_oil ( ) {
    …
    }
    }
    class Trash_Car extends car {
    double amount;
    public fill_trash ( ) {
    …
    }
    }
    

    数据结构与操作

    数据类型通常包括三要素

    • 用于区别这种类型数据对象的属性
    • 这种类型的数据对象可以具有的值
    • 可以作用于这种类型的数据对象的操作

    初等数据类型

    • 数值类型
      • 整型、实型、复数、双精度
      • 运算:+,-,*,/等
    • 逻辑类型
      • true、false
      • 布尔运算:∨,∧,┑等
    • 字符类型:符号处理
    • 指针类型

    标识符与名字

    • 标识符

      • 以字母开头的,由字母数字组成的字符串
    • 名字

      • 标识程序中的对象
    • 名字的意义和属性

      • 值:单元中的内容
      • 属性:类型和作用域
    • 名字的说明方式

      • 由说明语句来明确规定的
        • int score
      • 隐含说明
        • FORTRAN 以I,J,K,…N为首的名字代表整型,否则为实型
      • 动态确定
        • 走到哪里,是什么,算什么

    名字的绑定可以发生在编译过程中也可以发生在运行过程中

    • 标识符
      • 以字母开头的,由字母数字组成的字符串
    • 标识符与名字两者有本质区别
      • 标识符是语法概念
      • 名字有确切的意义和属性

    数据结构

    数组
    • 逻辑上,数组是由同一类型数据组成的某种n维矩形结构,沿着每一维的距离,称为下标

    • 数组可变与不可变

      • 编译时能否确定其存贮空间的大小
    • 访问

      • 给出数组名和下标值,如A[10, i+ j]
    • 存放方式

      • 按行存放,按列存放
    • 数组A[10,20]的A[1,1]的地址为a,每个元素占1字节,各维下标从1开始,按行存放,那么
      A[i,j]地址为:
      a+(i-1)*20+(j-1)

    • 通用的数组元素地址计算公式

    数组元素地址计算
    • 设A为n维数组,按行存放,每个元素宽度为w
      • low i 为第i维 的下界
      • up i 为第i维 的上界
      • n i 为第i维 可取值的个数(n i = up i -low i + 1),
      • base为A的第一个元素相对地址
    • 元素A[i 1 ,i 2 ,…,i k ]相对地址公式
      ( ((…i 1 n 2 +i 2 )n 3 +i 3 )…)n k +i k )×w +
      base-((…((low 1 n 2 +low 2 )n 3 +low 3 )…)n k +low k )×w)/Con
    内情向量
    • 内情向量
    • 登记维数,各维的上、下限,首地址,以及数组(元素)的类型等信息

    记录

    • 由已知类型的数据组合在一起的一种结构
    • 记录或者结构的元素,也叫做域(field)
    record { char name[20];
    integer age;
    bool married;
    }
    
    • 访问:复合名 cards[k].name
    • 存储:连续存放
    • 域的地址计算
      • 相对于记录结构起点的相对数OFFSET

    字符串、表格、栈

    • 字符串:符号处理、公式处理
    • 表格:本质上是一种记录结构
    • 线性表:一组顺序化的记录结构
    • 栈:一种线性表,后进先出,POP, PUSH

    抽象数据类型

    • 抽象数据类型(Abstract Data Type)
    • A set of data values and associated operations that
      are precisely specified independent of any particular
      implementation.
    • 抽象数据类型由数据集合、及其相关的操作组成,这些操作
      有明确的定义,而且定义不依赖于具体的实现
    • 一个抽象数据类型包括
      • 数据对象集合
      • 作用于这些数据对象的抽象运算的集合
      • 这种类型对象的封装,即,除了使用类型中所定义
        的运算外,用户不能对这些对象进行操作
    • 程序设计语言对抽象数据类型的支持
      • Ada通过程序包(package)提供了数据封装的支持
    package STACKS is
    type ELEM is private;
    type STACK is limited private;
    procedure push (S: in out STACK; E: in ELEM);
    procedure pop (S: in out STACK; E: out ELEM);
    …
    end STACK;
    //规范说明
    
    //程序包体
    
    package body STACKS is
    procedure push(S: in out STACK; E: in ELEM);
    begin
    ……实现细节
    end push;
    procedure pop (S: in out STACK; E: out ELEM);
    begin
    ……实现细节
    end pop;
    end;
    
    • 一个抽象数据类型包括
      • 数据对象集合
      • 作用于这些数据对象的抽象运算的集合
      • 这种类型对象的封装,即,除了使用类型中所定义
        的运算外,用户不能对这些对象进行操作
    • 程序设计语言对抽象数据类型的支持
      • Ada通过程序包(package)提供了数据封装的支持
      • Smalltalk、C++和Java通过类(Class)对抽象数据类型提供支持

    JAVA 程序示例

    class Car{
    int color_number;
    int door_number;
    int speed;
    …
    public push_break ( ) {
    …
    }
    public add_oil ( ) {
    …
    }
    }
    class Trash_Car extends car {
    double amount;
    public fill_trash ( ) {
    …
    }
    }
    编译原理
    

    语句与控制结构

    表达式

    • 表达式由运算量(也称操作数,即数据引用或函数调用)和算符(运算符,操作符)组成
    • 形式:中缀、前缀、后缀X*Y -A P↑或者p->
    • 表达式形成规则
    • 变量(包括下标变量)、常数是表达式。
    • 若E 1 、E 2 为表达式,θ是一个二元算符,则E 1 θE 2 是表达式。
    • 若E是表达式,θ为一元算符,则θE(或Eθ)是表达式。
    • 若E是表达式,则(E)是表达式

    算符的优先次序

    • 一般的规定
      • PASCAL:左结合A+B+C=(A+B)+C
      • FORTRAN:对于满足左、右结合的算符可任取一种,如A+B+C就可以处理成(A+B)+C,也可以处理成A+(B+C)
    • 注意两点
      • 代数性质能引用到什么程度视具体的语言而定
      • 在数学上成立的代数性质在计算机上未必完全成立
      • A + B = B +A

    语句

    赋值语句

    • A := B
    • 名字的左值:该名字代表的存储单元的地址
    • 名字的右值:该名字代表的存贮单元的内容

    控制语句

    * 无条件转移语句
    goto L
    * 条件语句
    if B then S
    if B then S 1 else S 2
    * 循环语句
    while B do S
    repeat S until B
    for i:=E 1 step E 2 until E 3 do S
    * 过程调用语句
    call P(X 1 , X 2 , ... ,X n )
    * 返回语句
    return (E)
    

    功能

    • 执行语句:描述程序的动作
    • 说明语句:定义各种不同数据类型的变量或运算,定义名字的性质

    语句的分类

    • 形式
    • 简单句:不包含其他语句成分的基本句
    A = B + C ;
    goto 105 ;
    
    • 复合句:句中有句的语句
    while (i >= 0) {
    j = i * 10;
    i++;
    }
    
  • 相关阅读:
    postgresql清理工具
    Vue 创建项目
    Vue3 项目打包
    Oracle Linux7 与Oracle Linux8 下载rpm包的位置
    PostgreSQL 关闭session链接,删除数据库方法(转载)
    浅析状态机模式的理解以及如何使用状态机模式简化代码里复杂的 if else 逻辑
    浅析黑盒/白盒测试用例的基本设计方法:等价类划分法、临界值分析法、错误推测法、因果图法
    浅析设计测试用例的四条原则:单个用例覆盖最小化原则、测试用例替代产品文档功能原则、单次投入成本和多次投入成本原则、使测试结果分析和调试最简单化原则
    浅析软件测试中的一些常见理论:杀虫剂效应、金字塔模型、缺陷集群性原则、软件测试活动依赖于软件测试背景、软件测试的7大基本原则
    golang var xx struct定义struct类型变量?
  • 原文地址:https://www.cnblogs.com/ygjzs/p/11863514.html
Copyright © 2011-2022 走看看