MatrixBase
),从中更多的特定(或更受限制)的矩阵类(例如SparseMatrix
,UpperTriangluarMatrix
等)派生出来吗?如果是这样,那么派生类应该公开/保护/私有地派生吗?如果不是,它们应该与封装通用功能的实现类组合在一起,否则无关?还是其他什么?我和一位软件开发同事进行了这方面的讨论(我本身不是),他提到从更普遍的类(例如,他使用了将
Circle
类从Ellipse
类派生出来不是一个好主意的例子,类似于矩阵设计问题)派生出更受限制的类是常见的编程设计错误,即使一个SparseMatrix
“是一个”MatrixBase
。基类和派生类呈现的接口应该对基本操作相同;对于专业操作,派生类将具有额外的功能,这可能无法为任意MatrixBase
对象实现。例如,我们只能为PositiveDefiniteMatrix
类对象计算Cholesky分解;但是,乘以标量应该对基类和派生类起作用。此外,即使底层数据存储实现不同,operator()(int,int)
也应该对任何类型的矩阵类按预期工作。我已经开始查看一些开源矩阵库,看起来这有点混乱(或者可能是我正在查看混杂的库)。我计划协助重构一个数学库,其中这是一个争议点,我想要意见(除非这个问题真的有客观的“正确”答案),关于哪种设计哲学最好,以及任何合理方法的利弊。