1

アルゴリズムのパラメーター設定を独立したクラスとして定義するのが良い方法であるかどうか疑問に思っていました。次のコードを使用して質問を説明します。

using namespace std;

class Parameters
{
public:
    Parameters():a_para_(0),b_para_(0) {};
    ~Parameters() {};
    Parameters(const Parameters &para)
    {
        a_para_ = para.a_para_;
        b_para_ = para.b_para_;
    }
    void set_a_parameter(int a)
    {
        a_para_ = a;
    }
    void set_b_parameter(int b)
    {
        b_para_ = b;
    }
private:
    int a_para_;
    int b_para_;
};

class Algorithm
{
public:
    Algorithm() {};
    ~Algorithm() {};
    void set(const Parameters &para)
    {
        para_ = para;
    }
    void run()
    {
    }
private:
    Parameters para_;
};


int main()
{
    Parameters para;
    para.set_a_parameter(3);
    para.set_b_parameter(4);
    Algorithm fun;
    fun.set(para);
    fun.run();

    return 0;
}

背後にある哲学は、パラメーター設定とアルゴリズムの実装を分離できるということです。この設計戦略について経験豊富なプログラマーと話し合ったところ、彼はパラメーター設定とアルゴリズムを 1 つのクラスとして混在させることを望んでいるようです。したがって、私はあなたのアドバイスのためにここに書いています:どちらが良いですか?ありがとう!

4

1 に答える 1

2

あなたの質問は非常に一般的であり、一般的な答えはありません。状況によります。

多くの場合、コンパイル時にアルゴリズムのパラメーター (たとえば、特定のバッファーのサイズ、マトリックスの次元、またはツリー ノードのアリティ) を決定できるようにしたい場合があります。通常、これらのパラメーターは、いわばアルゴリズムの「インスタンス」の存続期間中は変更されません。このコンテキストでは、通常、アルゴリズム クラスをテンプレートに変換し、これらのパラメーターをテンプレート パラメーターにすることをお勧めします。

アルゴリズムの有効期間中にパラメーターを変更する必要があるが、その実装が簡単な場合は、パラメーターを外部化する必要はありません。それらが自明ではなく、実装の詳細がアルゴリズムのパフォーマンスを変更する可能性がある場合 (例: 密行列の配列に基づく行列実装、または疎行列のリンクリストに基づく行列実装)、そのパラメータを外部化できると思います。

より適切な回答が必要な場合は、より具体的な質問をする必要があると思います。

于 2012-10-29T11:09:34.560 に答える