第1章背景知识.docx
《第1章背景知识.docx》由会员分享,可在线阅读,更多相关《第1章背景知识.docx(15页珍藏版)》请在冰豆网上搜索。
第1章背景知识
第1章背景知识
在未来几年里,互联网和计算机革命会带来极佳的就业机会和很有趣的挑战。
这些机会遍布在硬件、软件设计到市场形成的技术、以及企业活动的全部领域。
而挑战包括开发在各种不同类型计算机上运行的程序,以及开发成百上千行准确无误的代码(如:
放射疗法和网上拍卖系统)。
为了迎接这些大小挑战,大多数的计算机从业者都在使用面向对象设计的技术。
在本章中,介绍计算机和互联网的基本术语,以及面向对象设计的概念。
也介绍Java,一个已经在互联网的发展中扮演了重要角色的面向对象编程语言。
例如,使用Java,可以开发能提供动态图形和安全通信的、基于网络交互式的应用程序。
Java提供了广泛的可移植程序资源,使许多不同类型的应用都得以快速发展(比如:
多媒体,电子商务,无线通信)。
在本章末尾,安排了问题解决办法的讨论,以帮助读者建立软件解决的方案。
本章内容
•介绍硬件和软件术语。
•介绍高级编程语言。
•介绍Java编程、编译和运行。
•介绍面向对象设计的基本概念。
•提供有用的问题解决策略。
1.1引言
传统上,编程课本都是由一个显示“Hello,World.”的程序开始的。
这样做的原因是这个程序很简单,便于解释,而且其功能也值得讨论。
本书第一个Java程序和这个不同。
//作者:
J.P.Cohoon与J.W.Davidson
//目的:
在一个控制窗口中显示一段引用语
publicclassDisplayForecast{
//main():
应用程序入口
publicstaticvoidmain(String[]args){
System.out.print("Ithinkthereisaworldmarketfor");
System.out.println("maybefivecomputers.");
System.out.println("ThomasWatson,IBM,1943.");
}
}
这里取代有效的“Hello,World.”,程序引用了现在看来有些幽默的、一位IBM前任总裁在1942年的预言。
程序的输出如下:
Ithinkthereisaworldmarketformaybefivecomputers.
ThomasWatson,IBM,1943.
这体现了本书和典型Java教科书之间的差别,因为本书目标不仅是介绍Java语言,还想教如何有效的编程,而且,用一种充满趣味的方式来教。
有了明确的动机,学习起来会更容易。
在示例设计上考虑彼此的相关性,和各种类型读者的要求。
事实上,有位评论家提出警告,认为例子有时候过分注重趣味了。
有效的编程需要多种技能和对计算的全面了解。
⏹因为一个程序就是一组可在计算机上运行的指令,所以对计算机结构的基本了解很重要。
头脑中有一个计算机执行指令方式的模型,就可以更好地、形象化地想象软件操作,以及在设计新软件时需要哪些资源。
⏹由Web激活的软件,正迅速成为主导性的软件范例,因此,熟悉网络基础很必要。
⏹在开发软件时,标准的软件工程原则往往随之而至。
这些原则应用的基本方法是面向对象编程方法学。
这个重要方法学启发人们,按客观世界的方式去设想软件模型和交互。
⏹最后,也可能是最重要的,一定要会解决问题。
程序的设计、实施和测试就是用计算机系统去解决问题。
如果连编程者都不知道应该怎么做,就无法让计算机去完成任何事情。
为了成为一个能干的软件设计者,必需去理解计算机基本结构、软件、网络、软件工程实践和解决问题的基本方法。
因此,在分析任何程序之前,先学习以上提到的每个概念。
在以后的章节中,用Java语言提出、演示以及解释开发程序设计时,还将会对这些概念扩展。
1.2计算机结构
大多数计算机有四个主要部件:
中央处理单元、内存、输入设备和输出设备。
中央处理单元(CPU)是计算机的大脑,它是计算机进行计算和做出决定的地方。
内存是CPU处理的数据和软件所存放的地方。
实际上,它是CPU的基本工作空间和草稿本。
CPU不但从内存中提取信息,而且把信息暂时存放在内存中。
内存多表示计算机可以运行更大的应用软件,也能更快地完成任务。
通常,输入设备和输出设备用在计算机与用户之间,或计算机与其他计算机之间通信信息。
例如,键盘和鼠标是用户发请求的输入设备,而监控器和打印机是显示信息的输出设备。
数字计算机使用二进制系统,而不是十进制系统,来表达数字。
二进制系统只有两个数字:
0和1。
一个二进制的数字被称为一位(bit)。
采用二进制系统,是因为计算机的基本构造单元是开关,很像人们熟悉的电灯开/关。
开关的状态可用相应的数字的值0或1来表示。
在早期的计算机中,这些开关是由机械的继电器实现,结果机器庞大,占据了整个房间。
还需要专用的动力和冷却。
现在的计算机,开关是极小的晶体管。
因此,整个计算机可以装在单个硅芯片上。
这些芯片就叫做微处理器。
Intel的奔腾4微处理器,只占略大于1平方英寸的面积上,含有大约5500万个晶体管,如图1.1所示。
图1.1Intel奔腾4微处理器
二进制系统的计算原则与十进制系统的计算原则一样,都是与位有关的系统,就是说,一个数字的位显示了它对应的值。
举一个例子:
在十进制数4506中,5在百位上,因此它显示的值就是500。
从右边读这个数,每一位表示递增10倍。
这样,4506的值可以表达为:
4×103+5×102+0×101+6×100
二进制的工作基理相同,只是每一位表示递增2倍。
比如,二进制数1101代表十进制数13。
在谈论计算机存储时,存储大小用字节(byte)为单位,一个字节是8位(bit)。
现在来讨论科学家们所描述计算机的速度和存储容量的其他术语。
使用这些术语,来分析一台个人计算机的广告,以继续对计算机结构的介绍(参见图1.2)。
图1.2一个典型的个人计算机广告
1.2.1计算机的部件
说明一台计算机的速度时,计算机制造商有时会报告机器完成一个基本操作所需的时间。
在这些情况,用的时间单位有千分之一、百万分之一、十亿分之一和万亿分之一秒(见表1.1最常用的测量单位标准)。
现在计算机做大多数算术运算只需数ps(微微秒),预计在不远的将来,计算机能够在数fs(毫微微秒)内完成操作。
表1.1常用2的幂及其缩写
秒的分数
值
缩写
10−3
毫秒(millisecond,ms)
10−6
微秒(microsecond,µs)
10−9
毫微秒(nanosecond,ns)
10−12
微微秒(picosecond,ps)
10−15
毫微微秒(femtosecond,fs)
计算机制造商也用时钟速率(频率)来报告计算机的速度。
时钟速率表明计算机在一秒钟内能完成多少次操作,通常用赫兹(hertz)来表达(每秒的循环数)。
举个例子:
一台计算机的时钟速率是20亿赫兹,它可以每500ps(也就是:
1÷200亿秒)完成一次操作。
在表示赫兹值的时候,科学家们用表1.2中的前缀。
对上例来说,把计算机速度写成2GHz(念作“2gigahertz”)。
一般来说,时钟速率越高,表示计算机速度越快。
表1.2常用10的幂和它们的缩写
值
缩写
1000
k(kilo)
1000000
M(mega)
1000000000
G(giga)
1000000000000
T(tera)
关于容量或大小方面,计算机科学家们更喜欢用2的幂来计算。
因为计算机用二进制系统,用2的幂来计算很方便,表1.3显示了常用的2的幂。
按照表中所示,210的缩写为K,K是从词干“kilo”而来。
使用前缀kilo是因为1024近似于1000。
类似地,前缀mega用于220,因为其值(1 048 576)近似于1 000 000。
当使用这些单位来表明机器的存储容量时,实际上意味着精确的2的幂。
举例来说,一台机器有128兆字节内存就有128×220个字节,或134 217 728个字节的内存。
使用前缀表示不同的意思,有时候会带来混淆,但是,从上下文能告诉使用的是二进制还是十进制。
表1.3常用的2的幂及其缩写
2的幂
值
缩写
210
1024
K(kilo)
220
1048576
M(mega)
230
1073741824
G(giga)
240
1099511627776
T(tera)
1.2.2购买个人计算机
现在,已为查阅一个典型的个人计算机广告做好准备,大多数广告会列出计算机主要部件的规格。
图1.2包含了一个典型的个人计算机广告的规格。
广告的第1行描述计算机的微处理器。
这台计算机是有3.06GHz的Intel奔腾4微处理器,也就是说,这个微处理器每秒完成30.6亿次操作(也就是每次操作用了327ps)。
奔腾4微处理器有一个512千字节的高速缓冲存储器,高速缓冲存储器是用来存储当前用过和立即要用的信息和指令。
广告的第2行说明内存的大小和型号。
内存是CPU执行时存放数据和软件的地方。
这台机器的内存有512兆字节,对运行Windows操作系统来说足够。
一般说,内存越大越好,但对于普通用户,内存大于1GB,性能价格比就不合算了。
具体到这台计算机,它有一个DDRSDRAM内存。
DDR是doubledatarate的首字母缩写。
它意味着存储在DDR内存中的数据,会以两倍于非DDR内存的速率提供给CPU。
两倍数据速率的取得与跳绳游戏“doubledutch”相似。
取代一个时钟信号(也就是一条绳子),它采用了两个时钟信号(也就是两条绳子)来加倍数据传输的速率(也就是跳绳者必须以两倍快的速度跳)。
SDRAM代表synchronousdynamicrandomaccessmemory的首字母缩写。
SDRAM中DRAM指出存储二进制信息的技术类型。
在DRAM内存中,每一位数的1或0存储在电容器中,电容器是保持充电的装置。
如果该装置充了电,就代表二进制为1;如果没带电,就代表0。
在SDRAM中,synchronous表示内存的工作速度与CPU优化的时钟速率一致。
注意还有许多其他类型的内存。
有的快一些,有的慢一些。
广告的第3行给出了机器硬盘的说明(参见图1.3硬盘照片)。
硬盘是数据文件和软件存放的地方。
硬盘越大,可安装的软件就越多,可存储的数据也越多(如:
照片和音乐)。
广告说明硬盘的容量是200GB,而且硬盘与系统的连接使用UATA-100接口(ultra-advancedtechnologyattachment)。
该接口定义了数据从硬盘到CPU以及反向的速度。
UATA-100支持传输速率100MBps。
硬盘的其他参数是硬盘性能的进一步显示。
从旋转速率(7200RPM)可看出硬盘转得多快。
因为在数据被扫描以前,必须等待数据转到硬盘的读/写头下面,旋转速度影响读数据的时间,一个快的旋转速率对应短的延迟。
便宜的硬盘转速为5400RPM,昂贵的硬盘转速可以是10000RPM。
数据是通过一系列在硬盘上,能移动的读/写头写在硬盘上。
数据被写在称为磁道的同心圆上。
硬盘的另一个重要参数是寻道时间,寻道时间是头移动到访问磁道的平均时间。
广告说明,这台硬盘移动头到具体磁道的时间是9.0毫秒。
这个时间与内存的读写时间比起来是很长,从这个事实可以推断,硬盘读写要比内存读写慢得多。
广告第4行指出一个17英寸的液晶显示器(LCD)。
这种显示器通常被称为平板显示器(见图1.4)。
这些显示器显示图形的技术,与在一些手表和计算器中的一样。
另一种显示技术用了CRT(阴极射线管),大多数电视都用CRT技术。
与CRT显示器比较,LCD面板很轻,占用空间小。
现在LCDs比CTRs贵很多。
但是,由于厂家正在由CRTs向LCDs转产,LCD显示屏的价格正在下降。
图1.3硬盘驱动内部图1.4数字液晶显示器(Hewlett-Packard照片)
显示器最重要的两个特性是屏幕大小和分辨率。
通常显示器的可视面积从14英寸到24英寸。
分辨率是屏幕横向和纵向一英寸内,可显示像素点的数目。
每一个像素点代表“图形元素”。
分辨率越高,屏幕上的图像就越清晰。
大多数显示器支持1024×768的分辨率。
高端的显示器还会支持更高的分辨率,如1280×1024和1920×1200的分辨率。
显示的图像是用图形卡送到显示器上。
为显示高分辨率的图像,需要增加可观的资源,图形卡带有为显示图像而特殊设计的微处理器。
为区别于CPUs,这些微处理器常常称为图形处理单元GPU(graphicprocessingunits)。
广告第5行说明的GeForce4就是指GPU的类型,是由NVIDIA公司制造。
其他更流行的有ATITechnologies和Matrox制造的图形卡。
图形卡的一个关键特性是内存大小,图形卡内存的总量决定了可显示图像的分辨率、有多少种颜色可显示、屏幕的更新速度。
低端的图形卡有16~32MB内存,而高端的图形卡有128MB内存。
广告中所列的图形卡有64MB内存,可以很好地完成大多数应用,包括图形很强化的游戏。
广告中第6行和第7行指明有DVD驱动器和CD-RW驱动器。
DVD驱动器可以在计算机上播放DVD电影。
这个DVD驱动器不支持制作DVD,制作DVD的驱动器在市场上可以买到。
DVD和CD-RW的一个关键参数是数据读写的速度。
DVD和CD-RW驱动器的速度是第一次驱动器速度的倍数。
广告中所说的DVD驱动器的速率是16x,也就是说它可以以16倍第一次驱动器的速度读出。
CD-RW中的RW说明驱动器可以在CD上读写。
这种驱动器很流行,因为它们使消费者可以刻写自己的音乐CD,这也是保存文件的好方法。
一张CD可以存放650MB数据或几小时的音乐。
对CD-RW前的48x/24x/48x说明:
驱动器可以以48倍的速度往CD-R介质中写,以24倍的速度往CD-RW介质中写,以48倍的速度读盘。
(CD-R介质只能写一次,CD-RW介质可反复写。
)
广告第8行指明有一个56K的调制解调器modem(modulator/demodulator的缩写),使计算机可通过电话线与互联网连接。
56K显示了调制解调器传送数据的速率,56K是每秒钟可传送56千位。
但是,大多数56K的调制解调器达不到这个最高速率。
首先,大多数电话网络的最高速率,限制在每秒53千位。
其次,实际的速率依赖于其他一些因素,如电话线的线路状况(出现静电噪声或者干扰),以及与电话总公司设备的距离等。
广告第9行给出安装的操作系统,版本是WindowsXP家庭版。
WindowsXP有两个主要的变种:
家庭版和专业版。
专业版有附加特性:
用以保护有价值数据的文件系统加密、用户可以通过Internet访问远程计算机、移动计算机可连接到文件服务器的离线文件和文件夹。
操作系统
计算机还有其他的操作系统。
一个越来越流行的操作系统是Linux。
Linux常常被研究人员采用,而且用于致力于高端应用的计算机系统,如:
Web服务器,网络的网关和文件服务器。
Linux流行的一个主要原因是它的源代码免费公开。
通过访问源代码,Linux可以被改变以适于应用程序的具体需要。
有许多不同版本的Linux可用,最广泛使用的是RedHatLinux。
在互联网上去下载某个版本的Linux,要求有快速的网络连接。
因为Linux很大,使用宽带连接,下载也要几个小时。
广告最后一条说明有一个高速网卡。
如果,想在家里建一个自己的局域网,或使用与互联网的宽带连接,高速的网卡是很有用的。
宽带是通过电缆调制解调器或电话公司提供的数字用户线路(DSL)实现的高速连接。
不同于低速的电话调制解调器连接,电缆调制解调器和DSL服务提供的传输速率,可达到每秒钟几兆字节。
具体到广告上这张网卡,它可以每秒钟发送和接收10MB或100MB的数据。
不论哪一个速度,对家庭网络都已足够。
如果这台机器用于网络中,为其他机器提供服务(如:
文件存储和备份),值得去用更高的传输速率。
鉴于计算机网络,特别是互联网是如此重要,现在就来了解一下有关的网络知识。
1.3互联网计算
互联网的诞生和发展,从根本上改变了社会。
把互联网的影响与Gutenburg印刷术的影响相比较很有道理。
(译注:
GutenburgJohannes是15世纪德国活版印刷术发明人。
)
活版印刷术使信息的传播在价格上更易被人接受。
因此,信息可以被一个更广大的人群所接收。
结果,对那些统治者来说,限制信息接触就更困难。
信息接触的扩大推动了原有社会结构的根本变革。
互联网有相似的效果。
它使得大量信息可以很便宜地被一批巨大、并仍不断增长的人群所获得。
同样,互联网使统治者很难控制哪些信息可被人们访问和得到。
从社会基础上看,许多专家相信,这次信息的量变也会飞跃成又一次的社会结构的质变。
那么要问,什么是互联网,它又是怎样发展起来的?
互联网是一个支持计算机之间信息快速传递的庞大基础设施。
互联网由数千个的地方、区域、国家和国际的网络连接在一起,它是网络的网络。
因为互联网跨越国界,没有一个实体真正控制整个互联网。
但是,有一些组织负责互联网开发技术方面和制定标准。
互联网的起源,可追溯到20世纪60年代早期,一个美国政府的技术发展机构:
高级项目研究代理ARPA(AdvancedResearchProjectsAgency),在美国全国范围内资助工业界和大学实验室的研究。
为让实验室的科学家共享研究的成果资源,提高工作效率,把ARPA支持的不同实验室的计算机连成网络。
经过几年的开发,1969年ARPA网可以运行了。
第一个网络使四所大学的计算机相连(3所大学在加利福尼亚,1所在犹他)。
多年以来,ARPA网在连接的站点和所支持的应用数量上都不断增加。
1971年开发了ARPA网的第一个电子邮件应用。
还开发了许多用于文件传输和研究者远程运行应用软件的工具。
认识到计算机连网的价值后,在1986年,美国国家科学基金会(NationalScienceFoundation)建立了NSFNet。
(国家科学基金会是美国政府资助基础科学研究的代理机构。
)NSFNet是一个由大西洋到太平洋两岸的大学院校、研究实验室连接在一起的高速传输线。
最后,NSFNet将许多内部的网络连在一起,于是互联网这个词就悄悄进入了词典。
1990年,TimVerners-Lee开发了WorldWideWeb。
这时候,互联网的规模和使用开始成指数增长。
1.3.1网络
网络由一个连接计算机的方法,和一套计算机之间交换信息的规则组成。
连接的方法可以是用56K调制解调器的标准电话线,DSL连接,或使用网卡的连接。
图1.5显示了用两台计算机连成的一个家庭网络。
图1.5家庭网络与互联网连接
因为互联网是网络的网络,必须有一些机制把网络连接在一起。
连接是利用一种特殊计算机来完成,该特殊计算机称为路由器(router)。
路由器把局部的、或区域的网络连接到一条高速传输线上,这条传输线称为主干线(backbone)。
可以把主干线当作高速公路,车辆可以快速地从一个区域到另一个区域(上限为每秒10Gb)。
图1.6是一张普通互联网服务供应商的美国主干线路图。
图1.6美国主干网
路由器的工作是直接把信息互联到正确目的地。
路由器就像铁路的调度室。
调度决定列车(信息包)从哪一条铁轨(具体的网络)到达目的地。
由于路由器要处理的信息量巨大,路由器通常是专为处理网络信息而设计的计算机。
为了使计算机可以在网络上交流,必须有一套规则去管理数据的传送。
没有一套规则协议,计算机就不能有效地通信。
举个例子:
人们采用双向无线电通信谈话时,当一个人讲话完毕后,说“完毕(Over)”。
“完毕”是轮到另一个人讲话的信号。
讲话者想终止谈话时,就说“结束(Overandout)”。
这个通信的规则就称为通信协议。
互联网发展过程中的一个重要内容,就是开发有效的协议。
最重要的互联网协议是传输控制协议/网络协议TCP/IP(TransmissionControlProtocol/InternetProtocol)。
它们管理信息包在互联网中的发送。
TCP规定把信息分割成信息包,以及在信息送到目的地时,把信息包组合还原成原来的信息。
IP处理信息包的地址部分,保证信息能送到正确的目的地。
还有其他专门的协议。
这些协议大部分都是用TCP/IP实施。
互联网上常用的一些其他协议包括:
⏹文件传输协议FTP(FileTransferProtocol)指定计算机之间如何交换文件。
⏹简单邮件传输协议SMTP(SimpleMailTransferProtocol)指定电子邮件在网络中传递。
⏹邮政协议POP3(Postofficeprotocol)管理电子邮件在邮件阅读器(如:
Outlook和NetscapeCommunicator)和网络服务供应商(ISP)之间交换。
另一个网络信息访问协议IMAP(InternetMessageAccessprotocol)负责个人计算机与网络服务供应商之间电子邮件通信。
⏹超文本传输协议HTTP(HypertextTransferprotocol)是在WorldWideWeb(WWW)上,交换文件(文本、图像、声音、视频和其他多媒体文件)的一套规则。
指定点击文档中链接的相关活动。
⏹加密套接字协议层SSL(SecureSocketsLayer)是指定信息送到互联网之前,对信息加密的协议,在电子商务中广泛应用。
凡是用https开头的WWW网页地址都使用了SSL。
现在把注意力转到计算机系统的软件组成、以及Java为什么对未来软件的发展是如此重要。
1.4软件和Java语言
在互联网中,需要意识到的重要问题之一,是许多不同类型的计算机连接在网络上。
个人计算机、个人数字助理、移动电话、工作站和连接这些设备的主机——大型计算机。
这就要问,怎样在互联网中,开发出能在任何类型的计算机上运行的软件?
解决这个问题是设计Java程序语言的关键之一。
为理解这一问题和Java对网络计算的重要性,本节将讨论一个Java程序如何在一台连网的计算机上运行。
1.4.1编程语言
计算机本身不会做任何有用的事,必须有一个程序来指挥计算机完成指定的任务。
一个程序是告诉计算机该做什么的一个指令序列。
当计算机完成程序的指令时,就说程序被执行。
用语言写好的程序是专门为计算机发布命令而设计,把这种语言称为编程语言。
最原始的编程语言是机器语言。
一个机器语言程序或目标代码是计算机可以直接执行的程序。
每一条目标代码指令,对应于机器的一个基本操作。
一台机器的指令集是CPU类型惟一的二进制代码集。
因此,不同计算机用不同的机器语言。
Intel奔腾处理器懂得的机器语言,与IBMPowerPC处理器懂得的机器语言很不相同。
用机器语言编程的一个主要问题是非常枯燥,而且,直接用二进制代码编写很容易出错。
汇编语言编程略改进一点。
汇编语言是对机器语言指令编码符号化的语言。
如机器语言的程序员一样,汇编语言程序员也要对机器的基本操作有全面的理解。
此外,机器操作太原始,即使是很简单的任务,汇编语言程序也会很长而复杂。
多年来,计算机科学家在开发编程语言上,投入大量努力,为的是让人们可以用一种更自然的方式编写程序。
这种编程语言被称为高级编程语言。
形容词“高级”显示了这种编程语言比汇编语言级别高。
高级语言的区别特征是编程不需要计算机的具体知识。
另一个特征是高级编程语言所使用的词汇和结构,与问题求解的模型接近。
举个例子,用于解决科学和工程问题的FORTRAN语言就采用了数学表示法。
实际上,FORTRAN这个名字,就是从短语“公式转换”(formulatrans