LabVIEW​オブジェクト​指向​プログラミング​FAQ

概要

オブジェクト​指向​プログラミング (OOP) は、​プログラミング​言語、​開発​環境、​および​業界​の​違い​を​超​えて​使用​さ​れ​て​いる​プログラミング​パ​ラ​ダイ​ム​です。​この​記事​では、​LabVIEW OOP​に関する、​よく​ある​質問​について​説明​し​ます。​この​ドキュメント​は、​OOP​の​基本​的​な​用語​と​プロセス​の​理解​し​て​いる​こと​を​前提​として​い​ます。

内容

LabVIEW​オブジェクト​指向​プログラミング​の​利点

C​+​+の​オブジェクト​指向​プログラミング​と​LabVIEW​の​オブジェクト​指向​プログラミング​の​違い​は​何​です​か?


​C​+​+は​テキスト​ベース​の​関数​型​言語​で、​LabVIEW​は​グラフィカル​な​データ​フロー​言語​です。​この​違い​により、​オブジェクト​指向​機能​の​表現​方法​に​違い​が​生​じ​ます。

  • LabVIEW​に​は​すべて​の​オブジェクト​に​根本​的​な​先祖​クラス​が​あり​ます。​C​+​+に​は​ありま​せん。
  • C​+​+に​は​コンス​トラクタ​が​あり​ます​が、​LabVIEW​に​は​不要​です。
  • C​+​+に​は​デ​スト​ラ​クタ​が​あり​ます​が、​LabVIEW​に​は​不要​です。
  • C​+​+に​は​オブジェクト​を​パラメータ​として​渡す​ため​の、​リファレンス​による​構文​と​値​による​構文​の​両方​が​あり​ます。​LabVIEW​に​は​値​による​構文​しか​ありま​せん。​リファレンス​は​他の​機能​により​作成​さ​れ​ます。
  • LabVIEW​は​自動的​に​データ​変異​を​行う​ため、​クラス​が​編集​さ​れ​てい​て​も​ユーザ​は​古い​データ​を​読み出す​こと​が​でき​ます。​C​+​+では​自動的​に​データ​変異​が​行​われ​ない​ため、​ユーザ​は​バージョン​の​変更​を​追跡​し​データ​の​変異​コード​を​書く​必要​が​あり​ます。
  • C​+​+に​は​テンプレート​が​あり​ます​が、​LabVIEW 8.2​以降​に​は​ありま​せん。
  • C​+​+に​は​純粋​仮想​関数​が​あり​ます​が、​LabVIEW 8.2​以降​に​は​ありま​せん。
  • C​+​+に​は​複数​の​継承​が​あり​ます​が、​LabVIEW​に​は​ありま​せん。
     

これらの​相違​点​に関する​詳細​は、​Developer Zone​チュートリアル『LabVIEW​オブジェクト​指向​プログラミング:​設計​上の​判断』​を​参照​し​て​くだ​さい。

LabVIEW​オブジェクト​指向​プログラミング​の​主​な​利点​は​何​です​か?


​LabVIEW​の​新規​ユーザ​にとって​の​利点​は​何​です​か?

  • LabVIEW​の​強み​は、​コンピュータ​サイエンス​の​技術​を​プログラマ​以外​の​人​に​も​利用​可能​に​する​こと​です。​LabVIEW​オブジェクト​指向​プログラミング​は​最も​先進​的​な​プログラミング​技術​を​新規​ユーザ​に​提供​し​ます。​オブジェクト​指向​プログラミング​では​計画​段階​において​より​多く​の​コミットメント​が​必要​で​ある​ため、​一般​的​に、​大規模​ソフトウェア​の​開発​に​採用​さ​れる​場合​が​多い​です。
  • オブジェクト​指向​プログラミング​は、​機能​仕様​で​使用​さ​れ​て​いる​用語​を​使用​し​て​ソフトウェア​計画​を​行い​ます。​機能​の​説明​に​は、​スクリーン​上​に​表示​する​項目​や​機能​が​操作​を​行う​データ​が​記載​さ​れ​ます。​オブジェクト​指向​プログラミング​では、​データベース​オブジェクト、​ボタン​オブジェクト、​電子​メール​オブジェクト​といった​用語​ごと​に​関連​コード​を​書く​こと​が​でき​ます。


