3.3.2 封装

将客户端和实现分离开从而隐藏信息的过程称为“封装(Encapsulation)”。实现的细节对于客户端不可见,实现代码也无从知晓客户端代码的细节,事实上客户端代码可能后来才编写。

读者有可能已经猜测到,我们在数据类型的实现中已经实践过封装。在3.1节,我们从如下设计理念开始:使用一个数据类型时无须理解其具体实现。这种设计理念描述了封装的主要优点。我们认为其非常重要,所以采用设计数据类型的方式而不是别的方式来阐述其概念。现在,我们将详细讨论实现封装的三个主要理由。使用封装的主要目的包括:

·实现模块化程序设计

·提高调试效率

·使代码更加清晰简洁

这些功能是相辅相成的(相对于仅使用内置数据类型的代码,良好设计的模块代码更容易调试和理解)。

1. 模块化程序设计

自第2章学习函数开始,开发的模块编程风格强调了一种程序设计理念,即把大型程序分离成小的模块,以便独立地开发和调试。这种方法通过将程序修改的影响局限于局部范围,增强了软件的弹性。通过使用数据类型替代的新实现,提高了性能和精度,改进了内存占用,更提高了代码的重用。模块化程序设计成功的关键在于保持模块间的独立性。我们可以假定客户端无须知道其实现细节,只要遵循API即可。

2. 修改API

当使用标准模块时,通常可以受益于封装的程序设计理念。例如,新的Python版本常常可能包含各种不同数据类型或定义函数的模块的新实现。有一个强烈和不变的提高数据类型实现的动机,即所有的客户端可以潜在地受益于改进的实现版本。但是,Python的API很少会改变。一旦发生改变,将在Python社区中产生沉重的代价,所有的人都需要更新其客户端代码。作为一个极端的例子,考虑Python 2到Python 3中关于整数运算符“/”含义的变化(具体请参见本书1.2.3节中关于Python ...

Get 程序设计导论:Python语言实践 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.