程序设计语言(programming language)是一组用来定义计算机程序的语法规则。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言能够让程序员准确地定义计算机所需要使用的数据,并精确地定义在不同情况下应当采取的行动。
程序设计语言是用于书写计算机程序的语言。语言的基础是一组记号和一组规则。根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。程序设计语言有3个方面的因素,即语法、语义和语用。语法表示程序的结构或形式,亦即表示构成语言的各个记号之间的组合规律,但不涉及这些记号的特定含义,也不涉及使用者。语义表示程序的含义,亦即表示按照各种方法所表示的各个记号的特定含义,但不涉及使用者。
程序设计语言 = 语法 + 语义 + 语用
语法规则:单词符号的形成规则,其中单词符号一般包括各种类型的常数,标识符,基本字,算符和界符等。语法规则是语法单位的形成规则。
语义:一条合法语句的含义,对于一种语言来说,不仅要给出它的语法,语法规则,而且要定义它的单词符号和语法单位的意义,这就是语义问题。可以定义一个程序的意义的一组规则称为语义规则。
语用:语用涉及语言使用者各方面的内容,包括心理学,社会学方面的内容,比如语言的实用性,应用范围和对使用者的作用。对程序设计语言来说,语用问题指实现的简易性,应用的频率和编程的方法论,可以把语用看作是程序和使用者的关系。
语言的种类千差万别。但是,一般说来,基本成分不外4种。
1、 数据成分。用以描述程序中所涉及的数据。
2、 运算成分。用以描述程序中所包含的运算。
3、 控制成分。用以表达程序中的控制构造。
4、 传输成分。用以表达程序中数据的传输。
编辑程序设计语言具有心理工程及技术等特性。
(1)心理特性:歧义性、简洁性、局部性、顺序性、传统性。
(2)工程特性:可移植性,开发工具的可利用性,软件的可重用性、可维护性。
(3)技术特性:支持结构化构造的语言有利于减少程序环路的复杂性,使程序易测试、易维护。
分类
自20世纪60 年代以来,世界上公布的程序设计语言已有上千种之多,但是只有很小一部分得到了广泛的应用。从发展历程来看,程序设计语言可以分为 4 代。
第一代机器语言
机器语言是由二进制 0、1 代码指令构成,不同的 CPU 具有不同的指令系统。机器语言程序难编写、难修改、难维护,需要用户直接对存储空间进行分配,编程效率极低。这种语言已经被渐渐淘汰了。
第二代汇编语言
汇编语言指令是机器指令的符号化,与机器指令存在着直接的对应关系,所以汇编语言同样存在着难学难用、容易出错、维护困难等缺点。但是汇编语言也有自己的优点:可直接访问系统接口,汇编程序翻译成的机器语言程序的效率高。 从软件工程角度来看,只有在高级语言不能满足设计要求,或不具备支持某种特定功能的技术性能(如特殊的输入输出)时,汇编语言才被使用。
第三代高级语言
高级语言是面向用户的、基本上独立于计算机种类和结构的语言。其最大的优点是:形式上接近于算术语言和自然语言,概念上接近于人们通常使用的概念。高级语言的一个命令可以代替几条、几十条甚至几百条汇编语言的指令。因此,高级语言易学易用,通用性强,应用广泛。高级语言种类繁多,可以从应用特点和对客观系统的描述两个方面对其进一步分类。
一、从应用角度分类
从应用角度来看,高级语言可以分为基础语言、结构化语言和专用语言。
(1) 基础语言
基础语言也称通用语言。它历史悠久,流传很广,有大量的已开发的软件库,拥有众多的用户, 为人们所熟悉和接受。 属于这类语言的有 FORTRAN、COBOL、BASIC、ALGOL等。FORTRAN 语言是国际上广为流行、也是使用得最早的一种高级语言,从 20 世纪90 年代起,在工程与科学计算中一直占有重要地位,备受科技人员的欢迎。BASIC 语言是在 20 世纪 60 年代初为适应分时系统而研制的一种交互式语言,可用于一般的数值计算与事务处理。BASIC 语言结构简单,易学易用,并且具有交互能力,成为许多初学者学习程序设计的入门语言。
(2) 结构化语言
20 世纪 70 年代以来,结构化程序设计和软件工程的思想日益为人们所接受和欣赏。在它们的影响下,先后出现了一些很有影响的结构化语言,这些结构化语言直接支持结构化的控制结构,具有很强的过程结构和数据结构能力。PASCAL、C、Ada 语言就是它们的突出代表。
PASCAL 语言是第一个系统地体现结构化程序设计概念的现代高级语言,软件开发的最初目标是把它作为结构化程序设计的教学工具。由于它模块清晰、控制结构完备、有丰富的数据类型和数据结构、语言表达能力强、移植容易,不仅被国内外许多高等院校定为教学语言,而且在科学计算、数据处理及系统软件开发中都有较广泛的应用。
C 语言功能丰富,表达能力强,有丰富的运算符和数据类型,使用灵活方便,应用面广,移植能力强,编译质量高,目标程序效率高,具有高级语言的优点。同时,C 语言还具有低级语言的许多特点,如允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作等。用 C 语言编译程序产生的目标程序,其质量可以与汇编语言产生的目标程序相媲美,具有“可移植的汇编语言”的美称,成为编写应用软件、操作系统和编译程序的重要语言之一。
(3) 专用语言
是为某种特殊应用而专门设计的语言,通常具有特殊的语法形式。一般来说,这种语言的应用范围狭窄,移植性和可维护性不如结构化程序设计语言。随着时间的发展,被使用的专业语言已有数百种,应用比较广泛的有 APL 语言、Forth 语言、LISP 语言。
二、从客观系统的描述分类
从描述客观系统来看,程序设计语言可以分为面向过程语言和面向对象语言。
(1) 面向过程语言
以“数据结构+算法”程序设计范式构成的程序设计语言,称为面向过程语言。前面介绍的程序设计语言大多为面向过程语言。
(2) 面向对象语言
以“对象+消息”程序设计范式构成的程序设计语言,称为面向对象语言。比较流行的面向对象语言有 Delphi、Visual Basic、Java、C++等。
Delphi 语言具有可视化开发环境 , 提供面向对象的编程方法,可以设计各种具有Windows 内格的应用程序(如数据库应用系统、通信软件和三维虚拟现实等),也可以开发多媒体应用系统。
Visual Basic 语言简称 VB,是为开发应用程序而提供的开发环境与工具。它具有很好的图形用户界面,采用面向对象和事件驱动的新机制,把过程化和结构化编程集合在一起。它在应用程序开发中的图形化构思,无需编写任何程序,就可以方便地创建应用程序界面,且与 Windows 界面非常相似,甚至是一致的。
Java 语言是一种面向对象的、不依赖于特定平台的程序设计语言,简单、可靠、可编译、可扩展、多线程、结构中立、类型显示说明、动态存储管理、易于理解,是一种理想的、用于开发 Internet 应用软件的程序设计语言。
第四代非过程化语言
4GL 是非过程化语言,编码时只需说明“做什么”,不需描述算法细节。
数据库查询和应用程序生成器是 4GL 的两个典型应用。用户可以用数据库查询语言(SQL)对数据库中的信息进行复杂的操作。 用户只需将要查找的内容在什么地方、 据什么 根条件进行查找等信息告诉 SQL,SQL 将自动完成查找过程。应用程序生成器则是根据用户的需求“自动生成”满足需求的高级语言程序。真正的第四代程序设计语言应该说还没有出现。所谓的第四代语言大多是指基于某种语言环境上具有 4GL 特征的软件工具产品, System Z、如PowerBuilder、FOCUS 等。第四代程序设计语言是面向应用,为最终用户设计的一类程序设计语言。它具有缩短应用开发过程、降低维护代价、最大限度地减少调试过程中出现的问题以及对用户友好等优点。
4.3.1、BASIC语言
beginner’s all-purpose symbolic instruction code “初学者通用符号代码”
sub main
msgbox "HelloWorld!"
end sub
4.3.2、PASCAL语言
结构程序设计语言,教学型语言。大量的控制结构,充分反映了结构化程序设计的思想和要求,直观易懂,使用灵活,可用于科学计算,编写系统软件。
begin
writeln(\'Hello World! \');
end.
4.3.3、C语言
#include
int main(void)
{
printf("Hello World!\n");
return 0;
}
4.3.4、C++语言
面向对象的程序设计语言,可以实现面向对象的程序设计。
1、支持面向对象抽象,包括数据抽象,行为共享,进化和确定性。
2、支持面向对象的设计与编程
3、改进了C语言中的不足。C++增加了一些新的运算符,规定类型转换多于强制转换,函数的说明必须用原型,对缺省类型做了一些限制,增加了安全性。
4、引进了引用的概念,实用引用作为函数参数,允许函数重载,允许设置缺省参数,提高了程序的灵活性,减少了冗余性。引进内联函数的概念,提高了程序效率。
#include
int main()
{
std::cout<<"Hello World! \n"; //显示出HelloWorld!文字
}
4.3.5、Java语言
1、Java语言特点:
(1)简单性 (2)面型对象(3)分布性(4)可移植性(5)安全性(6)鲁棒性
2、Java Applet(小应用程序)的特点
Applet是Java的小应用程序,动态,安全,跨平台的网络应用程序。Applet可以像图像,声音,动画等一样从网络中下载,并且他可以接收用户的输入,动态地进行改变,而不仅仅是显示动画和播放声音。
3、Java和C/C++语言的比较
(1)全局变量
(2)不采用goto语句
(3)指针
4、IDE(integrated development environment):Eclipse,Net-beans,JBuilder等。
public class Hello
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
4.3.6、Ada语言
Ada语言是一种表现力很强的通用程序设计语言。程序的稳定性和可维护性,程序设计和人的行为接近,程序设计高效。Ada
是美国国防部指定的唯一的一种可用于军用系统开发的语言,我国军方也将Ada语言作为军内开发标准。
with Ada.Text_IO;
procedure Hello is
begin
Ada.Text_IO.Put_Line("Hello World!");
end Hello;
4.3.7、Logo语言
print[Hello!];
4.3.8、脚本语言(scripting language)
称为扩建的语言或动态语言。它是为了缩短传统的编写—编译—链接—运行(edit—compile—link—run)过程而创建的计算机程序设计语言。一个脚本通常是解释运行而非编译运行。常见的脚本语言UNIX/Linux Shell,JavaScript,Nuva,Perl,PHP,Python,Ruby,Tcl,VBscript,CSS等。
4.4.1、并行程序设计语言(用于并行程序设计)
并行编译的过程:词法和语法分析,优化以及并行代码生成。
优化是并行编译的主体:依赖关系分析、识别;程序转换,主要是循环转换;进程的分配和调度。
4.4.2、编译过程
数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。
数据可以是连续的值,比如声音、图像,称为模拟数据。也可以是离散的,如符号、文字,称为数字数据。
在计算机系统中,数据以二进制信息单元0,1的形式表示。
在计算机科学中,数据是指所有能输入到计算机并被计算机程序处理的符号的介质的总称,是用于输入电子计算机进行处理,具有一定意义的数字、字母、符号和模拟量等的通称。计算机存储和处理的对象十分广泛,表示这些对象的数据也随之变得越来越复杂。
信息与数据既有联系,又有区别。数据是信息的表现形式和载体,可以是符号、文字、数字、语音、图像、视频等。而信息是数据的内涵,信息是加载于数据之上,对数据作具有含义的解释。数据和信息是不可分离的,信息依赖数据来表达,数据则生动具体表达出信息。数据是符号,是物理性的,信息是对数据进行加工处理之后所得到的并对决策产生影响的数据,是逻辑性和观念性的;数据是信息的表现形式,信息是数据有意义的表示。数据是信息的表达、载体,信息是数据的内涵,是形与质的关系。数据本身没有意义,数据只有对实体行为产生影响时才成为信息。
编码是信息从一种形式或格式转换为另一种形式的过程,也称为计算机编程语言的代码简称编码。用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号。编码在电子计算机、电视、遥控和通讯等方面广泛使用。编码是信息从一种形式或格式转换为另一种形式的过程。解码,是编码的逆过程。
ASCII
我们日常接触到的文件分ASCII和Binary两种。ASCII是“美国信息交换标准编码”的英文字头缩写,可称之为“美标”。美标规定了用从0到127的128个数字来代表信息的规范编码,其中包括33个控制码,一个空格码,和94个形象码。形象码中包括了英文大小写字母,阿拉伯数字,标点符号等。我们平时阅读的英文电脑文本,就是以形象码的方式传递和存储的。美标是国际上大部分大小电脑的通用编码。
国标
“国标”是“中华人民共和国国家标准信息交换用汉字编码”的简称。国标表(基本表)把七千余汉字、以及标点符号、外文字母等,排成一个94行、94列的方阵。方阵中每一横行叫一个“区”,每个区有九十四个“位”。一个汉字在方阵中的坐标,称为该字的“区位码”。例如“中”字在方阵中处于第54区第48位,它的区位码就是5448。
GBK
GBK码是GB码的扩展字符编码,对多达2万多的简繁汉字进行了编码,简体版的Win95和Win98都是使用GBK作系统内码。
从实际运用来看,微软自win95简体中文版开始,系统就采用GBK代码,它包括了TrueType宋体、黑体两种GBK字库(北京中易电子公司提供),可以用于显示和打印,并提供了四种GBK汉字的输入法。此外,浏览器IE4.0简体、繁体中文版内部提供了一个GBK-BIG5代码双向转换功能。
ISO
1993年,国际标准ISO10646 定义了通用字符集(Universal Character Set, UCS)。 UCS 是所有其他字符集标准的一个超集。它保证与其他字符集是双向兼容的。就是说, 如果你将任何文本字符串翻译到 UCS格式,然后再翻译回原编码, 你不会丢失任何信息。
Unicode
人们在不断寻找这更好的字符编码方案,最后的结果就是Unicode诞生了。Unicode其实就是宽字节字符集,它对每个字符都固定使用两个字节即16位表示,于是当处理字符时,不必担心只处理半个字符。
Unicode在网络、Windows系统和很多大型软件中得到应用。
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
定义
数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。
数据的逻辑结构
指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。逻辑结构包括:
1.集合:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系;
2.线性结构:数据结构中的元素存在一对一的相互关系;
3.树形结构:数据结构中的元素存在一对多的相互关系;
4.图形结构:数据结构中的元素存在多对多的相互关系。
指数据的逻辑结构在计算机存储空间的存放形式。
数据的物理结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可表示成一种或多种存储结构。
数据元素的机内表示(映像方法): 用二进制位(bit)的位串表示数据元素。通常称这种位串为节点(node)。当数据元素有若干个数据项组成时,位串中与个数据项对应的子位串称为数据域(data field)。因此,节点是数据元素的机内表示(或机内映像)。
关系的机内表示(映像方法):数据元素之间的关系的机内表示可以分为顺序映像和非顺序映像,常用两种存储结构:顺序存储结构和链式存储结构。顺序映像借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。非顺序映像借助指示元素存储位置的指针(pointer)来表示数据元素之间的逻辑关系。
数据库
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191215190443732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTg5MjE3MA==,size_16,color_FFFFFF,t_7
0)数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。
数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。
关系数据库
关系型数据库,存储的格式可以直观地反映实体间的关系。关系型数据库和常见的表格比较相似,关系型数据库中表与表之间是有很多复杂的关联关系的。 常见的关系型数据库有Mysql,SqlServer等。在轻量或者小型的应用中,使用不同的关系型数据库对系统的性能影响不大,但是在构建大型应用时,则需要根据应用的业务需求和性能需求,选择合适的关系型数据库。
非关系型数据库(NoSQL)
随着近些年技术方向的不断拓展,大量的NoSql数据库如MongoDB、Redis、Memcache出于简化数据库结构、避免冗余、影响性能的表连接、摒弃复杂分布式的目的被设计。
指的是分布式的、非关系型的、不保证遵循ACID原则的数据存储系统。NoSQL数据库技术与CAP理论、一致性哈希算法有密切关系。所谓CAP理论,简单来说就是一个分布式系统不可能满足可用性、一致性与分区容错性这三个要求,一次性满足两种要求是该系统的上限。
目前NoSQL数据库仍然没有一个统一的标准,它现在有四种大的分类:
(1)键值对存储(key-value):代表软件Redis,它的优点能够进行数据的快速查询,而缺点是需要存储数据之间的关系。
(2)列存储:代表软件Hbase,它的优点是对数据能快速查询,数据存储的扩展性强。而缺点是数据库的功能有局限性。
(3)文档数据库存储:代表软件MongoDB,它的优点是对数据结构要求不特别的严格。而缺点是查询性的性能不好,同时缺少一种统一查询语言。
(4)图形数据库存储: 代表软件InfoGrid,它的优点可以方便的利用图结构相关算法进行计算。而缺点是要想得到结果必须进行整个图的计算,而且遇到不适合的数据模型时,图形数据库很难使用。