![]() ![]() |
|
C++类和接口的设计原则探讨 | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/3/16 9:43:59 文章录入:杜斌 责任编辑:杜斌 | |
|
|
文中以C++类的设计为讨论范围。 总提 面向对象编程对于产出高质量,易维护的代码是非常有帮助的。面向对象编程的概念构建于三个基本特征之上:封装,继承,多态。在C++中,class是面向对象编程概念的核心和具体形式。class通过私有成员体现“封装”,通过直接继承或者组合体现“继承”,通过虚函数和动态绑定(dynamic binding)体现“多态”。class的设计质量直接决定了整个系统的质量。 从整体功能层面谈class设计,有这么三条原则: ·单一功能原则(Single Responsibility Principle) 一个class就其整体应该只提供单一的服务。如果一个class提供多样的服务,那么就应该把它拆分,反之,如果一个在概念上单一的功能却由几个class负责,这几个class应该合并。 ·开放/封闭原则(Open/Close Principle) 一个设计并实现好的class,应该对扩充的动作开放,而对修改的动作封闭。也就是说,这个class应该是允许扩充的,但不允许修改。如果需要功能上的扩充,一般来说应该通过添加新类实现,而不是修改原类的代码。添加新类不单可以通过直接继承,也可以通过组合。 ·最小惊讶原理(Least Surprise Principle) 在重载函数,或者子类实现父类虚函数时,应该基本维持函数原来所期望的功能。比如: class Pet { public: virtual Talk() = 0; }; class Cat : public Pet { public: void Talk() { cout << "miao"; } }; class Dog : public Pet { public: void Talk() { BiteOwner(); } }; class Dog 在实现虚函数Talk的时候,没有像我们期望的那样输出狗吠声,而是咬起主人来了。这是应该避免的。 |
|
![]() ![]() |