On Java:中文版·基础卷
上QQ阅读APP看书,第一时间看更新

1.12 总结

一段过程式程序(procedural program)包含了数据定义和函数调用。如果你想要搞清楚这种程序究竟做了什么,就必须仔细研究,比如查看它的函数调用以及底层代码等,以便在你的脑海中勾勒出一幅完整的蓝图。而这就解释了在设计过程式程序时,为什么还需要中间表示(intermediate representation,IR)。实话实说,过程式程序的理解成本确实很高,因其设计的表达方式更多是面向计算机,而不是你要解决的问题。

因为面向对象编程在过程式编程语言的基础上增加了许多新特性,所以你可能会想当然地认为同等效果的Java程序会远比过程式程序复杂。然而你会惊喜地发现,编写良好的Java程序通常比过程式程序更简单,也更易于理解。这是因为在Java中,对象的定义所呈现的是问题空间(而非计算机式的呈现)的概念,而发送至对象的消息则代表问题空间的具体活动。面向对象编程的一个令人愉悦之处在于,那些设计良好的程序,其代码总是易于阅读的。另外,因为许多问题都能够通过复用已有的库来解决,所以通常来说代码行数也不会太多。

面向对象编程和Java不一定适合所有人。有一点非常重要,那就是你必须仔细评估自己的需求,然后再判断Java是不是满足这些需求的最佳方案,也许使用其他编程语言是更好的选择(说不定就是你现在使用的编程语言)。如果在可预见的将来,你的需求非常专业并且具有一些Java无法满足的特殊条件,那么你就有必要研究一下其他可代替的编程语言(我尤其推荐Python)。这样一来,就算你依然选择Java作为你的编程语言,至少你清楚还有哪些可选项,以及为什么选择它。


[1]这个说法实际上不太全面。这是因为对象可以保存在不同的机器或内存地址中,甚至还可以保存在磁盘上。在上述情况中,对象的标识(identity)就需要用其他方式而非内存地址来表示。

[2]有时候我们会将两者加以区分,将类型(type)定义为接口,而类(class)则是接口的具体实现。

[3]关于这个称谓,我需要感谢我的老朋友Scott Meyers。

[4]这些信息对于大多数图来说已经足够了,也无须特别说明使用的是聚合还是组合。

[5]也叫作“里氏替换原则”(Liskov Substitution Principle),这一理论最初由Barbara Liskov提出。

[6]其实并不能保存基本类型,不过“自动装箱”(autoboxing)机制从某种程度上缓解了这个问题。相关细节将在后续章节介绍。

[7]你之后将学习到的基本类型(primitive type)是一个特例。