免責事項:私は既存のOO mma拡張(特にOOシステム)を使用していないので、この投稿は一般的な議論に基づいています(ただし、Javaで作業するときにOOを頻繁に使用し、私が自分で実装したmmaのOO要素)。 opinionには、オブジェクト指向が動くターゲットであることに同意するので、もっと便利な答えを得るために、必要な機能の点でより具体的でなければなりません。また、あなたの目標は何かに大きく依存します。自分の人生を簡素化して独自のプロジェクト規模を作りたいのですか、いくつか(多くの)開発者が開発しようとしているプロジェクトのコミュニケーションを簡素化したいですか?特定のルールとプロトコル(コーディング標準、ベストプラクティス、デザインパターンなど)を実施するか、OOに既存のライブラリを再利用させますか。
私は、業界でのOOPの使用のほとんどが第2および第3のカテゴリに分類されると主張します。これもあなたのケース(私はそうではないと思われる)であれば、MathematicaでOOPを使用することは意味があるかもしれませんが、これは明らかではありません。たとえば、WolframAlphaはコードベースに数千万行のコードを持ち、そこにAFAIKのOOシステムは使用されていませんでした。ソロデベロッパーにとってのメリットが必要な場合は、自分が好きなオブジェクト指向の機能を選択して自分自身で実装します。つまり、独自のオブジェクトモデルを作成できます。これはMathematicaではあまり難しくありません。
Mathematicaの特定のOO拡張を使用するのは、この拡張を使用して構築された十分にテスト済みのオープンソースライブラリが多数存在し、簡単なデプロイメントメカニズムがあればはるかに意味があります。私は既存のOO mma拡張のいずれかで構築された重要なmmaコードベース(ライブラリ)を認識していません(これは私の無知に起因する可能性もあります)。したがって、既存のライブラリを再利用するためにオブジェクト指向が必要な場合は、J/Linkや.Net/Linkのようなものが、Javaや.Netのすべてにアクセスできるため、より良いサービスを提供することができます。
テクニックでプロジェクトを拡大するには、オブジェクト指向が唯一の友人ではありません。これはおそらくmma(WRIの場合を除いて)のための非常によく調査された領域ではありませんが、クロージャ、LISPマクロ、実行時コード生成などの他の関数言語からのいくつかのテクニックはmmaにも適用可能です。たとえば、私が取り組んでいるmmaプロジェクトの1つに、40個以上のパッケージと1万行以上のmmaコードがあり、かなり管理が容易です(WorkBenchで)。私はクロージャとマクロをたくさん使用していますが、いくつかのオブジェクト指向の機能も使用していますが、一般的なオブジェクト指向拡張は使用していません。重要なことは、情報の隠蔽、結合性、合成性、テスト容易性を失うことです。また、OOだけではできません。
IMO、おそらくPythonのようなOMA対応の言語レイヤーで実現できる非常に良いことは、多くの場合、評価者とパターンマッチャーの複雑さを隠すことです経験の少ないユーザーには混乱を招く可能性があります。私はそのような言語層がかなり時折欠落していました(そしてまだまだです)。このような層の設計者は、それが他のmmaと本当によく統合されるという難しい課題に直面します。それとは別に、私はトップレベルのmmaで構築された一般的なオブジェクト指向システムの2つの主要な障害を見ています。パフォーマンスが遅く、自動ガベージコレクションがありません。私は、これらが解決されるまで、下位レベルのOOPの大量生産利用を排除していると思います(何百万ものオブジェクトを作成するなど)。 OOPのいくつかの機能は、依然としてハイレベルのプロジェクトアーキテクチャには非常に役立つかもしれませんが、私が言ったように、それらは容易に実装されます。これは、既存のオブジェクト指向拡張を試してはいけないと言っているわけではありません。
あなたはどのようなアプリケーションに留意していますか?あなたが他の世界から必要とする可能性のある機能を理解するだけです。 –
シーングラフマネージャー - > 3Dビジュアライザー。おかげさまで –