3.2 创建数据类型
原则上,仅使用内置的8种基本数据类型就可以编写所有的程序。但是,正如上一节所述,在更高的抽象层次上编写程序会更加便利。因此,Java的语言标准和扩展库中定义了各种数据类型。尽管如此,我们肯定不能指望Java包含了所有我们可能使用的数据类型,所以能够定义自己的数据类型就显得十分必要。本节介绍如何使用Java的类(class)构建数据类型。
使用Java类实现数据类型,与实现一个包含若干函数的静态方法库并没有很大区别,主要区别在于我们这次需要将方法实现与数据相关联。API指定了需要实现的构造函数和实例方法,但是用户可以自由选择任何方便的方式来实现。为了巩固基本概念,我们首先实现3.1节中介绍的带电粒子的数据类型。接下来,我们通过一系列示例(从复数到股票账户,包括后续章节中将使用的一些软件工具)来说明创建数据类型的过程。实用的客户代码是任何数据类型的价值的最好证明,所以我们将讨论一些客户程序示例,包括描述著名而迷人的Mandelbrot集合。
定义一个数据类型的过程被称为数据抽象。我们关注数据并实现对这些数据的操作。在计算中应当清晰地分离数据和相关的计算任务。对物理对象或者熟悉的数学概念进行抽象建模是简单而且实用的,但是数据抽象的强大之处在于它允许我们对任何可以精确描述的东西进行建模。读者一旦熟悉这种编程风格的经验,就会发现数据抽象的使用可以帮助我们解决很多复杂的编程挑战。
数据类型的基本元素 为了描述在Java类中实现数据类型的过程,我们将讨论带电粒子的数据类型Charge。特别是,我们感兴趣的是采用库仑定律的二维模型,即一个带电粒子在给定位置点的电势可表示为V=kq/r,其中q是电荷量,r是从位置点到电荷的距离,k=8.99×109N·m2/C2,是静电常数。当存在多个带电粒子时,任何一点的电势等于各个带电粒子产生的电势之和。为了保持一致性,我们使用SI国际单位制):在公式中,N表示牛顿(力),m表示米(距离),C表示库仑(电荷)。 ...