面向对象编程中的数字序列类设计
1. 传统设计的问题
在传统的数字序列类型管理中,维护工作较为繁琐。每次添加或删除数字序列类型时,需要正确更新多个部分,包括元素向量的向量、成员函数指针数组、 what_am_i()
字符串数组、 set_sequence()
的 switch
语句以及 num_seq
的值等。而面向对象编程模型可以消除这种显式的编程开销,使代码更简单、更具扩展性。
例如, what_am_i()
函数将 _isa
索引到一个静态字符字符串数组中,该数组按 ns_type
枚举器的顺序列出支持的数字序列名称:
const char* num_sequence::
what_am_i() const
{
static char *names[num_seq] = {
"notSet",
"fibonacci", "pell",
"lucas", "triangular",
"square", "pentagonal"
};
return names[_isa];
}
2. 定义抽象基类
2.1 确定公共操作
定义抽象基类的第一步是确定其子类共有的操作集。对于所有数字序列类,以下操作构成了 num_se