第1章计算机和程序设计语言初步开始学习计算机程序设计之前,我们在这个选修的一章中介绍计算机与程序设计语言方面的背景知识。本章介绍从早期计算机到现代计算机发展的简明历史,说明现代计算机的组成,还介绍程序设计语言的简明历史,从低级的机器语言到现在的面向对象的语言。1.1计算机发展历史人类通过不断发明和使用工具,才从原始社会走进现代社会。石器、火药、机械以及其他发明戏剧性地改变了人类的生活方式。在现代历史中,计算机无疑是最重要的发明。在如今非常先进的社会中,计算机影响着我们一天生活的每一刻:课程安排由计算机制定,学生档案由计算机保存,考试成绩由计算机评分,宿舍安全系统由计算机监控,还有众多影响我们生活的其他功能也是由计算机控制的。虽然第l台真正的计算机发明于20世纪40年代,但计算机的概念却已经有一百六十多年的历史。查尔斯·巴贝奇被认为是发明现代计算机的先驱,1823年他应英国政府的要求设计查分机(DifferenceEngine),用来计算和处理数学用表。差分机建立在转动齿轮的基础上,由单曲柄操作。遗憾的是由于技术条件的限制,他陷入困境而最终放弃了这个计划。但是,一个更加宏伟的计划在他的头脑中产生。事实上,放弃差分机的原因之一也是为了用新的概念发明更好的机器。他把这个新机器称之为分析机(AnalyticalEngine),但是分析机也同样没有制造出来。因为巴贝奇的思想超越了他所处的时代,当时还不存在使分析机成为现实的技术。尽管如此,分析机还是取得了非凡的成就,因为其设计原理与现代计算机相同,它的突出之处是可编程序。差分机只能计算数学用表,而分析机通过打孔卡片输入可以执行任何计算。用打孔卡片的方法输入程序后来被用到真正的计算机,直到二十世纪七十年代仍广泛使用。虽然分析机从未建成,但其演示程序却已由AdaLovelace写好,她是诗人拜伦的女儿。Ada程序设计语言就是为了向Lovelace女士表示敬意而命名的,她是第1个计算机程序员。1930年底,衣阿华州立大学的JohnAtanasoff与其研究生cifrordBerry制造了第1个机电式计算机。他们的一项创新是使用了二进制数(我们将在下一节讨论)。大约在同一时期,美国哈佛大学的数学教授霍华德·艾肯在IBM公司和美国海军的支持下一直致力于研究自动程序控制计算机,就是人们通常所说的MARKI。MARKI在设计上与分析机非常接近,所以被艾肯教授说为:“巴贝奇梦想的实现”。MARKI也是机电式计算机,它依靠的是继电器。由于继电器的速度不够快,因而MAKEI很快就被基于电子管的计算机取代。第1个真正意义上的电子计算机是ENIACI(电子数值积分和计算机),在JOhnW.Mauchly和J.PresperEckert的领导下,诞生于美国宾夕法尼亚大学。他们的设计思想受到JohnAtansoff的影响和启发。ENIACI的程序编制是通过导线插头在控制板上的插拔实现的,如同老式电话的接线台。程序编制要耗费工程师大量的时间,哪怕程序做出简单修改也要花费很长的时间。在程序设计的过程中,昂贵的计算机空闲坐等。为了提高效率,普林斯顿大学的冯·诺依曼建议将程序保存计算机的存储器中。这种存储程序的方案不仅提高了计算速度,而且允许用更灵活的方法编写程序。例如,由于程序保存在存储器中,计算机可以改变程序指令,从而改变程序执行的顺序,因此由一个单独的程序得到不同的结果成为可能。我们把这些以电子管为特征的早期计算机称为“第一代计算机”,第2代计算机在二十世纪五十年代后期开始出现,由晶体管代替电子管。存储器设备的改进同样进一步提高了处理速度。到了六十年代初期,晶体管被集成电路代替,从而出现了第3代计算机。此时的单片集成电路集成了数百个晶体管,使小型机的制造成为可能。小型机可以放置到个人办公室或实验室。而早期的计算机大到轻易地就占满整幢大楼的地下室。集成电路的进步是非凡的,大规模集成电路,通常被称为“计算机芯片”或“硅片”,其容量相当于数干只晶体管,并且使“单片机”成为现实。使用大规模集成电路的微型计算机出现于二十世纪七十年代中期。今天所说的个人计算机就是七十年代微型计算机的后代。如今个人计算机中使用的计算机芯片封装了相当于几百万个晶体管。个人计算机属于第4代计算机,最初的微型计算机是孤立、独立的机器,单词personal把计算机形容为个人单独使用的设备。然而没过多久,人们就认识到需要共享计算机的资源。例如,早期的微型计算机需要专用的打印机。使许多台计算机共享一台打印机不是更有意义吗?在计算机之间共享数据,而不是在单台计算机上复制相同的数据不是也很有意义吗?在计算机之间发送电子信息不是很好吗?网络计算机的概念为满足这些需要而发展起来。各种计算机被连接到一个网络。在一个单独的建筑物或几个相邻建筑物连接计算机的网络称为“局域网”(LAN),连接地域分散的计算机的网络称为广域网(WAN)。这些单独的网络可以进一步连接而形成相互连接的网络,称为互联网。最著名的互联网称为Intenet。互联网的出现,使共享世界范围的信息成为可能,且非常容易。在互联网上查看信息所用的最热门工具是web浏览器。你可以用Web浏览器查看由文本、音频、视频和其他类型的信息组成的多媒体信息。我们将在本章最后一节介绍Java如何与Internet和Web浏览器相联系。1.2计算机体系结构当今一台典型的计算机有5个基本组成部分:RAM、CPU、外部存储设备、输入输出设备和通信设备.图0.1说明这5个部分。介绍计算机的组成部分之前,我们首先介绍计算机中使用的二进制数系统。图1.1典型计算机系统结构简化图1.2.1二进制数为了理解二进制数系统,我们首先观察十进位数系统中使用的10个数字:0、1、2、3、4、5、6、7、8、9。为了以十进制表示一个数,我们要使用一个或多个这些数字的序列表达。序列中每个数字的值取决于其所在的位置。例如,考虑234和324这两个数。数字2在第1个数中代表200,而在第2个数中代表20。序列中的每个位置都有一个值,等于10的整数次幂。下面的框图说明如何确定这些位置的值:一个十进制数的值(表示为若干数字的序列)是所有数字与其位置值相乘积的累加和。说明如下:=2×102+4×101+8×100+7×10-1=2×100+4×10+8×1+7×1/10=200+40+8+7/10=248.7十进制数系统中有10个符号,位置值是10的整数次幂。我们说10是十进制数系统的基数或基。二进制数系统的原理与十进制一样,但是用2作为其基数。二进制数系统有2个数字(0和1),称为“位’(bit),其位置值为2的整数次幂。下面的框图说明如何确定二进制的位置值:二进制数的值(表示为位的序列)是所有二进制位与其位置值乘积的累加和,说明如下:=1×22+0×21+1×20+1×2-1=1×4+0×2+1×1+1×1/2=4+0+1+1/2=5.5这样二进制数101.1与十进制数5.5等值,这个例子告诉我们如何将一个给定的二进制数转换成等值的十进制数。如何将给定的十进制数转换为等值的二进制数?下面我们将说明如何将十进制数(仅是整数)转换为等值的二进制数,基本思想如下:1.这个数除以2。2.余数是位置20的二进制位的值。3.商除以2。4.余数是21位置的二进制位的值。5.商除以2。6.余数是22位置的二进制位的值。7.重复这个过程,直到不能再除,即商为0为止。二进制比十进制更适合于计算机,因为设计辨别二种状态(0和1)的电子设备比辨别十种状态(0~9)的电子设备容易得多。例如,开关接通代表l,开关断开代表0。在真正的计算机中,0表示为低电平,而l表示为高电平。1.2.2RAM随机存储器(Randomaccessmermory)是保存程序指令和程序执行过程中所操作数据的仓库。RAM分成若干单位(cell),每个单元有惟一的地址。通常,每个单元由4个字节(byte)组成,每字节由8位(bit)组成。每位既可以为开也可以为关,表示一个单独的二进制位。衡量RAM大小的标准是其包含的字节数。例如16Mb的RAM包含16×210=16,777,216字节。我们用术语“兆“(M),即106表示220的值,因为1千(K)=l03,接近于210=1024,而106=103×103≈210×210=220。如果RAM中每个单元有4字节,那么16M的RAM就有4,194,304个单元。1998年,典型的计算机有32M到64M的RAM。1984年生产的第1台苹果计算机只有128K(128×210=131,072字节)的RAM。1.2.3CPU中央处理器(centralprocessingunit,简称CPU)是计算机的大脑。CPU是执行程序指令的部件,它提取指令(存储在RAM中),执行指令。然后提取下一条指令,再执行,直到遇到停止指令。CPU包含少量的寄存器,寄存器是临时保存数据和指令的高速设备。CPU还包含算术逻辑单元(ALU),它执行诸如加法、减法这样的算术操作和诸如比较两个数的逻辑操作。CPU以其时钟速度为性能特征。例如,英特尔公司的Pentium200,其CPU时钟频率为200MHz。赫兹是一种频率单位,相当于每秒一个周期。周期是开或关二种状态之间的时间周期。因此200MHz相当于每秒钟200,000,000个周期。1997年最快的商用个人计算机大约是200MHz。但1998年初,许多商家已经开始出售300MHz的机器。此后仅6个月,即1998年中,顶级个人计算机已经是400MHz的机器了。千年刚刚开始的现在,733MHzCPU的电脑已经在广告和商店中出现。在近20年终CPU速度的提高确实惊人。1974年开始的PC革命中出现的Intel8080CPU其时钟速度不过是2MHz,而1995年的IntelPentiumPro-200的时钟速度应经达到200MHz。表1.1列出一些Intel处理器。表1.1Intel处理器列表=====================CPU发布日期时钟速度400411/15/7l0.108800804/0l/720.2001970s808004/01/742808806/01/7988028602/0l/82121980s80386SX06/l6/881680486DX04/10/8925Pentium03/22/9366PentiumPro11/0l/952001990sPentiumII05/01/91300PentitumIIXeon06/29/98400PentiumIII10/25/99733某些同种型号的CPU可能有不同的时钟脉冲速度。在这种情况下,本表只列出速度最快的CPU。有关IntelCPU更多的信息,可以访问和http://。1.2.4I/O设备输入/输出(I/O)设备允许用户与CPU之间通信,如键盘和鼠标这样的输入设备用来输入数据、程序和CPU命令,显示器和打印机这样的输出设备用来显示和打印信息。其他I/O设备包括扫描仪、条形码读出器、读卡机、数字摄像机以及乐器指令数字化接口(MIDl)设备。1.2.5存储设备诸如磁盘驱动器和磁带机这样的存储设备用来存储数据和程序。辅助存储设备称为“非易性存储器”,而RAM称为“易失性存储器”。易失性意味着当关闭设备电源后存储在设备中的数据将丢失。由于非易失性和比RAM更便宜,所以辅助存储器是永久存储大量数据理想的存储媒体。可是辅助存储器不能取代RAM,因为辅助存储器在数据访问(读出数据和写入数据)速度上大大慢于RAM。如今用于个人计算机最常见的存储设备是磁盘,磁盘有两种类型:硬盘和软盘。硬盘速度快、容量大,但通常不能移动,即硬盘永久连接到磁盘驱动器上。而软盘是可移动的,但是其速度远慢于硬盘,容量也远远小于硬盘。由于标准的软盘最多只能保存约1.44Mb,因此在当今动辄若干兆字节的图像和声音文件面前,其用途越来越少。硬盘可以存储数量巨