2011-06-22 7 views
3

OO systemは、MathematicaのOOP用のフリーでオープンソースのパッケージです。 OOシステムを使用することで、私は両国の最高のメリット(OOP /機能)を享受したいと考えています。Mathematicaオブジェクト指向システム(または代替)?

  • OO System for Mathematicaのやりとりは何ですか?
  • あなたは(より良い)オープンソース を気付いていますか?
  • OOシステムクラスのいくつかを表示しますか?
  • 一般的なOOPについてのコメント Mathematica?
+1

あなたはどのようなアプリケーションに留意していますか?あなたが他の世界から必要とする可能性のある機能を理解するだけです。 –

+0

シーングラフマネージャー - > 3Dビジュアライザー。おかげさまで –

答えて

5

免責事項:私は既存の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のいくつかの機能は、依然としてハイレベルのプロジェクトアーキテクチャには非常に役立つかもしれませんが、私が言ったように、それらは容易に実装されます。これは、既存のオブジェクト指向拡張を試してはいけないと言っているわけではありません。

+0

- 私のプログラミング経験のほとんどはJavaで、私の最初の 'デザイン'は常にクラス、プロパティ、およびメソッドの面であります。私はその経験からタップするのに十分でありたいです。 OO-Systemを使うことで、私が作成しなければならないコードをきれいに整理することができます。 OO-Systemはオープンソースで、非常にコンパクトで、必要に応じて自分自身を維持することができます。 - ユーザーの基盤があまりないように思えば、問題はあると思うだろう。私は著者に連絡しようとしましたが、彼は返信しません。このサイトの最新の活動は数年前のことですが、彼は動いたと思います。 –

+0

その場合は、最初に好きなオブジェクト指向の機能を実装することをお勧めします(私はクラス、継承、インタフェース、例外、プライベートクラス、匿名クラスを選ぶことをお勧めします)。コードを最小限に抑えて、OOシステムが持っているものを見てみましょう。このようにして、あなたはより良い理解を得るでしょう。私は静的または動的なタイピングが必要かどうかを早期に決めることもできます。また、私は、あなたがJAVAでIDEからどれほどのサポートを受けるかを心に留めておきたいと思います.MOMAベースのOOシステムでは余分な努力が必要です。ありがとう、acl。 –

1

また、MathOOという興味深いものがあります。

+0

私はそれを使用していませんが、この製品はクラス定義をノートブックで作成する必要があると思われます。 (!) - 私が本当に好きなのは、OOシステムのクラス(sofar)はクラスが別々のクラスファイルで定義されているということです。 (それはimhoでなければなりません) - Maederの教科書からやり直しています。 –

+0

私が気に入らないのは、「有効期限の前にMathOO 1.0bを自由に使うことができます。」 - Sageの中からPythonを母国語としてMathematicaを実行しようとするのは私のリストに載っています。 Linux(仮想)システムを必要とするという事実は私には少し気になります。 –

関連する問題