类和函数的设计原则(1/10) 单一功能原则( Single Responsibility Principle 处理的事情太多的类是脆弱的。 比如,一个全文索引类 FullTextsearch,既要 读取数据、分词,又要建立倒排索引并写入磁 盘,还要读取磁盘文件并检索,太大,太臃胂 类应该只提供单一的功能 只有一个可能引起修改类代码的原因 拆分与合并
类和函数的设计原则 类和函数的设计原则(1/10) ¾ 单一功能原则(Single Responsibility (Single Responsibility Principle) Principle) z 处理的事情太多的类是脆弱的。 处理的事情太多的类是脆弱的。 z 比如,一个全文索引类 比如,一个全文索引类FullTextSearch FullTextSearch,既要 读取数据、分词,又要建立倒排索引并写入磁 读取数据、分词,又要建立倒排索引并写入磁 盘,还要读取磁盘文件并检索,太大,太臃肿 盘,还要读取磁盘文件并检索,太大,太臃肿 了。 z 一个类应该只提供 一个类应该只提供单一的功能 • 只有一个可能引起修改类代码的原因 只有一个可能引起修改类代码的原因 • 拆分与合并
举例:全文索引系统 Query Data source search Hits index analysis Indices store
举例:全文索引系统 举例:全文索引系统 index analysis search Indices store utility Data source Hits Query
类和函数的设计原则(2/10) >开放封闭原则(open/ Close Principle) 一个类应该对扩展开放,对修改关闭 。对新的功能的扩充,应该通过增加新类实现,而不是 修改已有类的代码 比如,boss让你编写一个计算中国个人所得税的计算 器产品,而有一天一个美国客户来了 好处 降低程序各部分之间的耦合性,使程序模块互换成为可 使软件各部分便于单元测试。 利于实现软件的模块的互换,软件升级时可以只部署发生变化 的部分,而不会影响其它部分
类和函数的设计原则 类和函数的设计原则(2/10) ¾ 开放 /封闭原则(Open/Close Principle) (Open/Close Principle) z 一个类应该对扩展开放,对修改关闭 一个类应该对扩展开放,对修改关闭 z 对新的功能的扩充,应该通过增加新类实现,而不是 对新的功能的扩充,应该通过增加新类实现,而不是 修改已有类的代码 修改已有类的代码 z 比如,boss让你编写一个计算中国个人所得税的计算 让你编写一个计算中国个人所得税的计算 器产品,而有一天一个美国客户来了 器产品,而有一天一个美国客户来了 … z 好处 • 降低程序各部分之间的耦合性,使程序模块互换成为可能。 • 使软件各部分便于单元测试。 • 利于实现软件的模块的互换,软件升级时可以只部署发生变化 的部分,而不会影响其它部分
类和函数的设计原则(3/10) >最小惊讶原理( Least Surprise Principle) 程序对用户的响应尽可能不使用户感到惊讶 重载函数,覆盖函数,或者子类实现父类虚函 数时,应该基本维持函数原来所期望的功能 class Cat: public Pet i public class Pet i void Talko{cout<<“喵! public virtual Talko class Dog: public Pet i public void Talko[ Sleep: 1
类和函数的设计原则 类和函数的设计原则(3/10) ¾ 最小惊讶原理(Least Surprise Principle) (Least Surprise Principle) z 程序对用户的响应尽可能不使用户感到惊讶 程序对用户的响应尽可能不使用户感到惊讶 z 重载函数,覆盖函数,或者子类实现父类虚函 重载函数,覆盖函数,或者子类实现父类虚函 数时,应该基本维持函数原来所期望的功能 数时,应该基本维持函数原来所期望的功能 class Pet { class Pet { public: public: virtual Talk() = virtual Talk() = 0; }; class Cat: public Pet { class Cat: public Pet { public: public: void Talk() { void Talk() { cout << “ 喵!"; } } class Dog: public Pet { class Dog: public Pet { public: public: void Talk() { Sleep(); } void Talk() { Sleep(); } }
类和函数的设计原则(3/10)cont 致性和规范性 。比如,STL容器类提供了非常一致的界面,这 样,即使面对一个不熟悉的函数,预计应该如 何使用它也会变得很容易
类和函数的设计原则 类和函数的设计原则(3/10) cont. (3/10) cont. ¾ 一致性和规范性 一致性和规范性 z 比如,STL容器类提供了非常一致的界面,这 容器类提供了非常一致的界面,这 样,即使面对一个不熟悉的函数,预计应该如 样,即使面对一个不熟悉的函数,预计应该如 何使用它也会变得很容易。 何使用它也会变得很容易