[Java面向对象程序设计第三版第一章.doc
文本预览下载声明
第1章
Java程序设计与开发
1.1 概 述
本章介绍Java程序设计与开发中需要用到的一些基本概念和技术。首先从确定设计面向对象程序的主要步骤开始。通过设计一个“提问”和“回答”的猜谜程序来阐述这些步骤。作为一个猜谜的例子,想一想“什么是黑和白并且可以读的?”的问题,答案当然是 报纸。
在设计阶段之后,我们重点关注编写Java程序所需的步骤,这些步骤包括了编辑、编译和运行程序。由于有两种不同形式的Java程序——应用程序(application)与小应用程 序(applet),所以我们将讲解编写这两类程序的不同之处。
接下来,我们通过研究PrintStream和System类来熟悉Java的扩展类库。使用这些类包含的对象和方法即可实现在程序中打印输出。在本章结束时,你将能设计并编写出一个能“唱”你最喜欢的歌的Java应用程序。
1.2 设计优秀的程序
编程并不仅仅只是简单地键入Java代码,而是需要进行大量的精心规划和设计。设计糟糕的程序几乎不可能正确运行。对于新手程序员来说,马上开始编码是非常有诱惑力的,下面给出程序设计的首要规则之一。
换句话说,设计程序时投入的思考和注意力越多,就越有可能得到一个可以正确运行的程序。下面这些小节将对程序开发过程做一个简要的说明。
软件工程生命周期
软件工程是指设计和实现软件的过程。软件生命周期指的是在设计和开发一个计算机程序时所经历的不同阶段。本书所举的例子将集中讨论整个生命周期的4个阶段。在分析阶段,我们提供了对某个问题的综述并详细说明了这个程序将要完成什么功能。在设计阶段,我们对程序中将要使用的各种各样的类、方法以及数据进行详细的说明。实现阶段指的是编写Java程序源代码的过程。在测试阶段,我们将测试程序的运行性能以确保它是正确的,如果有必要,将重新设计或编写这个程序。
图1.1对程序开发过程做了更详细的介绍,主要集中在软件生命周期的设计阶段。它表明设计一个面向对象的程序是对组成程序的各种类、数据和方法提出正确问题的过程。
总之,程序开发过程可以看作是一个反复应用分而治之原则的过程,因为大多数编程问题可以反复分解,直到成为许多相对容易解决的子问题,每一个子问题对应于一个对象。通过使用这种方法,一个程序可以分解成一组相互作用的对象,然后再为每一个对象设计一个类。在设计类的时候,每个对象进一步分解成只包含属于它自己的变量和方法。
图1.1 程序开发过程一览
什么时候停止进一步的分解呢?一个对象或者方法应该分配多少个任务?要回答类似的问题并不容易。好的答案来自于丰富经验所产生的良好判断力,而且好的解决方案经常不止一个。再次强调,随着我们学会更多关于面向对象设计的知识,我们也将学会如何更好地做出设计决策。
1.3 设计一个猜谜程序
程序开发过程中的第一步就是确保你知道需要解决哪些问题(图1.1)。因此,我们从制定详细的规则开始,这将解决以下3个基本问题:
到底要解决什么问题?
程序将如何使用?
程序将表现出哪些行为?
在现实世界中,问题分析经常开始于开发者与客户深入讨论之后。在程序设计入门课程中,这种分析通常由教师给出。
为了让这种思路更清晰,我们来为这个简单的问题设计一个面向对象的解决方案。
1.3.1 问题分解
大多数问题都由于太大、太复杂而不能一次性解决掉。因此,设计过程的下一步就是将问题分解成多个部分,这样可以更好地管理其解决方案。在面向对象的方法中,一个问题被分解成多个对象,每个对象只处理本程序整体任务中的一个特定方面。这样,每个对象就成为程序的整体行为中某一方面的内行或专家。
注意,在对一个给定的程序进行分解时,到底要分解到哪一步并不明确。这种不确定性源于过程设计本身。在一个程序的所有部分变得“简单到可以解决”之前,我们要把它分解到什么程度?这取决于试图解决的问题和解决问题的人。
下面是一条有用的设计指导原则,可以用来决定在程序中需要哪些对象。
同样,这条指导性原则也存在不确定性。例如,当前问题中的关键词是谜语,所以解
解决方案中包含一个作为谜语模型的对象。这个Java对象的主要任务是表示一个谜语。问题分析中的另两个名词是“问题”和“答案”。幸运的是,Java带有内置的String对象,它用来表示一个字符串,如一个单词或句子。我们可以用两个String对象来代表谜语的问题和答案。因此,对于这个简单问题,我们只需要设计一个新类型的对象,即谜语,其主要目的是表示谜语的问题和答案。
如果觉得设计决策在这个阶段显得很神秘,不用担心。只有具备丰富的设计经验之后,才能很好地理解面向对象设计,但这是一个好的起点。
1.3.2 对象设计
一旦把一个问题分解成一组相互协作的对象后,设计Java程序主要就是设计和创建这些
显示全部