3.3 设计数据类型

创建数据类型的能力使得每个程序员都变成一个语言设计者。我们不再局限于处理内置于语言中的数据类型和相关操作,而是可以很容易地创建自己的数据类型并编写相应的客户程序。例如,Java没有预定义的复数数据类型,但是你可以定义Complex数据类型,并编写客户程序,如Mandelbrot。同样,Java没有内置的海龟绘图工具,但是我们可以定义Turtle并编写客户程序以便立即利用这个抽象。即使Java确实包含了一个特定的工具,我们也可能更喜欢根据自己的特定需求创建单独的数据类型,就像我们自定义Picture、In、Out和Draw等类型一样。

基于上述观点,编写一个程序时,首要任务就是尽量理解我们需要的数据类型。程序开发在此时变为一项设计活动。在本节中,我们特别关注API的开发,它是任何程序开发的关键步骤。我们需要考虑不同的选择方案,了解其对客户程序和实现的影响,并不断优化设计方案,以在客户需求和可能的实现策略之间寻求平衡。

如果你选修了系统编程课程,那么会了解这种设计任务是构建大型系统的关键行为,并且在编写大型程序时,Java及其他类似语言包含强大的高层机制,支持编写大型程序时的代码复用。这些机制中有许多是面向构建大型系统的专家而设计的,但其一般方法也适用于所有的程序员,其中一些机制适用于编写小型程序。

在本节中,我们将讨论封装、不变性和继承,关注这些设计理念在数据类型设计中的应用,以实现模块化程序设计,便于调试程序,提高编写清晰而正确的代码的效率。

在本节最后,我们将讨论一种重要的Java运行时机制,用于检查设计时的假设与实际运行时的条件是否匹配。这些功能对于开发可靠软件具有宝贵的价值。

设计API 在3.1节,我们编写了使用API的客户程序。在3.2节,我们实现了API。现在我们讨论设计API时的挑战。按照上述顺序来讨论这些主题是比较恰当的,因为程序设计花费的大部分时间主要在于编写客户程序。 ...

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.