LoginSignup
5
2

More than 1 year has passed since last update.

ソフト設計に疎いMATLABユーザーにオブジェクト指向設計のいいところを布教する記事

Posted at

ポエムです

クラス化に関する記事を2つ書き終えて、根本の疑問がおそらく解決していないと思ったので、書きます。

オブジェクト指向は変数を操作するプレイヤーを設定すること。

オブジェクト指向ってつまり何?と言われたらこう答えます。

前の記事でも書きましたが、あなたは神ではないので、せっかく作った変数を勝手に書き換え、エラーや意図しない結果を引き起こし、激怒することもしばしばあると思います。もしかしたら間違った結果を得ているのに気づいていないかも。

ことあるごとに関数ファイルを作成しておくことは非常にいいことで、正常な値を関数に投げ込めば、出力の正確さは保証されるでしょう。便利な関数を作成したら、汎用的に使えるように整えて、自作の関数群に追加しておけば、何かの時に役に立ちます。研究開発中の制御モデル・最適化モデル・シミュレーションアルゴリズムなど、こういった一般的なメソッドは関数ファイルを作り共有すべきでしょう。

しかし、プロジェクト内でその関数を扱う際、引数と出力の管理はあなたがすべて責任を持たねばなりません。
関数Aに入れた引数とその出力は、互いにリンクしたものであって、片方だけを勝手に変更することは、先に書いたエラーや誤計算の元です。変更してほしくない数字は変更できないようにしたいのです。

この時に変数の変更などを管理してくれるプレイヤーがクラスです。

クラスには使命を与える

クラスには、プロジェクト内でのある程度の役割を与えます。例えばデータに対して適当な近似関数を導出する・ノイズを除去する・シミュレーションを行うなど、どれくらいのスコープを任せるかは自由ですが、一目して理解できる程度の仕事を任せます。

クラスには仕事を達成するための変数を内部のメンバ変数という形で保持し、できるだけprivate変数で外部からの変更をシャットアウトさせます。

他のクラスと共有した方が良さそうなもの、メンバ変数として保持するのはクラスの指名から外れるようなものは、メンバ関数の引数にしたりして、境界をはっきりさせます。

こうしておくと、「このクラスを使えば、関数を直で使うより用途は狭いかもしれないが、安全に目的を達成できる。」という状態にできます。うまく汎用的なクラスが作成できたら、研究メンバなどに共有しましょう。

終わり

暇ができたので短いポエムを書きました。また思うことがあったら追加するかもしれません。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2