知识卡片

完整抽象

普通读书笔记卡 · 1891.c

内容

抽象不只是提一个公共父类或公共方法,还要覆盖概念的完整生命周期和互补操作。只抽出一半能力会制造新的隐式约定,使调用者靠猜测补齐语义,最终比重复代码更难维护。

参考来源

- 位置:《程序员的底层思维》第1章《抽象思维》1.4.5节「抽象设计要完整」(源文件:Cheng Xu Yuan De Di Ceng Si Wei_split_005.html) - 结论依据:原文用javax.swing.ButtonModel只有setGroup()没有getGroup()的真实JDK案例,说明不完整的抽象设计会破坏互补对称性,直接支持卡片论点。 - 原始内容:"好的抽象设计是内聚而完整的。……在JDK 1.1的接口javax.swing.ButtonModel中,只提供了setGroup()方法,而没有提供getGroup(),这是一种典型的"不完整的抽象设计"坏味道。……修改接口是一件很难的事情,因此在最初设计API的时候,要尽量做到抽象完整。"