​B. 経験​の​ある​グラフィック​言語​プログラマ​にとって​の​利点​は​何​です​か?

  • デバッグ​が​容易 ― コード​が​モジュール​化​さ​れ​て​いる​ため、​バグ​が​存在​する​かも​し​れ​ない​VI​を​絞る​こと​が​でき​ます。
  • 保守​が​容易 ― オブジェクト​指向​プログラミング​により、​時間​の​経過​とともに​開発​者​の​生産​性​が​上​が​って​ゆき​ます。​開発​者​は​機能​を​追加​した​い​分野​を​容易​に​識別​する​こと​が​でき、​関係​の​ない​コード​箇所​で​エラー​を​招く​可能性​が​少​なく​なり​ます。


​LabVIEW​オブジェクト​指向​プログラミング​を​使用​すべ​き​な​の​は​どの​よう​な​場合​です​か?
 

  • 長期間​にわたって​保守​さ​れる​VI
  • 大規模​アプリケーション
  • 複数​の​開発​者​が​同一​の​VI​を​作業


​LabVIEW​オブジェクト​指向​プログラミングを使用​すべ​き​で​ないの​は​どの​よう​な​場合​です​か?
 

  • 開発​期間​の​短い​ユーザ
  • 計測​を​目的​と​した​単一​VI​を​素​早く​開発​する​よう​な​場合、​LabVIEW​クラス​は​過度​の​作業


​LabVIEW​オブジェクト​指向​プログラミング​の​使用​例​を​教え​て​くだ​さい。


​タスク​ベース​の​アプローチ​と​オブジェクト​指向​の​アプローチ​を​比較​し​て​いる​テスト​および​計測​の​例​は、​LabVIEW 8.2​以降​に​含​ま​れる​「Board Testing」​サンプル​プロジェクト​を​参照​し​て​くだ​さい。

labview​\examples​\lvoop​\BoardTesting​\Board Testing.lvproj

LabVIEW​オブジェクト​指向​プログラミング​の​使用法

LabVIEW​オブジェクト​指向​プログラミング​の​使用​法​について​さらに​学習​した​い​の​ですが、​トレーニング​教材、​アプリケーション​ノート、​チュートリアル、​デモ​スクリプト、​サンプル​など​は​ありま​すか?


​LabVIEW 8.2​以降​に​は、​LabVIEW​オブジェクト​指向​プログラミング​の​サンプル​が​含​まれ​てい​ます。​この​ドキュメントの追加​情報セクション​も​参照​し​て​くだ​さい。

既存​の​プロジェクト​を​LabVIEW​オブジェクト​指向​プログラミング​に​移行​する​に​は​どう​したら​よい​です​か?


​既存​の​タイプ​定義​を​LabVIEW​クラス​に​変換​する​ところ​から​開始​し​ます。プロジェクト​エ​クス​プ​ローラウィンドウ​で​タイプ​定義​を​右​クリック​し、​ショートカット​メニュー​から制御​器​の​中身​を​クラス​に​変換を​選択​し​ます。​LabVIEW​クラス​の​作成​に関する​詳細​は『LabVIEW ヘルプ』​を​参照​し​て​くだ​さい。

メモ: 制御​器​の​デフォルト​値​と​定数​は​変換​時に​保持​さ​れ​ま​せん。​タイプ​定義​の​詳細​に​アクセス​する​に​は、​その​タイプ​定義​に​アクセス​する​必要​の​ある​クラス​に​VI​を​追加​し​て​くだ​さい。​オブジェクト​指向​プログラミング​の​基本​は、​操作​する​データ​に​基​づ​い​て​VI​を​グループ​化​する​こと​です。​オブジェクト​指向​設計​に関する​詳細​は、​追加​情報​セクション​に​ある​NI Week 2006​の​2​つ​の​プレゼンテーション​(英語)​を​参照​し​て​くだ​さい。

LabVIEW​オブジェクト​指向​プログラミング​で​「リファレンス」​を​実装​する​に​は​どう​す​れ​ば​よい​です​か。


​LabVIEW 8.2​以降​で​含​ま​れる​「ReferenceObject」​サンプル​プロジェクト​を​参照​し​て​くだ​さい。

labview​\examples​\lvoop​\ReferenceObject​\ReferenceObject.lvproj

