类的基础
抽象数据类型
你可以对 ADT(抽象数据类型)进行分层,如果你想在某一个层次上对数据结构进行操作(如堆栈的压入弹出),没问题。而你可以在这一层次上在创建一个针对现实世界的抽象层次。
良好的类接口
类接口应展现一致的抽象层次
可以把类看作用来实现某种 ADT,如果实现的不止一个 ADT,那么这个类可以优化为多个类,让这个类更明确。混杂抽象层次的类,会最终让程序不好理解,逐步堕落得没法维护。
不好的例子:这个类展现了两个 ADT,暴露了使用类库这个内部实现逻辑
优化后:
一定要理解类所实现的抽象是什么
把不相关的信息转移到其他类
当你发现,某类的一半子程序使用类的一半数据,而另外一半的子程序使用另一半数据,那么考虑将它拆分
尽量让接口可以编程,而不是靠注释表达语义
一个接口无法通过编译器检查的部分就是有可能被误用的部分,想办法将语义接口的元素转化成可编程接口的元素。
谨防修改类时破坏类接口的抽象
引入不同抽象层次的操作或成员。不要添加与类抽象接口层次不一致的公共成员
同时考虑抽象性和内聚性
关注类的抽象层次会比关注类的内聚性更有助于深入理解类。如果发现某个类内聚性很弱,那么换个方法,它们的抽象层次是否一致?
良好的封装
封装是一个比抽象更严格的概念。抽象可以给你提供一个忽略实现细节的方式来管理复杂度,而封装强制让你看不到实现细节。如果没有封装,那么抽象很容易被打破,要么两者皆存,要么两者皆失
评论