最近负责完成一个框架的设计以及编写。
对其内部的基类的接口划分有点感想:
问题,在最根本的基类中将所有子类的接口都定义出来???可能吗?
1:一个系统中的类应该有一个公共根类,所有的类都从该根类派生。该根类可以定义运行时变量将各个类的类型记录下来。
原因:对整个系统的接口抽象,有好处。
例如:对应该系统的所有类引用都可以根类对象的应用代替,这就为以后为以后重载接口提供了方便。
2:基类中只包含其子类中一定要包含的成员变量。基类中少定义成员变量。
对于,那些不是在所有子类中包含的成员变量不要写在基类中,可以增加派生层次,以便包含对应的成员变量的。
原因:避免子类中包含不必要的成员变量,导致类的子类对象占用不必要的内存。
3:由2得出,基类也是要分层次。原则可以将有共同点的一组类添加一个抽象基类。
4:相类似,基类的接口也只负责其对应的子类组的公共操作就可以了。(原因实在是不能将所有派生层次子类的操作函数都预先写出来。)
5:最重要的一点 基类之间的关系要定义出其子类都应有并且遵守的逻辑组织规则。
e.g:
class a
{...
list/<a/> itmes;
}
class b:public a
{
}
...
则a 的子类b等都是自包含的。
5:类图中反映的类之间的关系(特指组合,聚合关系),应在超类中反映出来,但超类中可以不写出其组合/聚合的对象成员变量,但必须写出对其组合/聚合的变量的操作接口
e.g:
class a //abstrc
{....
操作聚合变量b的接口
...
操做聚合变量c的接口
...
但a中不包含类型为b,c的成员。
}
一点感想 见笑。