6

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_trainmodel_predict. 私はある程度のカプセル化を達成しました (ただし、呼び出し元が の内部をいじるのを妨げるものは何もありませんmodel)。原則として、ポリモーフィズムにも対応できます。追加のボーナスとして、コマンド/クエリの分離をほぼ無料で取得できmodel_predictます。modelmodel

(賢明な読者は、MATLAB には既にオブジェクト指向システムがあることを指摘するでしょう。パフォーマンスや古いバージョンとの互換性など、さまざまな理由から、私はそれを使用できません。)

データ構造を設計し、最初の引数がそのデータ構造のインスタンスになる関数を作成する C の同様のメカニズムを想像できます。

私が知りたいのは、このプログラミング方法をどこまでプッシュできるかということです。これは一般的に受け入れられているパターンですか (私はその言葉を言いました)? 注意すべきパフォーマンスの問題はありますか?

4

2 に答える 2

2

これは本当に重要な議論だと思います。OOPがすべての言語で常に最良の解決策であるとは限らないと言っても過言ではありません。たとえばC++やPythonでは、通常、OOPはデータをカプセル化するための自然な方法です。これらの言語は、クラスに焦点を当てるように設計されています。他の言語では、他の方法で高品質のコードを作成する方が簡単な場合があります。

CommonLispは良い例だと思います。それは本当に良いOOPシステム(CLOS)を持っていて、私は本当に完全だと思います。しかし、それでも、OOPは、基本的なソフトウェアエンジニアリングの構成要素を提供するために必要なものではなく、便利な機能であるため、PythonやC++ほどCommonLispでは使用されていません。

OOPを使用する必要があるかどうかは、解決しようとしている問題によって異なります。一例として、GUIはOOPに取り組むのに非常に役立つと思います。

于 2011-01-21T15:08:57.260 に答える
-1

オブジェクト指向はソフトウェアエンジニアリングの目標を達成するための手段です。

目標:保守の容易さ、拡張性、整理されたソースコード(検索可能性など)
OO構成:カプセル化(「データ型/構造」が所有するメソッドのみがそのデータを操作できます)

目標:既存の機能を変更せずに新しい機能を開発する機能、コードの再利用
OO構成:実装の継承、ポリモーフィズム

目標:抽象化(特定のタイプや操作にコミットする必要はありません。クライアントを変更せずに実装を変更します)
OO構成:インターフェースの継承、インターフェース、抽象クラス

目標は正当化する必要はありません。オブジェクト指向言語のサポートが必要かどうかは、特定の状況によって異なります。Cを使用する必要がある場合でも、OO構造を模倣することができ、うまくいけばその利点を享受できます。

念のために言っておきますが、OOのすべての原則に準拠して、大量のコードを開発することは絶対に可能です。

他の人が他の目標や例をリストできると確信しています(そしてstackoverflowの投稿でテーブルを編集する方法を知っています)

于 2011-01-21T14:30:09.137 に答える