文件名称:尽量使类的接口正交少而完备-*重构*改善既有代码的设计(带完整书签)
文件大小:1.28MB
文件格式:PDF
更新时间:2024-06-27 17:56:07
C++ 编程规范
原则4.3 尽量使类的接口正交、少而完备 说明:应该围绕一个核心去定义接口、提供服务、与其他类合作,从而易于实现、理解、使用、测试 和维护。接口函数功能正交,尽量避免一个接口功能覆盖另一个接口功能。接口函数太多,会难以理 解、使用和维护。如果一个类包含20个以上的非私有成员函数,类的接口可能不够精简。 规则4.1 模块间对外接口类不要暴露私有和保护成员 说明:对外接口类暴露受保护或者私有成员则破坏了封装,一旦因为类的设计变更(增加,删除,修改 内部成员)会导致关联组件或系统的代码重新编译,从而增加系统编译时间,也产生了二进制兼容问题, 导致关联升级和打补丁。所以除非必要,不要在接口类中暴露私有和保护成员。 有如下几种做法: 使用纯虚类作为接口类,用实现类完成实现,使用者只看到接口类,这种做法缺点是: 代码结构相对复杂。 新增接口必须放在原有接口后面,不能改变原有接口的顺序。否则,因为虚函数表的原因, 会导致客户代码重新编译。 接口类使用PIMPL模式(只有一个指向实现类指针的私有数据成员),所有私有成员都封装在实现类 中(实现类可以不暴露为头文件,直接放在实现文件中)。 代码结构简单,容易理解。 可以节省虚函数开销,但是有间接访问开销。 修改实现不会导致客户代码重新编译。 class Interface { public: void function(); private: Implementation* impl_; }; class Implementation { public: int i; int j; }; void Interface:: function () { ++impl_->i; } 规则4.2 避免成员函数返回成员可写的引用或者指针 说明:破坏了类的封装性,对象本身不知道的情况下对象的成员被修改。