Mathematicaの土地でのUMLの類似物は何ですか?



Whats Analogue Uml Mathematica Land



解決:

簡単な答えは1つではないと思いますが、コードがオブジェクト指向でなくても、特に動作図では、UML自体をいつでも使用できます。クラス図やオブジェクト図は使用しませんが、たとえばコンポーネント図の使用を妨げるものは何もありません。

大規模なソフトウェアシステムの構築に関するチュートリアルとホワイトペーパーは、 Mathematica 役に立つこと。



このトピックがあまり議論されていない理由は疑わしいです Mathematica コミュニティは、私たちのほとんどが大規模なシステムを構築していないということです。しかし、この質問を参照してください。

WorkbenchはEclipseのブランドバージョンであるため、多くのUMLツールの1つをそれにインストールできることに注意してください。以下のスクリーンショットは、UML2Extenderパッケージを使用して作成したEclipseワークベンチのMathematicaプロジェクト内のUMLモデルファイルの例を示しています。追加のボーナスとして、タブに表示される他のファイルは、この特定のプロジェクトを完了するために行うことを追跡するために使用しているMylynローカルタスクです。この特定の例では、この優れた質問と回答の説明を使用して、Mathematica開発環境を標準のEclipseKeplerインストールにインストールしました。



ここに画像の説明を入力してください


Mathematicaで「ソフトウェアのアーキテクチャ化」がどれほど必要かというより一般的な質問に対する答えは、要するに、それほど必要ではないということです。

その理由は基本的に1)リスト2)動的型付けと3)リスト+動的型付けです。たとえば、リストを使用すると膨大な範囲のデータ構造を表すことができるため、Mathematicaはclasses / OOを必要としません。 OOを通じて、これに加えてほとんど利益を得ることができません。




Mathematica APIの設計哲学は、これを最大限に活用しています。現在の日付を取得したいとします。静的言語、たとえばC#では、次のように記述します。

DateTime.Now

これにより、DateTimeオブジェクトが返されます。このオブジェクトから情報を取得するには、 プログラムはオブジェクトの署名を知っている必要があります。

Mathematicaでは、次のように書くでしょう:

日にち[]

これはリストを返します。ただの定期的な日常の通常のリスト。それから情報を得るために、あなたのプログラムはその署名を知る必要はありません、そしてMathematicaAPI全体がリストを リンガ・フランカ 、あなたはの出力を供給することができます手動でデータを引き出すことなく、Date []を他の関数に直接変換します。例:

行[フレーム/ @日付[]]

私はこのような共通語を持つ静的言語を知りません。ただし、不十分な近似がたくさんあります。

もちろん、大規模なプロジェクトでは、アーキテクチャについて絶対に心配する必要がありますが、リストとMathematicaの一般的な哲学によって可能になる設計の力と単純さを覚えておくことをお勧めします。


この答えはMathematicaでUML図を作成する方法を示しています。これは、「Mathematicaで大きなコードを書くための一般的な戦略」という質問に対する私の回答で説明したように、オブジェクト指向の設計パターンを使用したMathematicaでのプログラミングに関連しています。

パッケージ機能

このコマンドは、パッケージUMLDiagramGeneration.mをインポートします。

インポート['https://raw.githubusercontent.com/antononcube/MathematicaForPrediction/master/Misc/UMLDiagramGeneration.m']

パッケージは機能を提供しますUMLClassNodeおよびUMLClassGraph。

関数UMLClassNodeには署名があります

UMLClassNode [classSymbol、opts]

UMLClassNodeはを作成します指定されたクラスシンボルのクラス名とそのメソッドを持つグリッドオブジェクト。オプション「Abstact」を使用して、抽象クラス名とメソッドを指定できます。オプション「EntityColumn」を使用して、説明列のオンとオフを切り替えることができます。

関数署名のあるUMLClassGraph:

UMLClassGraph [symbols、abstractMethodsPerSymbol、symbolAssociations、symbolAggregations、opts]

UMLClassGraphは、指定されたシンボル(クラスを表す)とそれらの関係のUMLグラフ図を作成します。オプションとしてUMLClassNodeとGraphのオプションを取ります。

UML図の作成

建物、人、本、そしてクライアントプログラムの間の単純な関係を視覚化してみましょう。

UMLClassGraph [{Library  [DirectedEdge] Building、Museum  [DirectedEdge] Building、Member  [DirectedEdge] Person}、{}、{Library Member、Museum  [DirectedEdge] Member、Client  [DirectedEdge] Building、Client  [DirectedEdge ] Person}、{Library  [DirectedEdge] Book}、 'Abstract'-> {Building、Person}、 'EntityColumn'-> False、VertexLabelStyle-> 'Text'、ImageSize-> Large、GraphLayout-> 'LayeredDigraphEmbedding']

ここに画像の説明を入力してください

上の図では、PersonクラスとBuildingクラスは抽象的です(そのため、イタリック体になっています)。メンバーは人を継承し、図書館と博物館は建物を継承します。ライブラリには(多くの)Bookオブジェクトを含めることができ、Memberに関連付けられています。クライアントは建物と人に関連付けられます。

UML生成の例

ここでデザインパターンについて触れたので、DecoratorのMathematica実装のコード上に生成された図は次のとおりです。

ここに画像の説明を入力してください

そして、ブール式のインタープリターの具体的な実装の図を次に示します。

ここに画像の説明を入力してください

(通訳は私のお気に入りのデザインパターンであり、私はいくつかを作りました Mathematica そのアプリケーションを容易にし、拡張する実装。私のこれらのブログ投稿を参照してください:WordPressのMathematicaForPredictionの「Functionalparsers」カテゴリ)。