如果一個矩陣軟件庫有一個根類(例如,MatrixBase
),從該多個專門(或更受約束)矩陣的類(例如,SparseMatrix
,UpperTriangluarMatrix
等)推導出?如果是這樣,派生類應該公開/保護性/私人性派生嗎?如果不是,它們是否應該與封裝了通用功能的實現類組合,否則無關聯?還有別的嗎?C++矩陣類層次結構
我和一位軟件開發人員(我本人並不是這樣)談過這件事,他提到從一個更普通的類派生更受限制的類是一種常見的編程設計錯誤(例如,他使用了例如,如何從Ellipse
類中推導類似於矩陣設計問題的Circle
類並不是一個好主意的例子),即使它確實是一個「真實」「IS A」MatrixBase
。基本操作和派生類所呈現的接口對於基本操作應該是相同的;對於專門的操作,派生類將具有可能無法實現的任意MatrixBase
對象的附加功能。例如,我們可以只爲PositiveDefiniteMatrix
類對象計算cholesky分解;然而,乘以標量應該對基類和派生類都以相同的方式工作。此外,即使底層數據存儲實現不同,operator()(int,int)
應該可以像任何類型的矩陣類一樣按預期工作。
我已經開始尋找一些開源矩陣庫,看起來像這是一種混合包(或者我正在尋找一堆混合的庫)。我計劃幫助重構一個數學庫,這是一個爭論的焦點,我希望有意見(這是除非真的有客觀的權利回答這個問題)關於什麼設計哲學將是最好的,任何合理的方法有什麼優點和缺點。
+1對於「僅當觀察時圓是橢圓」。 – avakar 2010-05-03 16:15:48
這是使用不可變數據的「投票」嗎? – bpw1621 2010-05-03 17:28:20
是的,我更喜歡不可變的數據,儘管我知道這在C++中並不常見。 – starblue 2010-05-03 20:32:42