图书前言

前    言

概述

本书是程序设计和解决问题的中级教程。我们希望初学者在用图形用户界面编写面向对象的程序时,将注意力集中在传统的计算机科学主题上。

本书包括数据处理的6个主要方面:

1. 数据结构:讨论基本的抽象数据类型(ADT)。包括字符串、向量、链表、集、表、文件、栈、队列和树等。

2. 复杂度分析:介绍分析和预算运行时间和存储空间的使用。

3. 面向对象程序设计:OOP是当今世界占主导地位的程序设计典范。本书涵盖了该主题的所有要点。

4. 软件开发生命周期:我们没有用独立的章节来介绍软件开发技术,而是将其贯穿全书的案例分析。

5. 图形用户界面和事件驱动程序设计:同一水准的许多书都着重介绍现在已经弃用的编程方式—— 基于字符的终端I/O。原因很简单。对初学者来说,图形用户界面和事件驱动程序设计太复杂。在本书中 ,我们将克服复杂性障碍以独特的方式进行介绍。

6. 联网:将介绍多线程和简单的客户端/服务器应用程序。

Java 2集合和扩展

本书包括所有Java 2集合类,如列表、集(set)和映射等。从本书中,Java 2集合不包括传统的抽象数据类型,如队列、树及图等。我们在名为lamborne的专用包中将这些作为扩展或作为Java 2 类的变体来介绍。

集合的原型和专门版本

每个集合类都以包含集合基本特性的原型形式介绍。使用原型可使初学者将注意力集中在实现策略上,而不用担心完整性及错误处理等问题,因为这些问题将在每章后面的专门版本中讨论。

I/O 样式:终端和GUI

在Java中,人们可以在两种截然不同的I/O样式之间作选择。终端I/O 适用于连续的、基于文本的输入输出,通常用在测试算法的环境中。很多实际程序要求采用图形用户界面(GUI)。尽管Java同时支持两种I/O样式的类的范围很广,但是对于初学者来说仍然很复杂。本书将教您如何从头开始编写这两种样式的代码。我们还将告诉您如何通过程序包ioutil 简化代码。这个包提供了keyboardReader类来简化终端I/O,还提供了其他几个类来简化GUI。因此,初学者可以使用任意一种I/O样式,而不必受制于软件开发的基本事务:算法设计和分解类代码。此外,初学者可连贯地学到模型-视图-控制器模式,它是软件设计的一个基本组件。

使用Java 表现传统主题

本书涵盖了中级课程的传统主题:数据结构、算法分析以及软件设计。然而使用Java 可使这些主题具有新的表示形式。举例如下:

1. 利用GUI可支持模型-视图-控制器模式的原则性介绍,用来结构化大型软件系统。

2. ADT会尽可能位于类的层次结构中,并通过接口(如迭代器和集合视图等)连接到其他ADT。

3. 使用套接字和网络应用程序可支持客户端/服务器模式的原则性介绍,作为结构化大型软件系统的另一个机制。

案例分析

本书包含了大量的案例分析(完整的Java 程序),简单的或是实用的。为了强调软件开发生命周期的重要性,我们总是将案例分析置于某个框架中,包括用户需求、分析、设计和实现。每个阶段执行良好定义的任务。有些案例分析跨越几章,或者在章末的程序设计项目中进行  扩展。

使用本书的方法

我们在组织本书内容时,考虑到了满足不同的时限要求和主题偏好。我们建议每个初学者阅读第1章,因为这一章概述了中级课程的主要主题。对于已彻底掌握用Java 进行面向对象程序设计的学生,可跳过第2章。只想使用终端I/O的学生,可跳过介绍GUI程序设计的第3章。第4、5章综述了复杂度分析以及Java中数组和链表结构的使用。所有的学生都应阅读第4章,已经采用数组和链接结构的可以跳过第5章。第6章是要求阅读的,这一章提供了Java 集合框架的综述。在这一章中,介绍了接口、层次及其他重要概念,如迭代器。迭代器在以后的章节中担任重要角色。第7~9章介绍了栈、队列和列表。这3章的阅读顺序可以随意选择。递归(第10章)可早些阅读,且应当在学习第11章和第12章以前阅读。第11、12章中将讨论树结构。第13~15章介绍计算机科学课程的高级主题,如散列法、图的算法、并发程序设计及客户端/服务器应用程序。

我们已尽量做到使本书无差错,并将对任何错误或遗漏负责,希望读者将错误通过klambert@wlu.edu反馈给我们,将勘误表以及关于本书的其他信息发布到作者的Web站点,http://www.wlu.edu/~lambertk/CS2Java/。

要下载书中部分扩展内容,可访问网站:http://www.tupwk.com.cn。