4.2 程序设计语言
4.2.1 机器语言
机器语言是用二进制表示的、能被CPU识别并执行的计算机语言。机器语言是最低级的计算机语言,是用逻辑电路实现的。在计算机发展的早期阶段,计算机的专业人员使用机器语言编写程序。
机器指令是CPU能够执行的基本操作,简称指令。一种CPU能够执行的所有指令的集合称为指令系统。不同的CPU具有不同的指令系统。常见的指令有取数指令、存数指令、加法指令、减法指令、乘法指令、除法指令和控制转移指令等等。通常一个指令包括操作码和地址码两部分信息,格式为
操作码 地址码
操作码表示操作的类型,比如加、减和无条件转移等。地址码表示操作的对象,比如加法操作中的两个进行加法运算的数据。
4.2.2 汇编语言
用机器语言编程效率低的原因之一是机器语言的表现形式是人们不熟悉的二进制,而且二进制需要用更长的编码才能表示相同的内容。为了克服这个缺点,人们采用熟悉的助记符号表示机器语言中的操作码和地址码,由此形成的计算机语言就是汇编语言。
汇编语言本质是符号化的机器语言,依然是面向机器硬件的。汇编语言的特点有:程序执行速度快;程序不能直接执行;编程效率比机器语言高;不通用,即可移植性差。
在追求高运行速度或者需要控制硬件的情况下,人们依然使用汇编语言编写程序。
4.2.3 高级语言
高级语言是与自然语言和数学公式相似的计算机语言。使用高级语言编写程序不用考虑计算机硬件,只需要考虑如何解决问题即可。比如在例4-1中C语言程序代码第15行的“j=j+1;”比对应的机器语言和汇编语言代码更容易理解,编写程序效率也更高。
计算机不能直接执行高级语言程序,需要先把高级语言程序翻译成机器语言程序后才能执行。高级语言程序的翻译方式有解释方式和编译方式两种。解释方式是对高级语言程序翻译一句执行一句。比如一位母亲给孩子买了一本英语小说,孩子不懂英语,只懂汉语,孩子每次看这本小说时,都是母亲一句一句地翻译成汉语讲给孩子听,这就是解释方式。编译方式是先将高级语言程序翻译成机器语言程序,然后链接生成可执行程序,最后执行可执行程序。如果上面的母亲一次性把英语小说翻译成汉语小说,以后孩子每次看小说时,直接看汉语小说,省略了翻译的中间环节。显然编译方式的高级语言程序执行速度比解释方式的高级语言程序快。
高级语言的特点包括:编程效率高;通用,即可移植性好;不能直接执行;运行速度慢。
随着计算机应用的不断深入,出现了多种高级语言,比如面向过程语言(Procedure-OrientedLanguage)和面向对象语言(Object-Oriented Language)。
1.面向过程语言
面向过程语言是面向解题过程的。C语言、Fortran语言、Pascal语言和Basic语言等都是面向过程语言。
使用面向过程语言设计程序时,采用结构化程序设计技术,主要包括如下思想:
(1)自顶向下
先考虑整体功能,再考虑局部功能。
(2)逐步求精
将复杂功能分解为若干独立的子功能。最后形成一颗功能树。
(3)模块化
将每个功能分别用一个独立的模块实现。比如功能树中有n个节点,用n个独立的模块实现该功能树。
结构化程序设计技术把复杂的功能分解为若干个简单的独立功能,有效地降低了程序设计的复杂度,提高了程序的开发和维护效率。
但是在面向过程的结构化程序设计中,数据和处理数据的过程是分离的,核心是处理数据的过程。在开发大型复杂的程序时,代码的可重用性差,数据安全性差,程序的开发和维护效率非常低。
2.面向对象语言
为了解决面向过程的高级语言难以开发大型复杂程序的问题,人们设计出了面向对象语言。面向对象语言是能够直接描述客观事物以及事物之间联系的高级语言。
用面向对象语言设计程序时,把客观事物抽象为由属性和行为组成的对象。属性就是数据,行为就是处理数据的一段独立程序,行为也称为方法。把相同类型的对象再进一步抽象为类。通过继承和多态性实现代码的重用。
相对于面向过程的高级语言,面向对象语言的优点有:程序能比较直接地反映出所解问题的原始结构;程序设计人员可以使用已经熟悉的认识客观世界的思维方式进行程序开发。
常见的面向对象语言有C++和Java。
使用面向对象语言开发程序时使用面向对象的设计技术。面向对象设计技术主要包括:将数据和操作数据的方法封装为对象;将同类对象抽象为类;对象与对象之间通过消息进行通信(即调用其他对象的功能)。其优点包括:程序模块之间的关系更为简单,保障了程序模块的独立性和数据安全性;通过继承和多态性机制,大幅度提高了程序的重用性,提高了软件的开发和维护效率。