####
抽象数据类型是一种向用例隐藏内部表示的数据类型。这种思想真的很牛
封装
面向对象编程的特征之一就是使用数据类型的实现封装数据,以简化实现和隔离用例开发。封装实现了模块化编程。
它允许我们:
- 独立开发用例和实现的代码;
- 切换至改进的实现而不会影响用例的代码;
- 支持尚未编写的程序(API能够起到指南的作用)
封装的同时也隔离了一致性检查等调试功能
- 限制潜在的错误
- 在实现中添加一致性检查等调试工具
- 确保用例代码更明晰
- 一个封装的数据类型可以被任意用例使用,因此它扩展了Java语言。
- 提倡的编程风格是将大型程序分解为能够独立开发和调试的小型模块。这种方式将修改代码的影响限制在局部区域。改进软件的质量。它也促进了代码复用,因为我们可以用某种数据类型的新实现代替老的实现来改进它的性能、准确度或是内存消耗。
- 同样的思想也使用与许多其它领域。
- 我们在使用系统库时常常从封装收益。Java系统的新实现往往更新了多种数据类型或静态方法库的实现,但它们的API没有变化
- 在算法和数据结构的学习中,我们总是希望开发出更好的算法,因为只需用抽象数据类型的改进实现替换老的实现即可在不改变任何用例代码的情况下改进所有用例的性能
- 模块化编程成功的关键在于保持模块之间的独立性。
- 坚持将API作为用例和实现之间唯一的依赖点(这个地方就非常牛了,我估计为什么会有敏捷开发模式,跟这种思想肯定是有很大的一致性)
并不需要知道一个数据类型是如何实现的才能使用它,实现数据类型时也应该假设使用者除了API什么也不知道。(封装的这种思想真的是非常非常牛)
设计API
- 构建现代软件最重要也最有挑战的一项任务就是设计API。它需要经验、思考和反复的修改,但设计一份优秀的API所付出的所有时间都能从调试和代码复用所节省的时间中获得回报。
- 一个小程序就不用了,但也应该按照能够复用的方式编写每个程序。
- 理想情况下,一份API应该能够清楚地说明所有可能的输入和副作用
- 因此,我们的API将是与抽象数据类型相关联的值以及一系列构造函数和实例方法的目的和副作用的自然语言描述。
(这里的设计API,需要有大量的编程经验)