基本​的​に​は、​クラス​の​プライベート​データ​を​リファレンス​にし​ます。​この​サンプル​では、​単一​要素​の​キュー​リファレンス​を​使用​し​て​それ​を​実装​する​方法​を​示し​てい​ます。​GOOP​ツール​キット​を​使用​する​こと​も​でき​ます​(以下​の​LabVIEW​オブジェクト​指向​プログラミング​と​GOOP​ツール​キット​セクション​を​参照​し​て​くだ​さい)。

LabVIEW​クラス​は​LabVIEW Real-​Time​や​その他​の​非​デスク​トップ​ターゲット​でも​動作​し​ます​か?


​LabVIEW 2009​では、​オブジェクト​指向​が​LabVIEW Real-​Time​ターゲット​で​サポート​さ​れる​よう​に​なり​ま​した。​LabVIEW 8.6​以前​では、​オブジェクト​指向​プログラミング​は​リアルタイム​では​サポート​さ​れ​てい​ま​せん。 

VI​を​閉じる​と、​なぜ​VI​用​の​「変更​を​保存」​ダイ​ア​ログ​ボックス​と、​LabVIEW​クラス​用​の​「変更​を​保存」​ダイ​ア​ログ​ボックス​が​表示​さ​れる​の​です​か?​表示​さ​れる​の​が​すべて​を​保存​する​ため​の​ダイ​ア​ログ​ボックス​(1​つ)​で​ない​の​は​なぜ​です​か?


​VI​を​閉じる​際、​LabVIEW​は​その​VI​が​閉​じ​られる​こと​により​使用​さ​れ​なくなる​サブ​VI​を​すべて​把握​し​て​いる​ため、​それら​を​保存​する​か​どうか​を​尋ねる​ダイ​ア​ログ​ボックス​を​表示​し​ます。​一方、​クラス​は​すべて​の​データ​インスタンス​が​メモリ​から​なくなる​まで​メモリ​に​保持​さ​れる​ため、​任意​の​VI​が​閉​じ​られる​こと​で​データ​の​最後​の​インスタンス​が​閉​じ​られる​か​どうか​について​は​LabVIEW​は​把握​でき​ま​せん。​VI​の​コード​内​に​クラス​へ​の​リファレンス​が​ない​場合​でも、​どこか​の​バリアント​内​に​クラス​の​インスタンス​が​含​ま​れる​可能性​が​あり​ます。​すべて​の​VI​が​アイドル​状態​で​ある​場合、​何​個​の​クラス​インスタンス​が​これらの​VI​とともに​なくなる​の​か、​それ​が​メモリ​内​に​残​って​いる​すべて​の​クラス​インスタンス​にあたる​の​か​を、​LabVIEW​は​把握​する​こと​が​でき​ます。​LabVIEW​は、​クラス​が​VI​とともに​メモリ​から​なくなる​こと​を​把握​し​て​いる​ため、​VI​や​ライブラリ​に対する​変更​を​保存​する​か​を​尋ねる​「変更​を​保存」​ダイ​ア​ログ​ボックス​において、​クラス​に対する​変更​を​保存​する​か​について​も​一緒​に​尋ねる​こと​が​でき​ます。​ただし、​いずれ​か​の​VI​が​実行​中​の​場合、​インスタンス​の​数​は​常に​変動​し​てい​ます。​また​VI​の​実行​中​に​は、​データ​が​キュー​や​ノーティファイア​など​検索​不可能​な​場所​に​隠れ​て​しまう​可能性​が​あり​ます。​VI​が​アイドル​状態​に​な​っ​た​場合​に​のみ​これらの​追加​スペース​が​空​に​なり​ます。​また、​LabVIEW​が​既に​チェック​し​終​わっ​た​場所​に、​実行​中​の​VI​によって​新規​インスタンス​が​作成​さ​れ​て​しまう​場合​も​あり​ます。​この​ため、​VI​の​実行​中​に​インスタンス​を​数える​こと​は​不可能​です。​LabVIEW​は​変更​を​保存​する​か​どうか​を​尋​ね​た​後で​実行​中​の​VI​を​中断​する​ため、​その​時点​では、​クラス​が​メモリ​から​なくなる​か​どうか​は​LabVIEW​に​は​判断​でき​ま​せん。​すべて​の​VI​が​アイドル​状態​に​あり​LabVIEW​が​データ​の​検索​を​行う​こと​が​でき​た​として​も、​データ​の​検索​に​は​非常​に​多く​の​時間​が​かかる​ため、​LabVIEW​は​検索​を​試みる​こと​は​ありま​せん。​したがって​ほとんど​の​場合、​VI​を​閉じる​と​クラス​に対する​変更​を​保存​する​か​どうか​を​尋ねる​「変更​を​保存」​ダイ​ア​ログ​ボックス​が​別に​表示​さ​れ​ます。

​プロジェクト​を​閉じる​場合​のみ、​LabVIEW​が​VI​や​ライブラリ​とともに​クラス​を​閉じる​こと​が​でき​「変更​を​保存」​ダイ​ア​ログ​ボックス​が​1​回​のみ​表示​さ​れ​ます。​この​場合、​プロジェクト​内​の​すべて​の​VI​が​閉​じ​られる​ため、​LabVIEW​は​クラス​の​すべて​の​データ​インスタンス​を​考慮​する​こと​なく​廃棄​し​て​よい​という​こと​が​判断​でき​ます。

LabVIEW​オブジェクト​指向​プログラミング​と​GOOP​ツール​キット

GOOP​ツール​キット​と​は​何​です​か?


​GOOP​開発​パッケージはナショナル​イン​ス​ツル​メンツ​の​ウェブサイトから​無料​で​ダウンロード​い​た​だけ​ます。 

LabVIEW 8.2​以降​でも​GOOP​を​使用​でき​ます​か?


​はい。

Endevo​社​の​GOOP​ツール​キット​と​LabVIEW​オブジェクト​指向​プログラミング​を​一緒​に​使用​すると​どの​よう​に​動作​し​ます​か?​ それら​を​一緒​に​使用​すべ​き​時、​または​LabVIEW​オブジェクト​指向​プログラミング​では​なく​Endevo​社​の​GOOP​ツール​キット​を​使用​すべ​き​時​は​どの​よう​な​場合​です​か?​また​その​使用​法​について​教え​て​くだ​さい。


​多く​の​ユーザ​は​アプリケーション​に​は​LabVIEW​クラス​が​最適​で​ある​と​答える​で​しょう。​LabVIEW​クラス​は、​ユーザ​にとって​馴染み​の​深い​「クラスタ」​の​よう​に​動作​し​ます。

リファレンス​は、​並列​に​実行​する​複数​コード​セクション​間​の​通信​に​使用​さ​れ​ます。​システム​リソース​の​UML​モデリング​を​行​って​いる​お客様​にとって​リファレンス​モデル​は​非常​に​有益​に​なる​ため、​GOOP​クラス​を​作成​した​いと​思​われる​で​しょう。​リファレンス​は、​グラフ​や​ツリー​データ​ストラクチャ​を​作成​する​際​に​も​有益​です。​ただし​この​よう​な​場合​も、​GOOP​クラス​の​核​と​なる​データ​フィールド​は​LabVIEW​クラス​でも​提供​さ​れ​て​いる​可能性​が​あり​ます。​並列​コード​セクション​間​の​通信​に​リファレンス​や​その他​の​手段​を​使用​する​に​は、​ロック、​競合​状態、​その他​の​複雑​な​内容​について​知​って​おく​必要​が​あり​ます。

リファレンス​モデル​を​使用​すると、​メモリ​内​で​その​クラス​が​確実​に​重複​しない​よう​に​する​こと​が​でき​ます。​これ​は、​多く​の​メモリ​を​必要​と​する​クラス​の​場合​に​有益​です。

Endevo​社​の​GOOP​ツール​キット​を​使用​し​て​いる​アプリケーション​を​LabVIEW​オブジェクト​指向​プログラミング​に​移行​すべ​き​です​か? GOOP​ツール​キット​を​使用​し​て​いる​顧客​の​既存​アプリケーション​を​LabVIEW​オブジェクト​指向​プログラミング​で​実装​すべ​き​場合​は​どの​よう​な​時​です​か?


​既存​の​GOOP​クラス​を​LabVIEW​クラス​として​書き直す​必要性​は​ありま​せん。​1​つ​に​は、​動作​し​て​いる​コード​を​重大​な​理由​も​なく​破棄​すべ​き​で​ありま​せん​し、​GOOP​クラス​は​LabVIEW 8.2​以降​では​引き続き​動作​し​ます。​実際​の​ところ、​GOOP​ツール​キット​は​LabVIEW​で​書​か​れ​て​いる​の​です。​さらに、​リファレンス​によって​動作​し​て​いる​コード​を​値​によって​動作​する​コード​に​変更​する​に​は、​極めて​膨大​な​作業​が​発生​し​ます。

移行​する​理由​の​ひとつ​は、​パフォーマンス​です。​オブジェクト​に対する​大量​の​オーバー​ヘッド​は、​各​関数​の​呼び出し​において​リファレンス​検索、​インスタンス​の​ロック、​データ​抽出​が​行​われる​際​に​発生​し​ます。​GOOP​ツール​キット​では​この​オーバー​ヘッド​を​極力​減らす​よう​に​優​れ​た​設計​が​行​われ​てい​ます​が、​オーバー​ヘッド​が​ある​こと​は​否​め​ま​せん。​さらに、​リファレンス​を​使用​しな​け​れ​ば​並列​処理​が​可能​な​多く​の​操作​が、​リファレンス​を​使用​する​こと​で​並列​処理​でき​なく​なり​ます。​リファレンス​によって​動作​する​必要​が​なく​パフォーマンス​を​重視​する​クラス​が​ある​場合​は、​GOOP​クラス​から​LabVIEW​クラス​へ​の​移行​を​検討​し​て​も​よい​で​しょう。

GOOP​を​使用​し​て​いる​アプリケーション​を​LabVIEW​オブジェクト​指向​プログラミング​に​移行​する​に​は​どう​す​れ​ば​よい​です​か?


​この​質問​に対する​回答​は​状況​によって​異​なり​ます。​LabVIEW​では、​自動​変換​を​行う​方法​が​提供​さ​れ​てい​ま​せん。

LabVIEW​オブジェクト​指向​プログラミング​と​Endevo​社​の​GOOP​ツール​キット​に​パフォーマンス​上の​違い​は​ありま​すか?


​同じ​状況​下​において​は、​LabVIEW​クラス​は​GOOP​クラス​より​も​優​れ​た​パフォーマンス​を​発揮​し​ます。​これ​は​LabVIEW​クラス​が​データ​フロー​に​沿​って​おり、​ダイナミック​ディスパッチ​の​ネイティブ​コンパイラ​で​ある​ため​です。​と​は​いえ、​同等​の​状況​は​ほとんど​存在​しま​せん。​LabVIEW​クラス​は​クラスタ​を​置換え​て​データ​フロー​を​改善​する​よう​に​設計​さ​れ​てい​ます。​GOOP​クラス​は​LabVIEW​に​リファレンス​を​追加​する​手段​です。​2​つ​の​クラス​は​異なる​目的​を​果たして​い​ます。​新規​クラス​の​作成​時には、​パフォーマンス​では​なく​クラス​が​必要​と​する​機能​によって、​GOOP​クラス​か​LabVIEW​クラス​か​を​決定​すべ​き​です。

技術​的​詳細

タイプ​定義​さ​れ​た​クラスタ​の​代わり​に​LabVIEW​クラス​を​使用​する​こと​で​得​られる​パフォーマンス​上の​違い​は​何​です​か?


​さまざま​な​種類​の​コンピュータ​における​ベンチマーク​では、​この​2​つ​の​パフォーマンス​は​ほとんど​同じ​で​ある​こと​が​明らか​に​な​って​い​ます。​パフォーマンス​に関する​詳細​について​は、​下​の​質問​を​参照​し​て​くだ​さい。 

通常​の​サブ​VI​呼び出し​と​比較​し​て、​サブ​VI​の​動的​呼び出し​を​行う​場合​の​パフォーマンス​上の​オーバー​ヘッド​は​何​です​か?


​サブ​VI​の​ダイナミック​ディスパッチ​を​行う​と、​どの​サブ​VI​を​呼び出す​か​を​LabVIEW​が​検索​する​ため、​ある程度​の​小さな​オーバー​ヘッド​が​発生​し​ます。​オーバー​ヘッド​の​量​は​一定​で​あり、​より​多く​の​クラス​を​追加​し​て​も、​クラス​により​多く​の​動的​VI​を​追加​し​て​も​増加​しま​せん。​LabVIEW​が​呼び出す​実際​の​サブ​VI​の​機能​に​合致​させる​ため、​サブ​VI​呼び出し​によって​パラメータ​の​コピー​が​余分​に​作成​さ​れ​て​しまう​と、​パフォーマンス​に​影響​を​与える​可能性​が​あり​ます。​呼び出す​こと​を​想定​し​てい​ない​ダイナミック​VI​において​も​フロント​パネル​上の​入力​端子​を​フロント​パネル​上の​出力​端子​に​配線​する​こと​によって、​この​問題​を​回避​する​こと​が​でき​ます​(たとえば、​子​VI​によって​上書き​さ​れる​コネ​クタ​ぺ​ーン​を​定義​する​ため​だけ​に​存在​する​親​VI​など)。​ダイナミック​ディスパッチ​において​オーバー​ヘッド​パフォーマンス​が​どの​よう​にし​て​一定​に​抑え​ら​れ​て​いるか​に関する​詳細​は、『LabVIEW​オブジェクト​指向​プログラミング:​設計​上の​判断』​を​参照​し​て​くだ​さい。

LabVIEW​クラス​ライブラリ​と​プロジェクト​ライブラリ​の​相違​点​は​何​です​か?


​LabVIEW​クラス​は​プロジェクト​ライブラリ​の​一種​ですが、​データタイプ​の​定義​に​特​化​し​てい​ます。​LabVIEW​クラス​は、​プロジェクト​ライブラリ​と​同様​に、​メンバー​VI​の​スコープ​と​ネーム​スペース​を​定義​し​ます。​VI​は​1​つ​の​LabVIEW​クラス​に​のみ​所有​さ​れ​ます。 

​LabVIEW​クラス​に​は、​プライベート​データ​制御​器​が​含​まれ​ます。​プライベート​データ​制御​器​は​クラス​の​データ​値​を​定義​し​ます。​この​特別​な​制御​器​は​他の​種類​の​ライブラリ​に​は​含​まれ​ま​せん。​この​制御​器​は​クラス​ファイル​内​に​格納​さ​れ​ます。​LabVIEW​クラス​に​は、​ライブラリ​の​持つ​すべて​の​プロパティ​以外​に​追加​の​プロパティ​も​あり​ます。​追加​の​プロパティ​は、クラスプロパティダイ​ア​ログ​ボックスの継承ページ、プローブページ、ワイヤ​の​外観ページ​で​確認​でき​ます。

​プロジェクト​ライブラリ​に​は​あっ​て​LabVIEW​クラス​に​は​ない​唯一​の​機能​は、​サブ​ライブラリ​を​持てる​こと​です。 

LabVIEW​オブジェクト​指向​プログラミング​を​使用​すると、​いつ​何​が​ロード​さ​れ​ます​か?


​LabVIEW​クラス​を​使用​した​VI​の​場合、​VI​が​その​サブ​VI​を​ロード​する​の​と​同様​に、​VI​を​ロード​すると​クラス​が​ロード​さ​れ​ます。​LabVIEW​クラス​は、​すべて​の​メンバー​VI​と​その​親​クラス​を​ロード​し​ます。​親​クラス​は​子​クラス​の​ロード​を​自動的​に​トリガ​しま​せん。​親​クラス​は​子​クラス​と​の​リンク​を​持ち​ま​せん。​親​クラス​の​メンバー​VI​が​子​クラス​を​使用​し​て​いる​場合​は、​子​クラス​が​ロード​さ​れ​ます。

「値​による​手法」​と​「リファレンス​による​手法」​と​は​何​です​か? それぞれ​の​利点​と​欠点​は​何​です​か?


​「値​による​手法」​では、​その​ワイヤ​の​種類​において​実際​の​データ​が​ワイヤ​上​で​渡​さ​れ​ます。​「リファレンス​による​手法」​の​場合、​その種類のデータへのリファレンスがワイヤで渡され、​実際​の​データ​は​セントラル​リ​ポジ​トリ​に​格納​さ​れ​ます。​数値、​配列、​クラスタ、​文字​列、​ブール、​パス​など、​ほとんど​の​LabVIEW​の​データタイプ​は​値​を​渡し​ます。​一般​的​に、​リファレンス​で​渡​さ​れる​の​は、​通信​用​に​使用​する​場合​や、​ファイル​refnum、​キュー​refnum、​VI​サーバ​refnum​など​の​システム​リソース​を​反映​させる​場合​のみ​です。​LabVIEW​クラス​では​値​が​渡​さ​れ​ます。​値​による​構文​では、​各​オブジェクト​に​それぞれ​の​データ​値​が​含​ま​れる​ため、​それぞれ​オブジェクト​を​独立​し​て​修正​する​こと​が​でき​ます。​リファレンス​による​構文​では、​複数​オブジェクト​が​参照​する​データ​の​インスタンス​は​1​つ​のみ​です。​1​つ​の​オブジェクト​が​データ​を​修正​する​場合、​その​データ​を​読み書き​する​その他​の​オブジェクト​と​競合​しない​よう​に​注意​する​必要​が​あり​ます。​主​な​利点​と​欠点​は​以下​の通り​です。

  • 値​を​使用​すると​競合​状態​を​回避​する​こと​が​できる​ため、​LabVIEW​など​の​極めて​並列​処理​の​多い​環境​において​は​適​し​てい​ます。
  • 値​を​使用​すると、​データ​の​コピー​を​いつ​作成​すべ​き​か​の​判断​が​コンパイラ​によって​行​われる​ため、​プログラマ​の​負担​が​軽減​さ​れ​ます。
  • リファレンス​を​使用​すると、​プログラマ​による​割り当て​が​可能​で​ある​ため、​単一​インスタンス​の​リソース​や​大きな​データセット​の​場合​に​は​適​し​て​いる​場合​が​あり​ます。


​LabVIEW​オブジェクト​指向​プログラミング​は​なぜ​リファレンス​では​なく​値​を​使用​する​の​です​か?


LabVIEW​オブジェクト​指向​プログラミング:​設計​上の​判断』​を​参照​し​て​くだ​さい。

LabVIEW​クラス​の​作成/​管理​を​行う​UML​ツール​が​ナショナル​イン​ス​ツル​メンツ​から​提供​さ​れ​てい​ます​か?


​NI​から​UML​ツール​は​提供​さ​れ​てい​ま​せん。​Endevo​社​より、​UML​ダイアグラム​から​クラス​を​生成​し、​コード​から​UML​ダイアグラム​を​生成​する​ツール​(英語)​が​提供​さ​れ​てい​ます。​この​ツール​は​現在​の​ところ​GOOP​クラス​用​ですが​(上記​の​「LabVIEW​オブジェクト​指向​プログラミング​と​GOOP​ツール​キット」​セクション​を​参照)、​次期​バージョン​では​LabVIEW​クラス​も​同様​に​サポート​さ​れる​よう​に​なり​ます。

LabVIEW​クラス​の​制御​器​や​表示​器​で​「現在​の​値​を​デフォルト​設定​に​する」​オプション​が​使用​でき​ない​の​は​なぜ​です​か?​LabVIEW​オブジェクト​指向​プログラミング​定数​の​値​を​設定​でき​ない​の​は​なぜ​です​か?


​現在​の​値​を​デフォルト​設定​に​する
オプション​は、​LabVIEW​の​便利​な​機能​です。​さまざま​な​VI​において​頻繁​に​使用​さ​れる​かも​し​れ​ま​せん。​優​れ​た​ユーザ​インタフェース​を​提供​する​の​が​複雑​で​ある​ため、​この​機能​は​LabVIEW 8.2​以降​の​LabVIEW​クラス​で​サポート​さ​れ​てい​ま​せん。​この​ため、​ユーザ​は​プライベート​データ​で​ある​ため​に​その​データ​を​実際​に​は​見る​こと​が​でき​なく​て​も、​データ​が​デフォルト​値​と​異なる​場合​は​気​付き​ます。​この​機能​は、​今後​の​LabVIEW​の​バージョン​で​対応​する​優先​事項​の​ひとつ​です。

ダイナミック​VI​を​再入​可能​に​設定​でき​ない​の​は​なぜ​です​か?


​LabVIEW 8.2​では​再入​可能​な​ダイナミック​VI​は​サポート​さ​れ​てい​ま​せん。​なぜなら、​ダイナミック​サブ​VI​ノード​の​編集​時には​LabVIEW​が​実行​時に​どの​サブ​VI​を​呼び出す​の​か​が​不明​で​ある​ため、​各​ノード​で​可能性​の​ある​すべて​の​サブ​VI​の​ク​ローン​を​作成​する​必要​が​生じる​から​です。​これ​により、​メモリ​が​非常​に​多く​使用​さ​れ​て​しま​い​ます。

(LabVIEW 8.5) LabVIEW 8.5​では​再入​可能​な​ダイナミック​VI​を​使用​でき​ます。

