《语言程序设计资料:Java大学教程.docx》由会员分享,可在线阅读,更多相关《语言程序设计资料:Java大学教程.docx(140页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1.3.3下载JDK搭建Java平台1 . Java平台Java平台由Java应用编程接口(API)和Java虚拟机(JVM)构成,如图1-6所示。 这个平台构成了 Java在不同计算机系统中编译和运行的环境。Java程序Java APIsJava平台(安装JDK)Java虚拟机计算机系统图1-6 Java平台与计算机系统Java应用编程接口是已编译的可在任何Java程序中使用的代码库(即Java类库)。它们 作为可定制的现成功能可以随时添加到我们自己的Java程序中,以节约编程时间,避免重复劳动。Java程序必须由由Java虚拟机来运行。也就是说,Java程序并不是在本机操作系统上 直接运行
2、,而是由JVM向本机操作系统解释执行。所以,没有安装JVM的计算机系统是无 法运行Java程序的。2 .下载JDK为了搭建Java平台,需要下载和安装Java软件开发工具箱(Java Development Kit, JDK), 并设置Java编译和运行环境。JDK包含了所有编写、运行Java程序所需要的工具:Java基本组件、库、Java编译器、Java解释器、Java applet浏览器,以及一些用于开发Java应用程序的程序等。其核心JavaAPI是些预定义的类库,开发人员需要用这些类来访问Java语言的功能。JavaAPl包括一些重 要的语言结构以及基本图形、网络和文件I/O。作为JD
3、K实用程序,工具库中有7种主要程 序:, Javac Java编译器,将Java源代码转换成字节码。 Java Java解释器,直接从类文件执行Java应用程序字节代码。, Appletviewer小程序浏览器,种执行HTML文件上的Java小程序的Java浏览 器。, Javadoc根据Java源码及说明语句生成HTML文档。 Jdb Java调试器,可以逐行执行程序,设置断点和检查变量。 Javah产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的 头文件。 Javap Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代 码的含义。Sun公司为Sola
4、ris, LinuX和Windows提供了 Java 2标准版(J2SE)最新、最完全的版 本,。本书使用的 JDK 是 J2SE Development Kit 5.0Update2(即 JDK1.5.0_02),读者可以到 以下官方网站免费下载:http:/J 2se/downloads/index.html在这个网站,读者还可以阅读到JDK在不同平台上的安装指南。JDK在Windows中的 安装界面如图1-7所示。图1-7在Windows中JDK的安装界面安装完JDK后,我们可以查看到如图1-8所示的文件目录结构。在进行Java开发时,I本书写作时的Java 2标准版JDK最新版本是1.
5、5.0_02我们可能偶尔会察看一下这些被安装的文件,寻找我们需要的资源。注意,根据所安装的 JDK版本不同,该目录结构可能会有一些变化。编泽器及些工具(这里以可执行文件为主)演示程序用于本地方法的文件Java运行时环境文件库文件些示例程序库源文件的各个子目录 (通过src.zip解压缩生成)图1-8 JDK的安装后的目录结构JDK发布的库源文件压缩在src.zip中,如果要看源代码,必须首先解压该文件。src目 录包含了 Java库公开部分的源代码。当对Java熟悉到定程度的时候,会发现要想知道更 多的Java AP!内容就得去深入研究Java的源代码了。例如,如果对System类的内部工作机
6、 制感到好奇,就可以到src/java/lang/System.java源代码中看个究竟,了解那些库函数到底是 如何工作的。3 .设置路径安装完JDK后,我们还需要进步设置路径,即把jdk/bin目录加入到执行路径中,该 路径是操作系统寻找本地Java运行坏境的目录列表。在不同的操作系统上,该步骤也各不 相同。在Windows 95/98/ME中,需要在AUTOEXEC.BAT文件末尾添加以下一行代码,并重 启操作系统:SET PATH=c:jdkbin;%PATH%在Windows NT/2000/XP中,打开控制面板,选择系统,环境变量,在用户变量窗口中 找到PATH变量,然后在路径的开头
7、添加jdkbin目录,使用分号把新加的条目和以前的分 开,如下所示:C:jdkbin;(其它条目)保存设置。并通过下面的步骤测试路径设置是否正确:启动个shell窗,具体方法取决于你的操作系统。输入下面一行命令:java -version然后按回车键,应该能够看到如下输出,如图1-9所示:Java version XXXJava(TM) 2 Runtime Environment,Standard Edition (builder XXX)Java HotSpot(TM) Client VM(builder XXX)图1-9测试Java版本,检查路径设置是否正确如果得到的输出的是诸如:Java
8、: command not found Bad command or filename Error: could not find java.dll Error: could not find Java 2 Runtime Environment.之类的信息,就需要返回去检查安装过程是否有问题了。1.4 Java程序的编写、编译和运行对于简单的Java程序,我们可以通过任何文本编辑器来编写代码,然后用命令行工具进行编译和运行。但是这样使用JDK比较麻烦。我们还可以考虑使用集成了 JDK的文本编 辑器来编写、编译和运行简单的Java程序,比如TextPad、JEdit或是别的些工具。对于大型项目
9、开发,我们可以使用功能强大的集成开发环境(IDE),比如免费的Eclipse; 或是其他商业产品,如:JBuikler。下面,我们以一个最简的Java程序HelioWorld来说明Java程序是如何编写、编译和运 行的。1.4.1 使用命令行工具打开Windows的记事本,新建一个文本文件。编写如示例程序1-2所示的Java程序代 码。并将这段代码保存为名为C:/MyJava/HelloWorld.java的文件。示例程序12最简单的Java程序HelioWorld1:/ The First Java Program2:3 : public class HelloWorld ( 4:publi
10、c static void main(String args)5:System.out.printIn(HHello World! M);6:)7:有两种方法可以编译和执行Java程序:使用命令行或者其他集成了 JDK的程序及!DE, 我们首先使用最基本的命令行方法。如果是Windows 2000/XP,通过选择菜单:开始所有程序-附件-命令提示符,打开 一个命令提示符窗口。如果是Windows 98/ME.则打开一个MS-DOS窗口。然后进入C:/MyJava目录,输入如下命令:javac HelloWorld.javajava HelloWorld屏幕上应该出现如图!-10所示的信息。此时
11、表明我们已经成功编译和运行了第一个简 单的Java程序!通过我们刚的操作,我们可以看到javac程序作为Java的编译器把HelloWorld.java文件编译成HelloWorld.class文件。javac程序作为Java解释器,则负责解释执行编译器生成 到class文件中的字节码。HelloWorld程序非常简单。它只是在命令提示符窗口(通常称为控制台)上输出一条问 候世界的消息“Hello World! 这是所有程序设计语言用来第一次试写程序的惯例。这段程 序代码的工作机制我们将在后续章节中讲述。这是我们保存的源代码文件 C:/MyJava/HelloWorld.java编译Hello
12、World程序运行HelloWorld程序这是编译后得到的字节码文 件:HelloWorld.class图1-10使用命令行工具编译和运行Java程序使用命令行工具手工输入命令时一定要特别仔细。任何输入错误都可能导致无法出现图!-10所示的正确信息。例如输入 javacjavaHelloWorld或易犯错误HelloWorld.java都是常见的错误。另外,JDK路径设置不对也会导致令人沮 丧的结果。1.4.2使用Java编辑器TextPad使用像JEdit和TextPad这样的Java编辑器,不但可以编写Java程序,还可以在编辑器 内部编译和执行代码,使其成为个轻量级的Java 开发环境。
13、从而避免了繁琐的和易出错 的命令行操作。TextPad是个集成了 JDK的Java程序编辑器,是Windows上深受Java程序员喜欢的 一个优秀的共享文本编辑器。TextPad容易使用,方便快捷,适合初学者使用。我们用其开 发和测试了本书中的大部分程序。该软件可以到以下网站免费下载使用:在TextPad中编辑HelloWorld.java程序如图!-11所示。然后通过菜单项:Tools-CompileJava或者使用快捷键CTRL+1编译程序。如果程序有问题导致编译失败,编译错误信息会 出现在个Command Results窗口中,如图1-12所示。实际编程中,即使是熟练的程序员,程序一次性
14、编译成功的也不多。编译后程序如果出现错误,根据Command Results窗口中的出错信息可以帮助我们找出程序中的bug,对程序 进行重新修改,直到编译后不再出现错误为止。假设在我们刚写HelloWorld代码时,第5行不慎漏掉了一个引号:System.out.printIn(nHello World!);此时程序编译将无法成功,Command Results窗口中出错信息如图1-12所示。鼠标双键该错误信息或者按回车键,系统会自动切换到HelloWorld.java程序中的相关代码行,以便我们更正错误。图 1-11 在 TextPad 中编写 HelloWorld.java 程序图1-12
15、当编译程序无法成功时,Command Results窗口中出现编译错误提示信息一旦编译通过,可以通过菜单项:Tools-Run Java Application或者使用快捷键CTRL+2 编译程序运行这个Java程序。通常在个复杂的程序能够运行起来后还要进行大量的调试和测试,具体方法我们后面 专门章节会详细介绍。1.4.3使用集成开发环境NetBeans IDE高级语言及其编译器通常与一些必要的程序开发工具集成在起,形成所谓的集成开发 环境(IDE)。在Java的大型项目开发中,IDE中就可以完成程序设计、资源重用、代码编 译、调试测试等系列任务。尤其是图形用户界面(GUI)技术出现后,高级语
16、言开发环境 的界面更加友好,使程序设计进入到可视化编程时代。目前流行的Java集成开发环境有!0多种,本教材选用的是获得Developer网站2004年度开源工具大奖的NetBeans IDE4,主要考虑到以下理由: NetBeans IDE 4是开放源码的Java集成开发环境,读者可以免费下载使用。 NetBeans IDE 4是Sun公司最新发布的,也是支持新的J2SE平台5.0版的第一个 IDEo Sun公司将该软件和J2SE 5.0打包在起,两者可以并下载和安装,十分 方便。 NetBeans IDE4主要针对普通的Java编程,而不是复杂的企业级应用,简单好用。 国际版还提供了简体中
17、文界面。 NetBeans IDE 4还是第一个将其项目系统整个建立在Apache Ant (基于Java的种 编译工具)上的IDE。调试、测试和运行都很方便。下面我们将介绍NetBeans IDE 4基本使用方法。通过学习,读者可以尝试应用NetBeans IDE4平台进行Java程序的编辑、调试及运行。1 .下载和安装NetBeans IDE 4.! 和J2SE 5.0 打包在起的Windows 版下载文件是jdk-1_5_0_06-nb-4_1 -win-ml.exe,大小约为 102MB。官方下载网址是: 2se/1.5.O/download-netbeans.html要在Micros
18、oft Windows计算机上安装NetBeans IDE),最好使用自解压的安装程序, 并请执行以下步骤:1、在下载安装程序文件后,双击安装程序的图标以启动安装向导。2、指定NetBeans IDE的安装目录。3、指定将运行NetBeans IDE 的JRE (Java运行环境,如果已有JDK则不必另外下载 了)。安装成功后,双击桌面上的“NetBeans IDE”图标,或者从“开始”菜单中,选择“NetBeans IDE 4-NetBeans IDE”启动NetBeans IDE,进入如图!-13所示的中文界面。图1-13启动NetBeans IDE后进入的界面2 .创建Java项目项目的
19、创建是使用NetBeans IDE4编写程序的第一步,个项目由Java源文件及其相 关项目文件组成,包括属于类路径的对象,以及生成和运行项目的方式等等。相关项目文件, 诸如:控制生成和运行设置的Ant生成脚本和属性文件,以及将Ant目标映射到IDE命令 的project.xml文件等,都必须存储在项目文件夹中,由开发环境进行管理。但用户的Java 源文件可以不位于项目文件夹中。如果项目己经存在,可以通过工具条上的打开项目按钮或主菜单中的文件一打开项目菜单打开,否则必须新创建。新建项目具体步骤如下:1)在NetBeans IDE4中,通过工具条上的新建项目按钮或主菜单中选择菜单项: “文件-新建
20、项目,系统将弹出新建项目向导。要创建一个Java常规项目,在如图1-14 所示的向导类别中选择其中的“常规”,以及项目栏的“Java应用程序”,然后单击下个 按钮,进入下步。2)在接下来如图!-15所示的对话框中设置项目名称和文件保存位置。输入所要编写 的项目名称,将来生成的项目文件夹与此同名。我们在“项目名称栏输入的是JBookChlo 点击浏览按钮设置项目文件夹及相关文件的保存位置。3)将“设置为主项目”和“创建主类”复选框保留选中状态。输入jbookchl.HelloWorld 作为主类。然后单击完成按钮完成项目向导。4)如果要选择其他项目类型,可以在如图!-14所示的向导中选择。这里有
21、多种项目 可供选择。图114选择Java项目创建向导图1-15设置项目名称和文件保存位置3 .创建和编辑Java程序Java是面向对象的语言,在Java程序中一切都是对象,所有的Java程序都是从创建Java 类开始的。前面我们在创建项目时已经选中“设置为主项目和“创建主类”的复选框,并输入 jbookchl.HelloWorld作为主类。所以向导会自动生成一个Java程序框架的代码,其中创建 了一个HelloWorld类,并将这个类放在jbookch!包中,如图1-16所示。jbookchi包节点HelloWorld 类节点程序代码框架图1-16编辑窗口中自动生成的程序代码框架如果要在已有的
22、项目中创建一个Java类,我们可以通过工具条上的新建文件按钮或主菜单中选择菜单项:“文件,新建文件系统将弹出新建文件向导。如图1-17所示。图1-17新建文件向导图118新建Java类对话框选中类别框中的“Java类”,并在文件类型框中选择“Java类”,如果要创建带程序运行 的入口方法main方法的主类也可以选择“Java主类”。然后单击下个按钮,将会出现如如图!-18所示的新建Java类对话框。也可以在主界面上的项目视图中,鼠标右键点击jbookchl包节点,通过如图图!-19所示的 上下文菜单项:“新建-Java类”,来调出如图1-18所示的新建Java类对话框。图19使用上下文菜单项为
23、了编写如示例程序1-2所示的HelloWorld程序,接下来,我们只要在main方法中填 入以下一段代码,就可以实现前面那个问候世界的简单Java程序。System, out. print In (* Hello World! H;NetBeans IDE 4的源代码编辑器有很多强大的功能,可以使编写代码更简单、更快捷的 功能,如:输入代码提示功能、代码重构功能、自动生成一些代码段、代码完成、突出显示 编译错误、突出显示代码元素的语法以及代码格式化和搜索功能。NetBeans IDE4的源代码编辑器在我们输入代码的过程中能够不断提示可能匹配的类、 方法和变量等的名称,并通过个列表来提供选择,帮
24、助自动完成表达式,如图!-20所示。 这种提示甚至还包含个Javadoc预览窗口,其中显示代码完成框中的当前选择的Javadoc 文档(如果存在),这样极大地方便了对Java类库不太熟悉的初学者。图1-20代码提示功能为了节约时间,对于常用的代码我们可以输入简单的缩写,然后按空格键,使其展开为 符合要求的完整代码。例如,如果输入sout并按空格键,则它将展开为System.out.println()o 要获取系统缺省缩写的完整列表,请在帮助菜单中选择“快捷键卡进行查看。为了使程序代码易于更改或更易于添加新功能,或者为了降低代码复杂性,以便于理解 NetBeansIDE4还提供了代码重构的功能。
25、简单地讲,所谓重构就是使用很小的变换进行代 码改进,其结果不会更改任何程序行为。NetBeansIDE4提供的代码重构包括:查找使用实 例、移动、重命名、封装字段、更改方法参数以及撤消重构。NetBeansIDE4在编写代码时可以自动将代码格式化。无论你的代码格式如何糟糕,只 要使用Ctrl-Shift-F,就可以自动重新格式化整个文件的代码,使其规范、漂亮。如果我们不慎敲错了代码,此时该程序行左边会立即显示个带X的红色警示图形。 鼠标点击该图形,立即可以得到个错误修正建议,帮助我们改正程序。借助NetBeans IDE 4编辑器的这项功能,可以在代码编辑阶段就发现和修正很多错误,不必等到程序
26、编译时, 这样极大地提高了编程作效率。4 .编译和运行Java程序使用NetBeans IDE 4可以方便地在IDE中编译和运行Java程序。在主菜单中选择菜单 项:“运行运行主项目”,或者按F6,可以直接运行主项目中设计的Java应用程序。在主 菜单中选择菜单项:运行调试主项目,或者按F5,可以调试项目中的Java应用程序。如果要运行某个Java文件,可以在该文件的编辑窗口中按鼠标右键,选择“运行文件 菜单项,或者按Shift-F6组合键。图1-21是在IDE中运行的问候世界的Java程序。编译程序显示运行结果图1-21在IDE中编译和运行Java程序1.4.4 优秀Java开发工具介绍在众
27、多流行的Java开发工具中,Borland公司的JBuilder是其中优秀一款。它满足多方 面的应用,尤其适合企业级应用的大型项目开发。JBuilder 支持最新的 Java 技术,包括 Applets JSP/Servlets、JavaBean 以及 EJB 的应用。 JBuilder还支持各种应用服务器,可以快速开发J2EE的电子商务应用。由于JBuilder是用 纯Java语言编写的,其代码不含任何专属代码和标记,它支持最新的Java 标准。JBuilder 拥有最专业的!DE和图形调试界面,支持远程调试和多线程调试,调试器支持各种JDK版 本,包括 J2ME/J2SE/J2EE,JBu
28、ikler环境开发程序方便,它是纯的Java开发环境,适合J2EE开发。其缺点是过于 庞大,不宜上手,新手难于把握整个程序各部分之间的关系;对机器的硬件要求较高,比较 吃内存,运行速度显得较慢。JBuilder的IDE如图1-22所示。组件面板U!设计器对象浏览器项口管理器代码编辑器图1-22JBuilder的IDE中可以完成与程序开发相关的一系列任务除了 JBuilder这样的商业软件,我们还可以找到些免费的优秀Java集成开发环境, 氏lipse就是其中的佼佼者,深受Java程序员的喜爱。Eclipse是个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是 个框架和一组服务,
29、用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准 的插件集,包括 Java 开发工具(Java Development Tools, JDT) 由于Eclipse中的每样东西都是插件,这种平等和一致性并不仅限于Java开发工具。Eclipse的用途并不限于Java语言:例如,支持诸如C/C+等编程语言的插件已经可用,Eclipse 框架甚至还可用来作为与软件开发无关的其他应用程序类型的基础。Java开发工具(JDT)是随Eclipse平台起交付的全功能的Java IDEo JDT是对工作 台的一组扩展,它允许用户编辑、编译和运行Java程序。最简单的方法是将JDT看作和J
30、Build 有着很多类似的Java程序开发工具。但是随着对它的深入了解,读者会发现可以通过不断添加功能强大的新的Eclipse插件来扩展JDT的功能,从UML建模到可视化GU!的开发, 众多的插件使其成为最有发展前景的编程工具,这完全得益于Eclipse插件式的开放体系结 构。Eclipse JDT作为Java的集成开发环境包括:菜单、工具栏、代码编辑器、包资源管理 器、大纲以及各种观察窗口等,如图!-23所示。工具栏菜单包资源管理器透视图 工具栏大纲代码编辑器各种观察窗口代码辅助功能图1-23功能强大的免费Java集成开发环境(IDE) Eclipse使用Eclipse进行Java编程,不但
31、可以省去许多文件创建、编译和调试中的麻烦,还能 得到许多智能化的协助,避免出错,大大地提高编程效率,而且随着应用的深入,你将会发 现编程不再是枯燥无味的工作一Java的每个设计细节,都将带给你乐趣。Eclipse是款非常受开发人员欢迎的java开发工具,国内的用户越来越多。它的缺点 是比较复杂,对初学者来说,理解起来比较困难。读者可以从http:www.eclipse.org/中下载这个软件。Eclipse是用Java开发的,可以在安装了 Java 2运行时环境(JRE)的任何平台上运行。现在比较常用的其他Java开发环境还有:Sun Java Studio、Visual Age for Ja
32、va、 J Developer Visual Cafe IntelliJ Idea、JCreator 等,这些开发工具各有千秋,为 Java 程序员 提供了多样的选择。1.5 本章习题复习题习题1什么是程序设计?习题2当今的计算机是基于什么模型?习题3为什么不称计算机为数据处理器?习题4计算机程序设计语言是如何分类的?习题5简述计算机程序设计的过程。习题6 Java是什么?习题7 Java平台由哪几部分组成?各有什么作用?测试题习题8以下关于计算机程序的描述不正确的是。A、计算机程序是指按照时间顺序依次安排的计算机工作步骤。B、简单地讲,计算机程序也可以表示成:算法+数据结构。C、计算机程序是
33、对计算步骤的编排和优化。D,计算机程序是计算任务的处理对象和处理规则的描述。习题9现代的内部存储计算机程序的概念是由提出来的。A、美籍匈牙利数学家约翰冯诺伊曼B、英国数学家奥古斯塔埃达拜伦C、法国发明家约瑟夫D、英国数学家和发明家查尔斯巴比习题10以下关于算法不正确论述的是。A、算法必须是组定义完好且排列有序的指令集合。B、个算法可以产生一个结果也可以没有结果。C、个算法必须能够终结。D、算法的每一步都必须有清晰明白的定义。习题11算法的基本结构组成不包括。A、顺序结构B,选择结构C、递归结构D,循环结构习题12数据的存储结构中,常见的存储映像方式。是A、顺序方式、链接方式、索引方式、递归方式
34、B、顺序方式、链接方式、索引方式、列表方式C、顺序方式、链接方式、索引方式、指针方式D、顺序方式、链接方式、索引方式、散列方式习题13以下程序设计语言在历史上出现的正确顺序是。A、FORTRAN, BASIC、Java、C#B、FORTRAN, C, Java, BASICC, LISP, BASIC, Java, C+D、COBOL Java、Pascal C习题14以下的应用程序中,不能将源代码翻译成目标代码是。A,编译器B、解释器C、汇编程序D、虚拟机习题15程序设计语言通常分为。A、面向过程的、函数式的、面向对象的或逻辑的语言B、机器语言、汇编语言、高级语言C、数据库语言、通用语言、嵌
35、入式语言D,可视化语言、非可视化语言习题16以下可用作Java集成开发环境的开放源代码软件是A、TextPadB、 J2EEC、NetBeans IDED、JBuilder习题17 Java是推出的种面向对象的现代程序设计语A、SUN公司B、Borland 公司C IBM公司D、Microsoft 公司练习题习题18按照书中Java程序的编写、编译和运行步骤,试编写个简单的Java程序,在屏 幕上打印出自己的名字。习题19你所知道的程序设计语言有哪些?你知道它们有什么特点吗?习题20上网搜索一下,找出除了本书介绍的Java编程工具以外的其它可用于Java编程的IDE产品,看看他们各有什么好的功
36、能。习题21上网搜索一下,找出最近10年来新出现的程序设计语言,了解为什么人们要推出 这些新的语言,并讨论程序设计与语言的关系。习题22 种计算机程序设计语言有10种不同的指令。如果指令不重复,在这种语言能编出多少5条指令的程序?又能编出多少7条指令的程序?第3章面向对象与对象模型面向对象的程序设计(OOP)已成为现代软件开发的必然选择。通过掌握面向对象的技 术,能开发出复杂、高级的系统,这些系统是完整健全的,但又是可扩充的。OOP是建立在把对象作为基本实体看待的面向对象的模型上的,这种模型可以使对象之间能相互交互作 用。面向对象程序设计在个好的面向对象程序设计语言(OOPL)的支持下能得到最
37、好的 实现。Java就是一种优秀的OOPL,它提供了用来支持面向对象程序设计模型所需的一切条 件。Java有自己完善的对象模型,并提供了一个庞大的Java类库,并有一套完整的面向对 象解决方案和体系结构。在如今,程序设计的重点和方法绝对是面向对象的。尽管这本书不是、也不可能是关于 面向对象方法学的百科全书,但通过学习Java来迈进面向对象程序设计的殿堂可谓是一条捷径。3.1 面向对象的概念如果说面向过程符合电脑顺序工作的“思维”方式,那么面向对象则更符合人脑的思维 方式,因此面向对象程序设计并不难学习掌握。国外专家的研究表明,对于从来没有接触过 程序设计的初学者而言,他们学习面向对象编程要比那
38、些资深计算机教授学习起来更容易。 因为面向对象程序设计不需要借助指令、寻址、流程、指针等与计算机运行机制有关的概念, 而是建立在符合人类思维的更抽象的客观世界模型之上,并以此来解决问题。建立面向对象的概念有助于我们理解和掌握面向对象程序设计。不要被不熟悉的术语或 面向对象的神秘感所吓倒。面向对象程序设计很值得花功夫去学习。3.1.1 面向对象基本原理面向对象方法学是面向对象程序设计技术的理论基础。基于该理论基础,人类不但创造 出与人类思维方式和手段相对应的面向对象程序设计语言,而且使得程序开发过程与人类的 认知过程同步,通过对人类认识客观世界及事物发展过程的抽象,建立了规范化的分析设计 方法,
39、由此使程序具有更好的封装性、可读性、可维护性、可重用性等一系列优点。根据人类对客观世界的认知规律、思维方式和方法,面向对象方法学对复杂的客观世界 进行如下抽象和认识:(1)客观世界(事物)由许多各种各样的实体组成,这些实体称为对象。例如:园丁、 香蕉、橘子等。(2)每个对象都具有各自的内部状态和运动规律,在外界其他对象或环境的影响下, 对象本身根据发生的具体事件做出不同的反应,进行对象间的交互。例如:园丁种植香蕉就 是园丁与香蕉两个对象之间的交互,而香蕉具有生长、收获等运动规律。(3)按照对象的属性和运动规律的相似性,可以将相近的对象划分为类。例如:香 蕉、橘子这类对象可以划分为果树类。(4)
40、复杂的对象由相对简单的对象通过一定的方式组成。例如:汽车对象可以由发动机、轮子、底盘等多个对象组 成。(5)不同对象的组合及其间的相互作用和联系构成了各种不同的系统,构成了人们所 面对的客观世界。例如:投资商、园丁、香蕉、橘子等不同对象组合及其相互作用构成了一 个果园系统,运营该系统可完成投资、生产、盈利等功能。上述第(1)项说明构成客观事物的基本单元是对象;第(2)项说明对象是个具有封 装性和信息隐藏的模块;第(3)项说明可以通过相似性原理将对象分类,从那些相似对象 的属性和行为中抽象出共同部分加以描述;第(4)项说明客观事物的可分解性及可组合性, 而第(5)项则说明由对象组合成系统的原则。
41、将上述5项基本观点形式化就可以得到面向对象语言的主要语法框架。如果根据上述基 本观点,结合人类认知规律制定出进行分析和设计的策略、步骤,就产生了面向对象的分析 与设计方法。客观世界是由许多不同种类的对象构成的,每个对象都有自己的运动规律和内部状 态,不同对象之间相互联系、相互作用。面向对象技术是种从组织结构上模拟客观世界的 方法,从组成客观世界的对象着眼,通过抽象,将对象映射到计算机系统中,又通过模拟对 象之间的相互作用、相互联系来模拟现实客观世界,描述客观世界的运动规律。传统的面向过程的功能分解法属于结构化分析方法,分析者将对象系统的现实世界看作 为个大的处理过程,然后将其分解为若干个子处理
42、过程,直至将整个系统分解为各个易于 处理的过程为止,然后解决系统的总体控制问题。在分析过程中,用数据描述各子处理过程 之间的联系,整理各个子处理过程的执行顺序。这种方法缺乏对问题的基本组成对象的分析, 不够完备,尤其是当需求功能变化时,将导致大量修改,不易维护。面向对象技术以基本对象模型为单位,将对象内部处理细节封装在模型内部,重视对象 模块间的接口联系和对象与外部环境间的联系,能层次清晰地表示对象模型。面向对象方法则从根本上对问题域中的对象及其关系进行详尽的分析,并在此基础上完 成需求功能,求使对系统的修改和增加功能变得很容易,修改时不至于对系统结构产生大 的影响。面向对象技术有着自身鲜明的
43、特点。首先要搞清什么是对象。客观世界中对象是形形色 色的,常可以划分成不同类,不同类的对象又是千差万别的。例如自然界中的对象是看得见 摸得着的各类实体,而各类生产活动中的对象则是处理或控制过程,程序设计中的对象却是 数据结构等。把所有这些概括为对象,不难看出他们有以下几个共同特点; 某类对象是对现实世界具有共同特性的某类事物的抽象。 对象蕴含着许多信息,可以用组属性来表征。 对象内部含有数据和对数据的操作。 对象之间是相互关联和相互作用的。面向对象技术,正是利用对现实世界中对象的抽象和对象之间相互关联和相互作用的描 述来对现实世界进行模拟,并且使其映射到目标系统中。所以面向对象的特点主要概括为
44、抽 象性、继承性、封装性和多态性。 抽象性一指对现实世界中某类实体或事件进行抽象,从中提取共同信息,找出 共同规律,反过来又把它们集中在个集合中,定义为所设计目标系统中的对象。 继承性新的对象类由继承原有对象类的某些特性或全部特性而产生出来,原有 对象类称为基类(或超类、父类),新的对象类称为派生类(或子类),派生类可以 直接继承基类的共性,又允许派生类发展自己的个性。继承性简化了对新的对象类 的设计。 封装性是指对象的使用者通过预先定义的接口关联到某对象的服务和数据 时,无需知道这些服务是如何实现的。即用户使用对象时无需知道对象内部的运行 细节。这样,以前所开发的系统中已使用的对象能够在新系
45、统中重新采用,减少了 新系统中分析、设计和编程的工作量。 多态性是指不同类型的对象可以对相同的激励做出适当的不同相应的能力。多 态性丰富了对象的内容,扩大了对象的适应性,改变了对象单继承的关系。3.1.2 建立面向对象的思维对象概念对程序设计中的问题求解和模型建立都具有莫大的好处,在设计优秀合理的情 况下尤其如此。现代软件工程强调只编写次代码而在今后反复重用,而在非面向对象的情 况下程序员往往不得不在应用程序内部各个部分反复多次编写同样的功能代码。所以说,面 向对象编程有利于减少编写代码的总量,从而加快了开发的进度同时降低了软件中的错误 量。用来创建对象的代码还可能用于多个应用程序。比方说,个
46、团队可以编写组标准类 库来提供可利用的计算资源,然后开发人员通过将需要的类实例化为具体的对象或通过继承 来创建这些类的派生类从而实现代码的重复使用,减少编程工作量。OOP的另优点是对代码结构的影响。像继承之类的面向对象概念通过简化变量和函 数的方式而方便了软件的开发过程。OOP可以更容易地在团队之间划分编码任务。同时,由于采用OOP,辨别派生类代码的依附关系也变得更简单了(比如说继承对象的代码)。此 外,软件的测试和调试也得以大大简化。但是OOP也存在些固有的缺点。假如某个类被修改了,那么所有依赖该类的代码都 必须重新测试,而且还可能需要重新修改以支持类的变更。还有,如果文档没有得到仔细的 维护,那么我们很难确定哪些代码采用了基类(被继承的代码)。假如在开发后期发现了软 件中的错误,那么它可能影响应用程序中的相当大部分的代码。面向对象编程在编程思想上 同传统开发不同,需要开发人员转变传统开发中所具备的惯性思维方式。下面我们就看看程序设计中面向对象的思维究竟是如何思考问题的。对象是建立面向对象程序所依赖的基本单元。用更专业的话来说,所谓对象就是种代 码的实例,这种代码执行特定的功能,具有自包含或者封装的性质。这种封装代码通常叫做 类,或者模块,或者在不同程序设计语言中所应用的其他名称。以上这些术语在含义上稍微 有些不同,但它们