オブジェクト指向プログラミングを最大限に活用する方法を習得する方法として、スパース行列計算用の小さなライブラリを作成しています。パーツ(疎行列と、それらの接続構造を記述するグラフ)が非常に緩やかに結合されている素晴らしいオブジェクトモデルを作成するために、私は一生懸命取り組んできました。私自身の見解では、コードははるかに拡張性があり、保守が容易です。
ただし、鈍いアプローチを使用した場合よりも多少遅くなります。このオブジェクトモデルを使用することのトレードオフをテストするために、基になるグラフのカプセル化を破る新しいスパースマトリックスタイプを作成して、実行速度を確認しました。
最初は、かなり暗いように見えました。私がかつて誇りに思っていたコードは、洗練されたソフトウェア設計のないバージョンよりも60%遅くなりました。しかし、APIをまったく変更せずに、関数をインライン化し、ループを少し変更するという、いくつかの低レベルの最適化を行うことができました。これらの変更により、競合よりもわずか20%遅くなりました。
それは私の質問に私をもたらします:それが私が素晴らしいオブジェクトモデルを持っていることを意味する場合、どのくらいのパフォーマンス損失を受け入れるべきですか?