1

長い「メイン」プログラムを分割して、変更できるようにし、おそらく単体テストをしようとしています。それはいくつかの巨大なデータを使用するので、私は躊躇します:

最善の方法: 関数呼び出しを行い、おそらく非常に大きな (メモリに関する) データが渡されるようにすること。

(a) 値によって、または

(b) 参照による

(非常に大きいとは、いくつかの構造と小さなクラスのベクトルのマップとベクトルを意味します...画像でさえ...本当に大きくなる可能性があります)

(c) または、すべての関数がアクセスできるプライベート データを保持するには? これは、 main_processing() または何かがそれらすべてのベクトルを持つ可能性があることを意味する場合もありますが、一部の関数にはアイテムしかありません...関数がテスト可能であるという利点があります。

私の質問は最適化と関係がありますが、このモンスターを赤ちゃんモンスターに分割しようとしている間、メモリを使い果たしたくありません。

ローカル変数を作成した場合、データのコピーがいくつになるかはあまり明確ではありません。

誰か説明してくれませんか?

編集:これは一般的な「非常に大きなプログラムをクラスに分割する方法」ではありません。このプログラムは、すでに小さなエンティティに分割されている大規模なソリューションの一部です。

私が見ている実行可能ファイルは、かなり大きいですが、分割できないデータを持つ単一のエンティティです。したがって、データはすべて、既に作成した単一のクラスのメンバー変数として作成されるか、(すべて) 関数の引数として渡されます。

どちらが良いですか?

4

2 に答える 2

2

単体テストが必要な場合は、「すべての関数がアクセスできるプライベート データを使用する」ことはできません。これは、そのすべてのデータが各テスト ケースの一部になるためです。

したがって、各関数について考え、データのどの部分で機能するかを正確に定義する必要があります。関数のパラメーターと戻り値に関しては、非常に単純です。小さなオブジェクトには値渡しを使用し、大きなオブジェクトには参照渡しを使用します。

小規模と大規模を分けるしきい値には、推測値を使用できます。私は「8 は小さく、それ以上は大きい」というルールを使用していますが、私のシステムにとって良いものが、あなたのシステムにとって同じように良いとは限りません。

于 2013-03-19T01:18:58.457 に答える
1

これは、OOP に関する一般的な質問のようです。データを論理的にグループ化された概念 (クラス) に分割し、それらのデータ要素を操作するコードをデータと共に配置し (メンバー関数)、構成、継承などですべてを結び付けます。

あなたの質問は広すぎて、より具体的なアドバイスをすることができません。

于 2013-03-19T00:31:45.627 に答える