私はオブジェクト指向設計に慣れていないので、このプロジェクトを設計するためのより良い方法についてアドバイスを得たいと思っていました。
Foo オブジェクトのシーケンスを初期化してベクトルに格納する FooSequence クラスから始めました。このシーケンスから Foo オブジェクトを変更および削除できるようにしたいと考えています。つまり、いくつかのアルゴリズムを適用して Foo のシーケンス全体を処理し、このシーケンスから低品質の Foo を削除します。
Foo オブジェクトを処理するクラスと FooSequence をどのように接続すればよいかわかりません。関連する設計パターンと落とし穴について詳しく説明していただける方がいらっしゃいましたら、よろしくお願いいたします。
私はできると思います:
a) FooSequence のスコープを拡張し、FooProcessor のメンバー関数がメンバー vSequence_ を処理する FooProcessor のような名前に名前を変更します。
b) Foo オブジェクトへの読み書きアクセスを許可するためのアクセサ関数とミューテータ関数を提供します。別のクラス (FooProcessor) を使用して、FooSequence から Foo オブジェクトを変更および削除します。これをどのようにインターフェースする必要があるのか わかりません。
//A simplified header of the FooSequence class
class FooSequence {
public:
FooSequence(const std::string &sequence_directory);
~FooSequence();
//To process the sequence, another class must know the capacity of the vector
//I'm not sure if interfacing to std::vector member functions makes much sense
std::size_t getSize() const { return vSequence_.size(); }
//Should I use an accessor that returns a non-const reference??
//In this case, Why not just make the vector public?
std::vector<std::shared_ptr<Foo>> getFoo;
//Return a non-const reference to individual Foo in the sequence??
//This doesn't help iterate over the sequence unless size of vector is known
std::shared_ptr<Foo>& operator[] (std::size_t index) {
return vSequence_[index];
}
private:
const std::string directory_;
std::vector<std::shared_ptr<Foo>> vSequence_;
FooSequence(const FooSequence &);
void operator=(const FooSequence &);
};
GoF の Design Patterns を参照してみましたが、まだ高度すぎると思います。どんなアドバイスでも大歓迎です。
編集: この質問にはオブジェクト指向設計に関する一般的な回答が必要だと思いますが、ImageSequence クラスと OpenCV のインターフェイスを探していることを明確にする必要があると思いました。ImageSequence と他のクラスとのインターフェイスを最適化するために、どの戦略または設計を使用できるか疑問に思っています