C や MATLAB などの手続き型言語でさえ、オブジェクト指向言語に変えることは原理的に可能であることを私は知っています。この質問は、こことここでかなりよく議論されています。
これらの議論とその中の参考文献から欠けていることがわかったのは、そのような原則を適用すべきかどうかについての説明でした. そうすることで具体的に得られるものはありますか?明らかに可能ですが、そうすることをお勧めしますか? この実践が明確な利点につながったオープンソース プロジェクトの例はありますか?
明確化
おそらく、例が適切です。
機械学習アルゴリズムを実装する MATLAB コードをいくつか継承しました。building_model
基本的に、渡されるフラグに応じて、モデルをトレーニングするか、それを使用して将来の値を予測する単一の関数があります。
building_model('train', ...) % ... stands for the data with which the model is trained
と
value = building_model('predict')
モデル自体は、 内の MATLAB 永続変数で実装されますbuilding_model
。
building_model
トレーニング用と予測用の 2 つの関数に分割しました。永続変数として実装されていたモデルは、いわば外部化されています。
model = new_model()
model = model_train(model, ...)
prediction = model_predict(model)
これは、大まかに言えば、MATLAB で OOP のいくつかの機能をエミュレートできる範囲です。私の構築モデル モジュールは、コンストラクターと 2 つのメソッドmodel_train
とmodel_predict
. 私はある程度のカプセル化を達成しました (ただし、呼び出し元が の内部をいじるのを妨げるものは何もありませんmodel
)。原則として、ポリモーフィズムにも対応できます。追加のボーナスとして、コマンド/クエリの分離をほぼ無料で取得できmodel_predict
ます。model
model
(賢明な読者は、MATLAB には既にオブジェクト指向システムがあることを指摘するでしょう。パフォーマンスや古いバージョンとの互換性など、さまざまな理由から、私はそれを使用できません。)
データ構造を設計し、最初の引数がそのデータ構造のインスタンスになる関数を作成する C の同様のメカニズムを想像できます。
私が知りたいのは、このプログラミング方法をどこまでプッシュできるかということです。これは一般的に受け入れられているパターンですか (私はその言葉を言いました)? 注意すべきパフォーマンスの問題はありますか?