【发布时间】:2010-05-03 15:53:35
【问题描述】:
矩阵软件库是否应该有一个根类(例如,MatrixBase),其中更多专业(或更受约束的)矩阵类(例如,SparseMatrix、UpperTriangluarMatrix 等? ) 导出?如果是这样,派生类是否应该公开/保护/私有派生?如果不是,它们是否应该由一个封装通用功能的实现类组成,并且在其他方面不相关?还有什么?
我正在与一位软件开发同事(我不是本人)讨论这个问题,他提到从更通用的类派生更受限制的类是一个常见的编程设计错误(例如,他使用了示例从Ellipse 类派生Circle 类(类似于矩阵设计问题)不是一个好主意)即使SparseMatrix“IS A”MatrixBase 确实如此。基类和派生类提供的接口对于基本操作应该是相同的;对于专门的操作,派生类将具有可能无法为任意MatrixBase 对象实现的附加功能。例如,我们可以只计算PositiveDefiniteMatrix 类对象的cholesky 分解;但是,对于基类和派生类,标量的乘法应该以相同的方式工作。此外,即使底层数据存储实现不同,operator()(int,int) 对于任何类型的矩阵类都应该按预期工作。
我已经开始研究一些开源矩阵库,看起来这是一个混合包(或者我正在查看一个混合包)。我正计划帮助重构一个数学库,这是一个争论的焦点,我想发表意见(除非真的有一个客观的正确回答这个问题) 关于什么设计理念是最好的,以及任何合理方法的优缺点是什么。
【问题讨论】: