10

私は、Matlab と GUIDE を使用して、別のバックエンド エンジン (Matlab も) と対話する単純な GUI アプリケーションを開発するように依頼されました。私は Java と .Net のバックグラウンドを持っています。

Matlab のドキュメントは、技術的にこれを行う方法については強力ですが、特に「エンジニアリング」プロセスについてはほとんど述べていません。

  • パッケージ化/名前空間関数、またはライブラリの作成方法は?

  • ファイルシステムにファイルを配置する最善の方法は?

  • MVC、オブザーバーなどの典型的な GUI パターンを実装する方法は?

  • これらの質問は、Matlab 開発でも意味があるのでしょうか?

  • 他に一般的なイディオム/落とし穴はありますか?

直接のアドバイスや良い参考資料へのポインタは非常に役に立ちます。ありがとう。

4

3 に答える 3

10

これは完全に合理的な質問であり、少し注意を払えば、保守が容易な GUI コードを作成することができます。いくつかの提案:

  • GUI レイアウト コードと「ビジネス ロジック」を別の m ファイルに入れます。(コード例については、この FileExchange 提出物を参照してください)。関連して、setappdata および getappdata を使用したり、構造体を渡したりする代わりに、ネストされた関数を使用して GUI の状態を維持します。

  • 一般に、コールバックにはネストされた匿名関数を使用します。ネストされた関数は Java の内部クラスに似ており、無名関数は (Ruby のブロックのような) レキシカル クロージャーを実装します。

  • 例外を使用して、エラーを適切に処理します。

  • 各 GUI オブジェクト (スライダー、軸など) に一意で意味のあるタグを付けます。たとえば、「frequencySlider」や「dataAxes」などです。これにより、GUI レイアウトとロジックの分離が強化されます。

  • GUIDE が提供する GUI コントロールはかなり低レベルですが、さまざまなコントロールに体系的なタグ名を選択することで、再利用可能な高レベル コンポーネントを実装できます (たとえば、スライダーには「frequencySlider」、関連するテキスト ラベルには「frequencyLabel」)。 . コンポーネントの初期化ルーチンは、findobj を使用してコンポーネントのさまざまな部分を検索し、それらを初期化できます。例えば

    関数 myComponent(図、ベース名)
       SliderHandle = findobj(fig, 'tag', [basename 'Slider']);
       textHandle = findobj(fig, 'タグ', [ベース名 'ラベル']);
       % 初期化 ...
       set(sliderHandle, 'Callback', @sliderCallback);

       % コールバックのネストされた関数; スライダーハンドルの使用に注意してください
        関数 SliderCallback(h,e)
            fprintf('現在の値は %g\n, get(sliderHandle,'Value'));
        終わり

      終わり
于 2008-12-08T21:42:35.770 に答える
3

あなた (Dan Vinton) は sw エンジニアリングと設計パターンの知識があり、MatLab の世界で一般的な方法を探していると思います。この目的のために、最適化、カーブ フィッティングなどの GUI パッケージ MatLab ツールボックスを調べます。これらすべてのツールボックスの GUI には、ソース コードが付属しています (通常の MatLab スクリプトです)。また、 MatLab Centralからいくつかの高ランクの GUI パッケージのソース コードを参照することもできます。これらは、MatLab での一般的な慣行をよく表しています。

于 2008-12-03T11:40:54.630 に答える
0

私は matlab で GUI を作成した経験はありませんが、あなたの会社がそれにお金を使うなら、matlab for .net の方がより速いオプションかもしれません。これにより、.net から呼び出すことができる com コンポーネントでラップされる matlab コードを記述できるようになります。つまり、必要な .net 言語で GUI を記述できます。そのリンクは以下です。 http://www.mathworks.com/products/netbuilder/

于 2008-12-03T11:40:03.930 に答える