ダイナミック​ディスパッチ​VI​を​再帰​VI​として​構成​した​り、​ダイナミック​ディスパッチ​VI​自体​の​定義​の​一部​として​使用​する​こと​が​でき​ます。​再帰​VI​は​その​ブロック​ダイ​ア​グラム​内​あるいは​サブ​VI​の​ブロック​ダイ​ア​グラム​内​で​自分​自身​を​呼び出す​こと​が​でき​ます。​再帰​は、​同じ​プロセス​の​出力​において​何​度​も​処理​を​行う​場合​に​便利​です。​ダイナミック​ディスパッチ​メンバー​VI​を​再入​可能​に​設定​し​て​再帰​を​許可​し、​インスタンス​間​で​ク​ローン​を​共有​する​よう​構成​する​こと​が​でき​ます。

VI​を​再帰​可能​に​構成​する​に​は​以下​の​手順​に従います。

  1. ダイナミック​ディスパッチ​メンバー​VI​を​開く​か​作成​し​て​くだ​さい。
  2. VI​を​再入​可能​に​設定​し​ます。
     
    1. ファイル​→VI​プロパティを​選択​し​て、VI​プロパティダイ​ア​ログ​ボックス​を​表示​し​ます。
    2. カテゴリプ​ル​ダウン​メニュー​から実行を​選択​して実行​プロパティページ​を​表示​し​ます。
    3. 再入​実行チェック​ボックス​を​オン​にしてインスタンス​間​で​ク​ローン​を​共有​するを​選択​し​ます。
       
  3. 再帰​を​行う​メンバー​VI​を​実装​し​ます。
     

メモ:  無限​再帰​に対する​対処​を​行​わ​ない​場合、​不要​な​メモリ​使用​が​発生​した​り​LabVIEW​が​クラッシュ​する​可能性​が​あり​ます。​無限​再帰​を​回避​する​に​は、​再帰​VI​を​ケース​ストラクチャ​内​で​呼び出し​て​くだ​さい。

追加​情報

  • LabVIEW​オブジェクト​指向​プログラミング:​設計​上の​判断』​を​参照​し​て​くだ​さい。 
  • コミュニティ​Web​ドキュメント: Applying Common Object-​Oriented (OO) Design Patterns to LabVIEW(英語)
    ​この​ドキュメント​では、​他の​プログラミング​言語​の​さまざま​な​デザイン​パターン​と、​それらの​パターン​を​LabVIEW​で​実装​する​方法​について​説明​し​ます。​デザイン​パターン​を​使用​する​こと​で、​特定​の​プログラミング​課題​を​解決​する​ため​に​作成​する​必要​の​ある​クラス​を​識別​し、​クラス​間​の​相互​動作​を​最も​効率​よくする​こと​が​でき​ます。​この​ドキュメント​は​プログラミング​技術​の​進歩​に​伴​い​随時​修正​さ​れ​ます。
  • LabVIEW​オブジェクト​指向​プログラミング​の​導入​ビデオ: NI LabVIEW Virtual User Groups:New Features in LabVIEW Object-​Oriented Programming(英語)
    ​オブジェクト​指向​プログラミング​の​基礎​と​LabVIEW​における​アクセス​方法​について、​詳​しく​説明​し​てい​ます。​文書​より​も​ビデオ​を​好​ま​れる​方​に​お​奨め​です。
  • LabVIEW​クラス​と​ハードウェア​の​陳腐​化:How to Mitigate Hardware Obsolescence in Next-​Generation Test Systems(英語)
  • Object Oriented Design Patterns Technical Manual and Exercises(英語) - LabVIEW​クラス​を​使用​した​中間​レベル​デザイン​パターン​について​の​自習​形式​ハンズ​オン​ガイド​に​対応​した​ドキュメント​および​サポート​VI​です。​LabVIEW​クラス​の​基本​を​理解​し​て​おり、​より​大きな​アプリケーション​コンテキスト​で​これらの​クラス​を​使用​する​方法​を​確認​した​い​学生​を​対象​として​い​ます。​この​ハンズ​オン​セッション​は、​NI Week 2011​で​初めて​紹介​さ​れ​ま​した。​サイト​に​ある​VI​は​LabVIEW​バージョン​2011​用​に​保存​さ​れ​てい​ます。​バージョン​2010​に​対応​した​VI​も​ご​利用​い​た​だけ​ます。​Web​ページ​の​コメント​セクション​で​「2010」​を​検索​し​て​くだ​さい。