原則として、CやMATLABなどの手続き言語でさえオブジェクト指向のものにすることは可能です。この質問は、かなりよく議論されているhereとhereです。オブジェクト指向の原則を手続き型言語で適用する必要がありますか?
私がこれらの議論およびそれらの参考文献から欠落していることが、1つがであるべきかどうかについての説明であったことが、はそのような原則を適用することであった。そうして得られる具体的なことはありますか?明らかにが可能です。ですが、それはとなるようにお勧めします?オープンソースプロジェクトには、この慣行が明確な利点をもたらした例がありますか?
明確化おそらく例は、オーダーです。
いくつかの機械学習アルゴリズムを実装するMATLABコードを継承しました。渡されるフラグに応じて、モデルを訓練するか、将来の値を予測するためにそれを使用するか、単一の関数building_model
は基本的にあります:
building_model('train', ...) % ... stands for the data with which the model is trained
と
がモデル自体を用いて実装されます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
を返さないので、コマンド/クエリーの分離はほぼ無料であるため、model
を変更することはできません。
(賢明な読者は、MATLABが既にオブジェクト指向のシステムを有していることが指摘されます。以前のバージョンとの性能と互換性を含む様々な理由のために、私はそれを使用することはできません。)
IがCで同様の機構を想像することができいくつかのデータ構造を設計し、最初の引数がそのデータ構造のインスタンスになる関数を記述します。
私が知りたいことは、このプログラミング方法をどこまで押し込めるかということです。これは一般的に受け入れられているパターンですか(私はその言葉を言っています)?私が注意すべき性能上の問題はありますか?
これは、一般的にオブジェクト指向の慣行についての議論から欠落していることがあります。 OOPが言語に組み込まれているかどうか、または言語の助けを借りずに採用しようとする設計方法論に過ぎないかどうかは、依然として決定する必要があります。どちらの場合も同じ利点(および短所)が適用されます。 –