c++类设计思考(三):类方法与实现函数...
时间:2010-08-08 来源:hlqyq
实现函数是指单独完成某种具体任务的函数,如向量的点积、差积,矩阵的行列式计算等。实现函数必须遵守以下原则:
1、单一职责原则: 函数只能拥有一种功能,不能包含多个功能,但可调用其它实现函数完成特定任务。常见的一种错误实例是对容器对象进行统计的实现,其代码既包含了对容器子对象的遍历,又包含对单个子对象的统计处理.
2、标准数据类型原则: 实现函数的参数类型必须为语言内置的标准数据类型,不可以为用户自定义的数据类型.
3、外部零依赖原则: 实现函数不得依赖于任何外部变量、全局变量、类成员变量以及其它全局性函数等,它仅能依赖传入的函数参数;函数的实现代码如果需要处理错误,可在参数列表中指定错误处理函数指针。
4、契约式实现原则: 函数实现的入口必须提供前条件验证,包括函数参数检查,函数实现的出口必须提供后条件验证。如果函数有输出参数,在前条件验证通过后,初始化所有输出参数为相应的缺省值(这样可剔除结果的任意性);
调度函数是指使用实现函数或者其它调度函数完成特定任务的函数,调度函数的主要目的是提供实现函数所需要的运行场景。调度函数必须遵守以下原则:
1、零实现原则: 调度函数不允许包含任何实现,它仅能使用实现函数或者其它调度函数来完成特定任务;
2、层次调度原则: 调度函数只允许使用比自身低一层次的其它调度函数,而不允许跨层次调度.即国王调度城主,城主调度骑士,国王却不可调度骑士。
C++类设计时首先需要遵守的原则是类方法及其实现的分离,即调度的不实现,实现的不调度(类的方法已经绑定到特定的类上,并依赖于特定的对象状态,其代码重用度必然较对应的实现函数小)。类方法属于调度函数,同样必须遵守调度函数的原则,类方法通过以对象状态为场景并调应相应的实现函数来完成特定功能。
实例代码:
template<typename T>
inline const T Vector2DotImpl(const T x0,const T y0,const T x1,const T y1)
{
return x0 * x1 + y0 * y1;
}
template<typename T>
class CVector2
{
...
T Dot(const CVector2<T>& rhs) const
{
return Vector2DotImpl(m_x,m_y,rhs.m_x,rhs.m_y);
}
...
T m_x;
T m_y;
};
胡乐秋
2010/8/9
http://blog.csdn.net/hlqyq