算法(4th ed)(93):基础——数据抽象 4.4.2

阅读数:10 2019 年 11 月 2 日 12:14

算法(4th ed)(93):基础——数据抽象 4.4.2

(更多抽象数据类型的实现:维护多个实现)

同一份 API 的多个实现可能会产生维护和命名问题。在某些情况下,我们可能只是想将较老的实现替换为改进的实现。而在另一些情况下,我们可能需要维护两种实现,一种适用于某些用例,另一种适用于另一些用例。实际上,本书的一个主要目标就是深入讨论若干种基本抽象数据结构的实现并衡量它们的性能的不同。在本书中,我们经常会比较同一份 API 的两种不同实现在同一个用例中的性能表现。为此,我们通常采用一种非正式的命名约定。

  • 通过前缀的描述性修饰符区别同一份 API 的不同实现。例如,我们可以将表 1.2.12 中的 Date 实现命名为 BasicDateSmallDate,我们可能还希望实现一种能够验证日期是否合法的SmartDate
  • 维护一个没有前缀的参考实现,它应该适合于大多数用例的需求。在这里,大多数用例应该直接会使用 Date

在一个庞大的系统中,这种解决方案并不理想,因为它可能会需要修改用例的代码。例如,如果需要开发一个新的实现 ExtraSmallDate,那么我们只能修改用例的代码或是让它成为所有用例的参考实现。Java 有许多高级语言特性来保证在无需修改用例代码的情况下维护多个实现,但我们很少会使用它们,因为即使 Java 专家使用起它们来也十分困难(有时甚至是有争议的),尤其是同我们极为需要的其他高级语言特性(泛型和迭代器)一起使用时。这些问题很重要(例如,忽略它们会导致千禧年著名的 Y2K 问题,因为许多程序使用的都是它们自己对日期的抽象实现,且并没有考虑到年份的头两位数字),但是深究它们会使我们大大偏离对算法的研究。

评论

发布