本节书摘来自异步社区出版社《C++面向对象高效编程(第2版)》一书中的第1章,第1.7节,作者: 【美】Kayshav Dattatri,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.7 类的目的
C++面向对象高效编程(第2版)
设计类的目的必须非常明确。一个优秀的类应该易于理解和使用,必须清楚地向客户说明其目的。我们不能创建一个Color类,既代表花的颜色又代表图形系统中的颜色,它们有完全不同的要求。设计人员没必要为满足一组客户而在类中添加成员函数,这样添加的成员函数总体上与类要完成的任务无关。换言之,每个类都是为特定领域的某种用途而设计的。例如,考虑下面的Person类:
// 糟糕的设计
class Person {
public:
Person(/*一些参数 */);
~Person();
char* GetName() const;
char*GetAddress() const;
unsigned long GetBankAccountNumber() const;
//...
};```
GetBankAccountNumber成员函数和类的抽象无关。我们如何知道一个人一定有银行账户?为此,我们需要的人必须是一个银行客户。
有时候,设计人员加入一个成员函数是因为它不适合放在其他地方,或者他们发现某成员函数只能在某受限环境中使用。但是,这样做会破坏抽象,而且让客户很困惑。这个类的设计人员可能混淆了抽象的Person和银行客户。
通过设计人员对类的描述,可以判断该类是否是设计良好的类。这也成为判断优秀类的一个标准。对于优秀的设计,只需用一句话即可描述出类的目的。如果需要用两段文字来描述,则说明这个类中的功能太多(可能互相矛盾),应该将其分解为许多更小的类。另一个标准是类中成员函数的数量,设计优秀的类所包含的成员函数应该介于15~25个。
当客户查看类时,应该很容易明白它能完成的工作和无法完成的工作。类必须简明扼要地说明它的功能和局限性。如果在查看类之后,客户仍不解其用途,则说明类的设计很糟糕,而且很可能是错误的,需要重新设计。