6.程序设计语言知识
6.1编程语言的基础知识
6.1.1程序设计语言的分类
程序设计语言有3个方面的因素,即语法、语义、语用
语法:程序的结构或形式;语义:程序的含义;语用:程序与使用者的关系
程序设计语言的分类:
(1)按语言级别,可以分为低级语言和高级语言 (2)按用户要求,可以分为过程式语言和非过程式语言
(3)按应用范围,可以分为通用语言和专用语言 (4)按使用方式,可以分为交互式语言和非交互式语言
(5)按成分性质,可以分为顺序语言、并发语言和分布语言
(6)按理论基础,可以分为函数式语言和逻辑型语言
6.1.2程序设计语言的简介
历史上主要出现的程序设计语言:
(1)APT:自动数控程序,第一个专用语言
(2)FORTRAN:公式翻译程序设计语言
(3)FLOW-MATIC:商用数据处理语言
(4)IPL-V:信息处理语言
(5)COMIT:串处理和模式匹配语言
(6)COBOL:面向商业通用语言
(7)ALGOL60:算法语言
(8)LISP:表处理语言
(9)JOVIAL:国际算法语言
(10)GPSS:通用系统模拟语言
(11)JOSS:第一个交互式语言
(12)FORMAC:公共翻译程序设计语言
(13)SIMULA:模拟语言
(14)APL/360:程序设计语言360
(15)PASCAL:一种通用的高级程序语言
(16)PROLOG:一种处理逻辑问题的语言
(17)ADA:一种表现能力很强的程序设计语言
(18)BASIC:初学者通用符号指令代码
(19)C:目前世界上最流行的高级程序设计语言之一
(20)C++:使用非常广泛的计算机编程语言
(21)C#:微软公司发布的一种面向对象的且运行在.NET FRAMEWORK上的高级程序设计语言
(22)JAVA:由sun公司发布的面向对象编程语言
(23)SQL:结构化查询语言
(24)VB:事件驱动编程语言
(25)XML:数据存储语言
(26)VBSCRIPT:脚本语言
(27)HTML:超文本标记语言
(28)JAVASCRIPT:脚本语言
(29)ACTIONSCRIPT:Flash的脚本语言
(30)LUA:脚本语言
(31)PERL:实用报表提取语言
(32)PHP:超文本预处理语言
(33)PYTHON:解释性程序设计语言
(34)RUBY:脚本语言
6.2程序设计语言的基础知识(面向对象语言、脚本语言、算法复杂度)
6.2.1面向对象语言
面向对象语言是以对象作为基本程序结构单位的程序设计语言,设计以对象为核心,对象是程序运行的基本成分,语言中提供了类,继承等成分。
面向对象语言的特点:
(1)认识性 (2)类别性 (3)多态性 (4)继承性
6.2.2算法复杂度
一个算法的优劣主要从算法的执行时间和所需占用存储空间的两个方面衡量,算法复杂度又分为:时间复杂度、空间复杂度
6.2.2.1算法的时间复杂度
时间复杂度用算法执行过程中的执行次数来衡量
6.2.2.2算法的空间复杂度
空间复杂度定义为算法额外耗费的存储空间
6.2.3脚本语言
(1)脚本语言是介于HTML和C、C++、JAVA及C#之间的程序设计语言
(2)脚本语言也使用变量和函数
(3)脚本语言一般有相应的脚本引擎来解释执行,一般需要解释器才能运行
(4)脚本语言一般以文本形式存在,类似一种命令
6.2.4汇编语言
汇编语言是符号化的机器语言,编写程序比高级语言效率更高
6.3程序设计语言的相关概念(变量、参数、设计语言风格)
6.3.1动态语言与静态语言
动态语言:在程序运行时可以改变其结构,新的函数被引进,已有的函数可以被删除等在结构上的变化,如:JAVASCRIPT、PHP、RUBY、PYTHON等都属于动态语言
静态语言:所有成分在编译时确定,运行时不可以改变,例如C、C++
6.3.2变量
变量:在程序运行过程中值可以改变的量
定义变量需要的以下属性:
(1)变量的标志符:即变量的名称
(2)变量的数据类型
(3)变量的存储类型 ---·自动类 ·静态类 ·寄存器类 ·外部类
(4)变量的作用域
·局部变量:函数内部定义的变量,作用域限于函数内
·全局变量:定义在函数外部,作用域为定义开始至源程序的结束
供用户使用的存储空间分为3个部分:
(1)程序区:存放程序的可执行代码模块
(2)静态存储区:存放所有全局变量的及标明静态类局部变量的部分
(3)运行栈区:存放数据分为以下几种
·函数调用时,顺序动态存放主调函数执行过程的现场,“现场保护”
·所有未标明为静态类的局部变量
·函数的形参
6.3.3函数的参数传递方式
形参:形式参数,函数定义一般形式的参数列表的参数,没有给定值,处理时不会立即分配存储单元
实参:实际参数,主调函数调用被调函数时给出,由实参将数据通过堆栈传给形参
函数的参数3种传递方式:
(1)传值(call by value )
(2)传地址(call by address)
(3)传引用(call by reference)
6.3.4程序设计风格
程序设计风格:指一个程序猿编写程序时表现的特点、习惯以及逻辑思路
良好的编程风格包括以下方面:
6.3.4.1源程序文档化
·标识符应按意取名,遵循统一的规范,不能随意
·程序应该加注释
注释分为序言性注释和功能性注释
序言性注释:置于每个模块起始部分,包括:
·每个模块说明
·说明模块的接口
·数据描述
·开发历史
功能性注释:在源程序内部,说明语句的含义,数据的状态,包括:
·注释用来说明的程序段
·使用空行或括号
·修改程序也已经修改相应的注释
6.3.4.2数据说明
·数据说明顺序应规范
·一个语句说明多个变量,按字典顺序排列
·复杂的数据结构要加注释
6.3.4.3语句构造
语句构造的原则是简单且直接,不能追求效率使代码复杂化
6.3.4.4输入和输出
输入输出考虑如下规则:
·输入操作步骤和输入格式尽量简单
·检查输入数据的合法性和有效性
·使用数据或文件结束数据的标志
·交互式输入提供可用选择和边界值
·保持格式的一致性
·输出数据表格式化,图形化
6.3.4.5效率
·效率是一个性能要求,目标在需求分析时给出
·追求效率要建立在不损害程序可读性和可靠性的基础上
·提高程序效率的根本途径是选择良好的设计方法和数据结构算法
For和while语句的循环体执行次数比循环条件判断次数少1
而do while语句的循环体执行次数等于循环条件判断次数
6.4汇编语言知识
6.4.1汇编
汇编:把汇编语言程序翻译成机器语言的过程
汇编语言的特点:
(1)面向机器的低级语言 (2)保持机器语言的优点
(3)可有效地访问并控制计算机各种硬件
(4)目标代码简短,占用内存少,执行速度快
(5)经常与高级语言配合使用
6.4.2编译
编译:将高级语言的源程序变成目标程序的过程
编译的工作过程:词法分析、语法分析、语义分析和中间代码生成、代码优化、目标代码生成。
(1)词法分析
(2)语法分析
(3)语义检查和中间代码生成
(4)代码优化
(5)目标代码生成
(6)表格管理程序
(7)出错处理程序
6.4.3反编译和交叉编译
反汇编:把目标代码转为汇编代码的过程
反编译:可执行文件变为高级语言程序
交叉编译:在一个平台上生成另一个平台的可执行代码
有限自动机:初始时,依次读取字符进行相应状态转移,直到输入串结束或找不到状态转移为止
6.4.4类的相关概念
类的一般形式如下:
Class name {
Public:
类的公有接口
Private:
私有成员函数
私有数据成员定义
};
类成员的3种不同访问权限:
(1)共有成员(Public):可以在类外和子类中访问
(2)私有成员(Private):只能被该类的成员函数访问,子类和外部不能被访问
(3)保护成员(Protected):只能被该类的成员函数或派生类的成员函数访问,不能被外部访问
表6-2 类成员的访问权限
成员 |
类的成员函数(内部) |
类的对象(外部) |
Public |
可以访问 |
可以访问 |
Protected |
可以访问 |
不可以访问 |
Private |
可以访问 |
不可以访问 |
基类与派生类的可见性关系如下:
表6-3 派生类各种继承方式下的可见性关系
基本成员 |
派生类的 继承方式 |
对派生类 |
对派生类的对象 |
Public |
Public |
可见,相当于Public成员 |
可见 |
Protected |
可见,相当于Protected成员 |
不可见 |
|
Private |
可见,相当于Private成员 |
不可见 |
|
Protected |
Public |
可见,相当于Protected成员 |
不可见 |
Protected |
可见,相当于Protected成员 |
不可见 |
|
Private |
可见,相当于Private成员 |
不可见 |
|
Private |
Public |
不可见 |
不可见 |
Protected |
不可见 |
不可见 |
|
Private |
不可见 |
不可见 |
Ps:堆栈溢出、空指针异常、数组下标越界都是程序运行时才能出现的问题
而变量未定义在编译阶段就可发现