3.4 案例研究:多体模拟
第1章和第2章讨论的几个例子可以更清晰地表述面向对象的程序设计。例如,我们可以将BouncingBall(程序3.1.9)实现为一个值为球的位置和速度的数据类型,客户程序则调用方法来移动和绘制球。这种数据类型为客户程序提供更大能力,如可以同时模拟几个小球的运动(参见练习3.4.1)。同样,2.4节中Percolation的案例研究,以及1.6节中随机冲浪的案例研究,很显然都可以作为面向对象程序设计的有趣练习。Percolation将作为练习3.4.8,随机冲浪者的面向对象程序设计将在4.5节中重新讨论。在本节,我们将研究一个新的程序来演示面向对象程序设计方法。
我们的任务是编写一个程序,动态模拟多个物体在相互引力吸引作用下的运动状况。这个多体模拟问题最初由艾萨克·牛顿(Isaac Newton)在350多年前提出,至今依然是热门的研究话题。
数据类型应该包含什么值的集合,有哪些作用于这些值的操作?本节分析的案例是面向对象程序设计中引人注目的例子,其原因之一是,它提出了在真实世界的物理对象与程序中使用的抽象对象之间直接且自然的对应关系。对于许多新手而言,解决问题的方法从编写执行语句序列转换到设计数据类型是困难的。随着经验的积累,应用这种方法解决计算问题会使读者从中受益。
首先,我们回忆一下高中物理学过的一些基本概念和公式。理解程序代码并不需要完全理解这些公式,由于采用了封装,这些公式仅仅出现在几个方法中。而且由于采用了数据抽象,大多数代码非常直观且容易理解。从某种意义上说,这就是面向对象程序设计的最终目标。
多体模拟 1.5节中的弹跳小球模拟基于牛顿第一运动定律:任何物体都保持匀速直线运动或静止状态,直到外力迫使它改变运动状态。通过牛顿第二运动定律(这解释了外力如何影响运动速度)改善这个例子,产生了一个令科学家着迷很长时间的一个基本问题。多体问题即给定n个物体的系统(这些物体通过万有引力相互作用),如何描述其运动轨迹。同一个基本模型适用于从天体物理学到分子动力学的各种问题。 ...
Get 计算机科学导论:跨学科方法 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.