狠狠撸

狠狠撸Share a Scribd company logo
LabVIEW NXG OOP Training
Yusuke Tochigi
NXG 5.0 Version
LabVIEW NXG OOP Training 2
このトレーニングについて
LabVIEW NXG は Object-Oriented-Programming (OOP) 言語です。 OOP
手法を用いてアプリケーションを開発することで以下のメリットがあります。
●
凝集度が高くなり、結合度が下がる
●
コードの再利用がしやすい
●
仕様変更や拡張へ柔軟に対応できる
●
単体テストが容易になる
一方でクラスでの開発は工数が増える傾向にあり、簡易なアプリケーションでは、逆に無
駄な工数が生じる場合もあります。 OOP での開発は、アプリケーション規模と工数を天
秤にかけながら採用を判断します。
このトレーニングでは LabVIEW NXG における OOP の基本を紹介します。
LabVIEW NXG OOP Training 3
OOP の基本 - クラス
クラスとは、データとデータを操作するメソッドの集合体です。
データとは、クラスが持つ情報です。クラスには異なるデータタイプの様々な情報を持たせ
ることができます。その情報を利用して何かの操作をする VI をメソッドと呼びます。
実は LabVIEW NXG の各制御器 / 表示器は、クラスの考え方に基づいて作られてい
ます。例えば数値制御器では以下のようなクラス構造になっています。
数値制御器クラス
数値 : Double
最小 : Double
最大 : Double
キーフォーカス : Boolean
+ データをキャプチャ
+ デフォルト値に再度初期化
LabVIEW NXG OOP Training 4
OOP の基本 - クラスとオブジェクト
オブジェクトは、クラスに基づき生成された実体のあるモノです。
正確ではありませんが、例えば次のように説明できます。パレットにはクラスがリストされて
います。クラスをパネル上に配置するとオブジェクトが生成され、 VI 上で利用できます。
この例では、パネル上に配置された数値制御器は、「数値制御器クラス」を元に作成さ
れたオブジェクトです。
クラス
オブジェクト
LabVIEW NXG OOP Training 5
OOP の基本 - カプセル化
カプセル化は、クラスデータへのアクセスを制限することで、データの不整合を防ぐ仕組み
です。クラスデータの読み書きは、クラスに所属する VI からのみ可能です。
●
データ操作の場所を限定することで、デバッグ時の調査が容易になる
●
データ構造を変更した場合、影響はクラス内に限定され、その他の場所に影響しない
OOP ではカプセル化により読み書きの自由度を制限し、不整合を防ぎます。またこれに
より、機能追加?変更が容易になります。これは後に詳しく紹介します。
LabVIEW NXG OOP Training 6
OOP の基本 - 継承
継承は、クラスが既存クラスからデータやメソッドを引継ぐことです。継承元を「親クラス」ま
たは「抽象クラス」、継承先を「子クラス」と呼びます。継承には以下のメリットがあります。
●
子は親と同じクラスデータを持ち、同じメソッドを実行できる
●
クラス間で共通の機能を、親クラスで一括して実装できる
以下の例では、デバイス間共通のデータとメソッドを親クラスで定義しています。個々で
必要なデータやメソッドは、子クラスで定義します。クラス毎に異なる Initialize を実装
したい場合には ? 次にご紹介するオーバーライドでその課題を解決します。
LabVIEW NXG OOP Training 7
OOP の基本 - オーバーライド
親クラスが持つメソッドは、子クラスが引き継ぐことができます。しかし同じメソッドでも、親
と異なる機能を実装したい場合もあります。
親クラスのメソッド VI と同じ名前の VI を子クラスで作成できます。これを「オーバーライ
ド」と呼び、子クラスは上書きしたメソッド VI を使用します。以下の例は、各クラスが
Speak メソッドを呼び出した時の動作を表しています。 Class B は Speak メソッドをオ
ーバーライドするので動作が異なります。
Parent
Class A
Class B
Speak Walk
Speak
Hello
Hello こんにちわ
Speak メソッドの
オーバーライド
LabVIEW NXG OOP Training 8
OOP の基本 - ダイナミックディスパッチ
継承により、親クラスのメソッドを子クラスでオーバーライドできます。この時「ダイナミックデ
ィスパッチ」という性質により、各インスタンスがどのクラスのメソッドを呼び出すかは、メソッ
ド実行時に決定されます。
●
Abstract クラスは DAQ クラスの親クラス
●
DAQ クラスは Abstract クラスの Initialize メソッドをオーバーライド
親子クラスは配列にまとめられます。これは Abstract クラスの配列になりますが、子クラ
スは自分が子であることを覚えています。 For ループの 1 回目の実行は Abstract クラ
スが渡され、 Abstract クラスの Initialize が実行されます。 2 回目は DAQ クラスが
渡され、 DAQ クラスの Initialize が実行されます。
LabVIEW NXG OOP Training 9
ダイナミックディスパッチの例
例えば DUT 試験のようにハードウェアを用いた検査システムを考えます。検査のシーケ
ンスはオペレータが自由に変更できることが必要です。ダイナミックディスパッチを採用する
と、 For ループの中にクラス共通のメソッドを配置するだけで実装が完了します。
検査シーケンスはクラス配列の順序で決まります。今回の例では、 For ループ外側のコ
ードをファイルから読み取るような実装にすると、テキストファイルの編集でシーケンスを制
御することができます。
LabVIEW NXG OOP Training 10
LabVIEW NXG における OOP 開発
それでは実際に自動車を例として、 OOP 開発を行います。
以下の要件を持つクラスを開発します。
要件
●
自動車クラスは以下のデータを持つ
- Production Date ( 製造日 )
- Speed
●
自動車クラスは以下のメソッドを持つ
- Speed up ( 速度に +1)
- Speed down ( 速度に -1)
●
TypeA クラスは自動車クラスを継承し、燃料を表す「 gas 」データと指定量の燃料を
入れる Fill メソッドを持つ。燃料の残量は外部から確認できる。
●
TypeB クラスは自動車クラスを継承し、燃料のいらない車である。 Speed up メソッド
は速度に +10 するよう、メソッドをオーバーライドする
LabVIEW NXG OOP Training 11
クラスの作成
新規プロジェクトを作成します。ナビゲーションペーンのプロジェクトファイルタブからプロジェ
クトを右クリックし、新規からクラスを選択します。「 Car.gtype 」として保存します。
LabVIEW NXG OOP Training 12
クラスへのデータ追加
Car.gtype を開き、データタブを選択します。パネル上に制御器を配置することで、クラ
スデータを定義します。また、ドキュメントタブでワイヤの外観を変更することができます。
LabVIEW NXG OOP Training 13
アクセサの作成
データの Write/Read を行うためにアクセス VI を作成します。プロジェクトファイルタブの
Car.gtype 上の右クリックメニューからメンバーを追加 》 データメンバーアクセスのた
めの VI またはアーキテクチャタブの + からメンバー VI を追加します。
LabVIEW NXG OOP Training 14
アクセサの作成
Production Date は読み取りと書き込みを、 Speed は読み取りのみ作成します。
Speed の変更はメソッド VI に限定することで、データの不整合を防ぎます。
アクセサはダイナミックディスパッチ VI としても作成できます。今回はスタティックディスパッ
チ VI として作成します。またオプションで、アクセサをプロパティノードとして使用できます。
LabVIEW NXG OOP Training 15
アクセサの構造
アクセサのダイアグラムを確認すると、クラスデータからクラスタプロパテ
ィ関数を用いてデータへのアクセスを行っています。
ここから分かるようにクラスとは実は、アクセスの自由度が制限された特殊
なクラスタです。
LabVIEW NXG OOP Training 16
ダイナミックディスパッチ VI の作成
Speed up/down メソッドを作成します。これらは子クラスからのオーバーライドが可能
です。アクセサ VI と同じ手順でダイナミックディスパッチテンプレートからの VI を選択
します。以下のように VI を作成します。
●
Speed Up.gvi
●
Speed Down.gvi
LabVIEW NXG OOP Training 17
ここまでの実装
ここまで作成したコードを動かしてみます。新規 VI を作成して以下のように実装します。
実行すると、書き込まれた製造日が返され、 2 回スピードアップ、 1 回スピードダウンし
ているので、スピードは「 1 」が返されます。
アクセサを作成したので、プロパティノードを使用して外部からクラスデータへアクセスでき
ます。 Speed は書き込みを許可していないので、書き込みはできません。
LabVIEW NXG OOP Training 18
子クラスの作成
子クラスを作成します。プロジェクトファイルタブで親クラスを右クリックし、子クラスを作成
を選択します。オーバーライドするメソッドがある場合、メソッドを選択して追加しま
す。 TypeA ではオーバーライドは行わないので、この手順はスキップします。
LabVIEW NXG OOP Training 19
子クラスの作成
TypeA クラスのアーキテクチャタブを確認すると、親クラスが Car であり、 Car クラスが
持つ VI を継承していることがわかります。
TypeA クラス自身は Speed データを持っていませんが、親クラスが持つデータを継承す
るので、内部的に Speed データを所持し、取り扱うことができます。
LabVIEW NXG OOP Training 20
TypeA クラスの編集
TypeA クラスに gas データを追加します。 gas データの読み取り VI と、 Fill メソッドを
作成します。 TypeA クラスは親クラスになることはないので、 Fill メソッドはオーバーライ
ドを想定しないとし、スタティックディスパッチテンプレートから作成します。
LabVIEW NXG OOP Training 21
ここまでの実装
動作確認のために、以下のような VI を作成します。 Car と TypeA のクラス制御器
定数は、プロジェクトファイルタブからのドラッグアンドドロップでも作成できます。
実行すると、 2 つの Speed 表示器に「 1 」の値が表示されます。
このことから、子クラスは親クラスが持つデータも同様に継承できることがわかりま
す。 TypeA クラスは Speed up/down メソッドを持ちませんが、親クラスからの継承に
より、親と同じメソッドを使用できます。
LabVIEW NXG OOP Training 22
Car クラスを継承して TypeB クラスを作成します。 Speed Up.gvi をオーバーライド
します。
オーバーライド VI は、デフォルトで親クラスのメソッドを呼び出します。呼び出し関数を
削除し、 Speed Up.gvi と同じように編集をします。ところが、 Speed データがクラス
タに表示されません。
オーバーライド
LabVIEW NXG OOP Training 23
親データへの子からのアクセス
子クラスが親クラスのデータを使用する場合、親クラスで定義したアクセス VI やメソッドを
使用する必要があります。 TypeB クラス自身にはデータが定義されていないため、クラ
スタとして値を取りだすことはできません。
Car クラスに Speed データの書き込み VI を追加します。その後改めて、 TypeB クラ
スの Speed up.gvi を以下のように編集します。
LabVIEW NXG OOP Training 24
動作確認
TypeB クラスを使用するよう Demo.gvi を編集します。 Demo.gvi を実行する
と、 TypeB の Speed up メソッドはオーバーライドされておりスピードが +10 さ
れ、 Car クラスの方は元のまま +1 であることが確認できます。
LabVIEW NXG OOP Training 25
ダイナミックディスパッチ
ここで再度ダイナミックディスパッチについてみていきましょう。先ほどの Demo.gvi は以下
のように変更することができます。
1 親子、子同士のクラスを同じデータタイプとして配列に格納できます。この時ワイヤ上のデ
ータは親クラスになりますが、実際には親子の関係情報は保持されています。
2 For ループの中で、各クラスでのメソッドを呼び出します。この手法では、ループ内のメソッ
ドは格納された全クラスが共通で持つメソッドである必要があります。例えばここに
TypeA クラスのみが持つ Fill メソッドは加えられません。
以上でデモの作成は完了です。
LabVIEW NXG OOP Training 26
ダイナミックディスパッチ端子
クラスに所属するメソッド VI では、コネクタペーンの端子にダイナミックディスパッチを選択
することができます。
ダイナミックディスパッチを使用する場合、クラスの入出力端子はどちらもダイナミックディス
パッチに設定する必要があります。
LabVIEW NXG OOP Training 27
アクセススコープ
アクセススコープを設定することで、 VI の呼び出しを制限できます。 VI がどこからでも際
限なく呼び出せてしまうと、開発者の意図とは異なる使い方がされ、バグにつながる場合
があります。
スコープにより、処理の隠ぺい化、値変更箇所の限定化等大きなメリットがあるため、大
規模アプリケーションでは積極的な使用が求められます。
Car.gtype
Speed up.gvi
TypeA.gtype
Speed up.gvi
External
VI
Write
Speed
External VI からの呼び出しは、
予期せぬ値の更新を
引き起こすため禁止します。
LabVIEW NXG OOP Training 28
アクセススコープ
●
パブリック
どの VI からでも参照可能です。外部とのインタフェースとして使用します。
●
コミュニティ
フレンド登録した VI からのみ参照可能です。フレンドはドキュメントタブから追加します。
●
プロテクト
同じクラスか子クラスからのみ参照可能です。
●
プライベート
自身のクラスからのみ参照可能です。
LabVIEW NXG OOP Training 29
DVR による OOP
データ値リファレンス (Data Variable Reference) を用いた OOP 開発の手法を紹
介します。 DVR とは、データの代わりにデータの参照先となるリファレンスを受け渡す手
法です。
●
新規データ値リファレンスで任意のデータタイプと初期値を設定します
●
In Place 要素ストラクチャでリファレンスからのデータを読み書きします
●
データ値リファレンスを削除でリファレンスを削除します
DVR では、ワイヤ上を流れるデータは値ではなく、リファレンスです。 DVR は C++ など
のポインタに似ていて、大きな配列を取り扱う際などは、 DVR を使用することでパフォー
マンスの低下や不要なデータコピーを防止できます。
5 が返される
LabVIEW NXG OOP Training 30
DVR による OOP
DVR ではリファレンスの作成と破棄が必須なので、単純な読み書きを行う場合でも、作
成と破棄のメソッドを作成する必要があります。この例はどちらも同じ処理を行っています
が、 DVR のほうが若干処理が多くなっています。
しかしそれでも DVR を採用することには大きなメリットがあります。アプリケーションフレー
ムワークを開発することを念頭に、そのメリットを見ていきましょう。ここでは DUT テスター
のシーケンス編集を行うアプリケーションを例にします。
LabVIEW NXG OOP Training 31
フレームワークの必要性
フレームワークとは、アプリケーション開発に必要な骨組みや汎用機能をまとめたもので
す。ここで重要になるのが、「汎用的であること」です。
メイン VI に直接、データや機能を実装する場合もあります。しかし実はそういった実装で
は、データ構造や機能を変更する際の工数が増える傾向にあります。
テストシーケンスの編集アプリケーションを考えます。メイン VI にハードウェアの設定データ
を実装したとします。データ構造を変更すると、メイン VI やデータベースなど広い範囲で
修正と検証が必要になります。
Editor.gvi
Settings
DAQ
Settings
SMU
Settings
Relay
データベース
( ファイル )
LabVIEW NXG OOP Training 32
フレームワークの導入
フレームワークによってこれらの問題を解決します。このフレームワークは
Configuration Editor Frameworkを元にしており、「 CEF NXG 」と呼びます。
Repository クラス : 複数のテストケースクラスと順序を保持
TestCase クラス : クラス 1 つがテスト 1 行に相当し、テストの設定を保持
Viewer クラス : テスト一覧を表示する
ポイントは、メイン VI にデータや操作が実装されていないことです。新しい設定を追加す
るためには TestCase クラスだけを変更すればよく、変更の影響は限定的です。
Repository Class
+New
+Open
+Save
+Add
+Delete
+Arrange
TestCase Class
- DAQ Settings
- SMU Settings
など
Viewer Class
+List TestCases
Main.vi
Event Handle
Read
Operation
TestCase Class
- DAQ Settings
- SMU Settings
など
TestCase Class
- DAQ Settings
- SMU Settings
etc
LabVIEW NXG OOP Training 33
クラスによるフレームワーク開発
以下が CEF NXG のメイン VI です。クラスを導入することで、メイン VI にアプリケーショ
ン固有のデータが実装されないというメリットがあります。これにより、メイン VI は編集アプ
リのフレームワークとして整備し、案件毎に再利用ができます。
LabVIEW NXG OOP Training 34
パラメータ変更
CEF NXG では、設定項目の変更が容易です。 TestCase クラスのタイプ定義へ制御
器を追加するだけで変更が完了します。カプセル化により、変更の影響は TestCase ク
ラス内に限定されます。
タイプ定義制御器 タイプ定義制御器
LabVIEW NXG OOP Training 35
クラスによる単体テスト
クラスで開発すると、自然と機能を 1 つの VI に集約するように意識できます。これにより
凝集度が高まり、 VI の単体テストを容易にします。
各メソッドの単体テストを十分に行うことで、不具合のないフレームワークを開発し、様々
な案件において再利用できます。
LabVIEW NXG OOP Training 36
CEF NXG における DVR
CEF NXG において DVR OOP での開発は大きな利便性を生みます。 CEF NXG で
は、テストケースの一覧を表表示器に表示します。値によるデータの受け渡しでは、操作
のたびに表表示器へワイヤを介して最新値を渡す必要があり、コードが煩雑になります。
表表示器
ワイヤを介した値の送信
Application
Add
Delete
Up
Down
Change Val
LabVIEW NXG OOP Training 37
CEF NXG における DVR
DVR OOP では、先ほどの問題は起こりません。表表示器には事前に、
「この Repository リファレンスの場所に、全テストケースのデータがあるよ」
と伝えます。 Repository クラスは常に最新データをそのリファレンス先に保持します。メ
ソッドを実行しデータが更新されると、表表示器に対し
「表示を更新してね」
と伝えます。表表示器は指定されたリファレンスの場所を確認し、最新データを表示しま
す。伝えるだけであれば、ノーティフィケーションやキュー、ユーザーイベントといった配線を
使わない通知手法で対応が可能です。
表表示器 リファレンス
通知の度に指定場所を確認し、
表示を更新する
LabVIEW NXG OOP Training 38
DVR OOP のメリット
改めて DVR OOP のメリットを紹介すると、
「配線をしなくてもデータの受け渡しが可能」
の一言に集約できます。
一方でどこからでもアクセスできるというメリットは、どこで読み書きしたか見失いやすくなる
というデメリットでもあります。読み書きをクラスの特定メソッドに限定することで、このデメリ
ットを解決します。
LabVIEW NXG OOP Training 39
おわり
CEF NXG のソースコードについてはお問い合わせください
LabVIEW NXG OOP Training 40
おわり

More Related Content

What's hot (20)

AndroidStudioはじめました ~Gradle編~
AndroidStudioはじめました ~Gradle編~AndroidStudioはじめました ~Gradle編~
AndroidStudioはじめました ~Gradle編~
Yabata Tomomitsu
?
Visual Studio Online BUILD を本気で使いこなして品質&効率を劇的に上げる! [ Comm Tech Festival ] C-4
Visual Studio Online BUILD を本気で使いこなして品質&効率を劇的に上げる! [ Comm Tech Festival ] C-4Visual Studio Online BUILD を本気で使いこなして品質&効率を劇的に上げる! [ Comm Tech Festival ] C-4
Visual Studio Online BUILD を本気で使いこなして品質&効率を劇的に上げる! [ Comm Tech Festival ] C-4
慎一 古賀
?
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
Kohsuke Kawaguchi
?
【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート
日本マイクロソフト株式会社
?
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
日本マイクロソフト株式会社
?
Android アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステムAndroid アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステム
Yu Nobuoka
?
Android cleanarchitecture
Android cleanarchitectureAndroid cleanarchitecture
Android cleanarchitecture
Tomoaki Imai
?
Visual studio 2013 debugging
Visual studio 2013 debuggingVisual studio 2013 debugging
Visual studio 2013 debugging
Kazushi Kamegawa
?
デスクトップ アプリ開発における Visual Studio の進化
デスクトップ アプリ開発における Visual Studio の進化デスクトップ アプリ開発における Visual Studio の進化
デスクトップ アプリ開発における Visual Studio の進化
Katsuhiro Aizawa
?
今すぐブラウザで贰厂6を使おう
今すぐブラウザで贰厂6を使おう今すぐブラウザで贰厂6を使おう
今すぐブラウザで贰厂6を使おう
Hayashi Yuichi
?
Visual Studio Code #phpcon2015
Visual Studio Code #phpcon2015Visual Studio Code #phpcon2015
Visual Studio Code #phpcon2015
Aya Tokura
?
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Fujio Kojima
?
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
慎一 古賀
?
Bat vb script_power_shellの単体テスト自動化
Bat vb script_power_shellの単体テスト自動化Bat vb script_power_shellの単体テスト自動化
Bat vb script_power_shellの単体テスト自動化
Naoyuki Sano
?
笔测迟丑辞苍を中心としたチーム开発
笔测迟丑辞苍を中心としたチーム开発笔测迟丑辞苍を中心としたチーム开発
笔测迟丑辞苍を中心としたチーム开発
Ryo Takahashi
?
グレープシティの闯补惫补厂肠谤颈辫迟ライブラリ
グレープシティの闯补惫补厂肠谤颈辫迟ライブラリグレープシティの闯补惫补厂肠谤颈辫迟ライブラリ
グレープシティの闯补惫补厂肠谤颈辫迟ライブラリ
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
?
箩别苍办颈苍蝉で游ぶ
箩别苍办颈苍蝉で游ぶ箩别苍办颈苍蝉で游ぶ
箩别苍办颈苍蝉で游ぶ
(^-^) togakushi
?
Titanium もくもく会第6回 Kii Cloud と TiGPUImageView
Titanium もくもく会第6回 Kii Cloud と TiGPUImageViewTitanium もくもく会第6回 Kii Cloud と TiGPUImageView
Titanium もくもく会第6回 Kii Cloud と TiGPUImageView
濱田 章吾
?
いまさら学ぶ惭痴痴惭パターン
いまさら学ぶ惭痴痴惭パターンいまさら学ぶ惭痴痴惭パターン
いまさら学ぶ惭痴痴惭パターン
Yuta Matsumura
?
AndroidStudioはじめました ~Gradle編~
AndroidStudioはじめました ~Gradle編~AndroidStudioはじめました ~Gradle編~
AndroidStudioはじめました ~Gradle編~
Yabata Tomomitsu
?
Visual Studio Online BUILD を本気で使いこなして品質&効率を劇的に上げる! [ Comm Tech Festival ] C-4
Visual Studio Online BUILD を本気で使いこなして品質&効率を劇的に上げる! [ Comm Tech Festival ] C-4Visual Studio Online BUILD を本気で使いこなして品質&効率を劇的に上げる! [ Comm Tech Festival ] C-4
Visual Studio Online BUILD を本気で使いこなして品質&効率を劇的に上げる! [ Comm Tech Festival ] C-4
慎一 古賀
?
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
日本マイクロソフト株式会社
?
Android アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステムAndroid アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステム
Yu Nobuoka
?
Android cleanarchitecture
Android cleanarchitectureAndroid cleanarchitecture
Android cleanarchitecture
Tomoaki Imai
?
デスクトップ アプリ開発における Visual Studio の進化
デスクトップ アプリ開発における Visual Studio の進化デスクトップ アプリ開発における Visual Studio の進化
デスクトップ アプリ開発における Visual Studio の進化
Katsuhiro Aizawa
?
今すぐブラウザで贰厂6を使おう
今すぐブラウザで贰厂6を使おう今すぐブラウザで贰厂6を使おう
今すぐブラウザで贰厂6を使おう
Hayashi Yuichi
?
Visual Studio Code #phpcon2015
Visual Studio Code #phpcon2015Visual Studio Code #phpcon2015
Visual Studio Code #phpcon2015
Aya Tokura
?
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Fujio Kojima
?
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
慎一 古賀
?
Bat vb script_power_shellの単体テスト自動化
Bat vb script_power_shellの単体テスト自動化Bat vb script_power_shellの単体テスト自動化
Bat vb script_power_shellの単体テスト自動化
Naoyuki Sano
?
笔测迟丑辞苍を中心としたチーム开発
笔测迟丑辞苍を中心としたチーム开発笔测迟丑辞苍を中心としたチーム开発
笔测迟丑辞苍を中心としたチーム开発
Ryo Takahashi
?
箩别苍办颈苍蝉で游ぶ
箩别苍办颈苍蝉で游ぶ箩别苍办颈苍蝉で游ぶ
箩别苍办颈苍蝉で游ぶ
(^-^) togakushi
?
Titanium もくもく会第6回 Kii Cloud と TiGPUImageView
Titanium もくもく会第6回 Kii Cloud と TiGPUImageViewTitanium もくもく会第6回 Kii Cloud と TiGPUImageView
Titanium もくもく会第6回 Kii Cloud と TiGPUImageView
濱田 章吾
?
いまさら学ぶ惭痴痴惭パターン
いまさら学ぶ惭痴痴惭パターンいまさら学ぶ惭痴痴惭パターン
いまさら学ぶ惭痴痴惭パターン
Yuta Matsumura
?

Similar to LabVIEW NXG OOP Training (20)

碍苍辞肠办辞耻迟闯厂を使用したアプリケーションの构筑例
碍苍辞肠办辞耻迟闯厂を使用したアプリケーションの构筑例碍苍辞肠办辞耻迟闯厂を使用したアプリケーションの构筑例
碍苍辞肠办辞耻迟闯厂を使用したアプリケーションの构筑例
masakazusegawa
?
AI-first Code Editor 「Cursor」の機能紹介
AI-first Code Editor 「Cursor」の機能紹介AI-first Code Editor 「Cursor」の機能紹介
AI-first Code Editor 「Cursor」の機能紹介
ssuser39314d
?
颁惭顿叠耻颈濒诲を中心とした运用管理自动化基盘翱辫别苍笔滨贰の事例绍介
颁惭顿叠耻颈濒诲を中心とした运用管理自动化基盘翱辫别苍笔滨贰の事例绍介颁惭顿叠耻颈濒诲を中心とした运用管理自动化基盘翱辫别苍笔滨贰の事例绍介
颁惭顿叠耻颈濒诲を中心とした运用管理自动化基盘翱辫别苍笔滨贰の事例绍介
翱厂厂ラボ株式会社
?
概説 Data API v3
概説 Data API v3概説 Data API v3
概説 Data API v3
Yuji Takayama
?
Qlik Application Automationを活用したQlik Sense運用Tips - Part 2
Qlik Application Automationを活用したQlik Sense運用Tips - Part 2Qlik Application Automationを活用したQlik Sense運用Tips - Part 2
Qlik Application Automationを活用したQlik Sense運用Tips - Part 2
QlikPresalesJapan
?
初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka -
初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka  - 初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka  -
初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka -
Daiyu Hatakeyama
?
成长できるエンタープライズシステムを目指して-翱厂骋颈によるモジュール型アーキテクチャの実现-
成长できるエンタープライズシステムを目指して-翱厂骋颈によるモジュール型アーキテクチャの実现-成长できるエンタープライズシステムを目指して-翱厂骋颈によるモジュール型アーキテクチャの実现-
成长できるエンタープライズシステムを目指して-翱厂骋颈によるモジュール型アーキテクチャの実现-
guestc4549
?
翱厂厂を利用したプロジェクト管理
翱厂厂を利用したプロジェクト管理翱厂厂を利用したプロジェクト管理
翱厂厂を利用したプロジェクト管理
Tadashi Miyazato
?
The Internal of Serverless Plugins
The Internal of Serverless PluginsThe Internal of Serverless Plugins
The Internal of Serverless Plugins
Terui Masashi
?
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
信之 岩永
?
Visual StudioやAzureからAzure DevOpsを使う
Visual StudioやAzureからAzure DevOpsを使うVisual StudioやAzureからAzure DevOpsを使う
Visual StudioやAzureからAzure DevOpsを使う
Takeshi Fukuhara
?
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
Daisuke Sugai
?
Cloud Native Appのデプロイ先に関する考察:VM? コンテナ? aPaaS? or Serverless?
Cloud Native Appのデプロイ先に関する考察:VM? コンテナ? aPaaS? or Serverless?Cloud Native Appのデプロイ先に関する考察:VM? コンテナ? aPaaS? or Serverless?
Cloud Native Appのデプロイ先に関する考察:VM? コンテナ? aPaaS? or Serverless?
Yosuke Arai
?
ノンプログラミングで API はじめて体験!_築山 春木氏
ノンプログラミングで API はじめて体験!_築山 春木氏ノンプログラミングで API はじめて体験!_築山 春木氏
ノンプログラミングで API はじめて体験!_築山 春木氏
kintone papers
?
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
真吾 吉田
?
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
Daisuke Nishino
?
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
Natsuki Yamanaka
?
詳説 Data api mtddc 拡張版 v3対応
詳説 Data api mtddc 拡張版   v3対応詳説 Data api mtddc 拡張版   v3対応
詳説 Data api mtddc 拡張版 v3対応
Yuji Takayama
?
220523JS7.pdf
220523JS7.pdf220523JS7.pdf
220523JS7.pdf
翱厂厂ラボ株式会社
?
DevOps on Azure Kubernetes
DevOps on Azure KubernetesDevOps on Azure Kubernetes
DevOps on Azure Kubernetes
Issei Hiraoka
?
碍苍辞肠办辞耻迟闯厂を使用したアプリケーションの构筑例
碍苍辞肠办辞耻迟闯厂を使用したアプリケーションの构筑例碍苍辞肠办辞耻迟闯厂を使用したアプリケーションの构筑例
碍苍辞肠办辞耻迟闯厂を使用したアプリケーションの构筑例
masakazusegawa
?
AI-first Code Editor 「Cursor」の機能紹介
AI-first Code Editor 「Cursor」の機能紹介AI-first Code Editor 「Cursor」の機能紹介
AI-first Code Editor 「Cursor」の機能紹介
ssuser39314d
?
颁惭顿叠耻颈濒诲を中心とした运用管理自动化基盘翱辫别苍笔滨贰の事例绍介
颁惭顿叠耻颈濒诲を中心とした运用管理自动化基盘翱辫别苍笔滨贰の事例绍介颁惭顿叠耻颈濒诲を中心とした运用管理自动化基盘翱辫别苍笔滨贰の事例绍介
颁惭顿叠耻颈濒诲を中心とした运用管理自动化基盘翱辫别苍笔滨贰の事例绍介
翱厂厂ラボ株式会社
?
Qlik Application Automationを活用したQlik Sense運用Tips - Part 2
Qlik Application Automationを活用したQlik Sense運用Tips - Part 2Qlik Application Automationを活用したQlik Sense運用Tips - Part 2
Qlik Application Automationを活用したQlik Sense運用Tips - Part 2
QlikPresalesJapan
?
初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka -
初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka  - 初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka  -
初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka -
Daiyu Hatakeyama
?
成长できるエンタープライズシステムを目指して-翱厂骋颈によるモジュール型アーキテクチャの実现-
成长できるエンタープライズシステムを目指して-翱厂骋颈によるモジュール型アーキテクチャの実现-成长できるエンタープライズシステムを目指して-翱厂骋颈によるモジュール型アーキテクチャの実现-
成长できるエンタープライズシステムを目指して-翱厂骋颈によるモジュール型アーキテクチャの実现-
guestc4549
?
翱厂厂を利用したプロジェクト管理
翱厂厂を利用したプロジェクト管理翱厂厂を利用したプロジェクト管理
翱厂厂を利用したプロジェクト管理
Tadashi Miyazato
?
The Internal of Serverless Plugins
The Internal of Serverless PluginsThe Internal of Serverless Plugins
The Internal of Serverless Plugins
Terui Masashi
?
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
信之 岩永
?
Visual StudioやAzureからAzure DevOpsを使う
Visual StudioやAzureからAzure DevOpsを使うVisual StudioやAzureからAzure DevOpsを使う
Visual StudioやAzureからAzure DevOpsを使う
Takeshi Fukuhara
?
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
Daisuke Sugai
?
Cloud Native Appのデプロイ先に関する考察:VM? コンテナ? aPaaS? or Serverless?
Cloud Native Appのデプロイ先に関する考察:VM? コンテナ? aPaaS? or Serverless?Cloud Native Appのデプロイ先に関する考察:VM? コンテナ? aPaaS? or Serverless?
Cloud Native Appのデプロイ先に関する考察:VM? コンテナ? aPaaS? or Serverless?
Yosuke Arai
?
ノンプログラミングで API はじめて体験!_築山 春木氏
ノンプログラミングで API はじめて体験!_築山 春木氏ノンプログラミングで API はじめて体験!_築山 春木氏
ノンプログラミングで API はじめて体験!_築山 春木氏
kintone papers
?
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
真吾 吉田
?
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
Daisuke Nishino
?
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
Natsuki Yamanaka
?
詳説 Data api mtddc 拡張版 v3対応
詳説 Data api mtddc 拡張版   v3対応詳説 Data api mtddc 拡張版   v3対応
詳説 Data api mtddc 拡張版 v3対応
Yuji Takayama
?
DevOps on Azure Kubernetes
DevOps on Azure KubernetesDevOps on Azure Kubernetes
DevOps on Azure Kubernetes
Issei Hiraoka
?

More from Yusuke Tochigi (8)

Test Driven Development in LabVIEW
Test Driven Development in LabVIEWTest Driven Development in LabVIEW
Test Driven Development in LabVIEW
Yusuke Tochigi
?
Session9 - LabVIEW NXG Training Course
Session9 - LabVIEW NXG Training CourseSession9 - LabVIEW NXG Training Course
Session9 - LabVIEW NXG Training Course
Yusuke Tochigi
?
Session7 - LabVIEW NXG Training Course
Session7 - LabVIEW NXG Training CourseSession7 - LabVIEW NXG Training Course
Session7 - LabVIEW NXG Training Course
Yusuke Tochigi
?
Session10 - LabVIEW NXG Training Course
Session10 - LabVIEW NXG Training CourseSession10 - LabVIEW NXG Training Course
Session10 - LabVIEW NXG Training Course
Yusuke Tochigi
?
Session6 - LabVIEW NXG Training Course
Session6 - LabVIEW NXG Training CourseSession6 - LabVIEW NXG Training Course
Session6 - LabVIEW NXG Training Course
Yusuke Tochigi
?
Session4 - LabVIEW NXG Training Cours
Session4 - LabVIEW NXG Training CoursSession4 - LabVIEW NXG Training Cours
Session4 - LabVIEW NXG Training Cours
Yusuke Tochigi
?
Session2 - LabVIEW NXG Training Course
Session2 - LabVIEW NXG Training CourseSession2 - LabVIEW NXG Training Course
Session2 - LabVIEW NXG Training Course
Yusuke Tochigi
?
Automotive QMS IATF16949
Automotive QMS IATF16949Automotive QMS IATF16949
Automotive QMS IATF16949
Yusuke Tochigi
?
Test Driven Development in LabVIEW
Test Driven Development in LabVIEWTest Driven Development in LabVIEW
Test Driven Development in LabVIEW
Yusuke Tochigi
?
Session9 - LabVIEW NXG Training Course
Session9 - LabVIEW NXG Training CourseSession9 - LabVIEW NXG Training Course
Session9 - LabVIEW NXG Training Course
Yusuke Tochigi
?
Session7 - LabVIEW NXG Training Course
Session7 - LabVIEW NXG Training CourseSession7 - LabVIEW NXG Training Course
Session7 - LabVIEW NXG Training Course
Yusuke Tochigi
?
Session10 - LabVIEW NXG Training Course
Session10 - LabVIEW NXG Training CourseSession10 - LabVIEW NXG Training Course
Session10 - LabVIEW NXG Training Course
Yusuke Tochigi
?
Session6 - LabVIEW NXG Training Course
Session6 - LabVIEW NXG Training CourseSession6 - LabVIEW NXG Training Course
Session6 - LabVIEW NXG Training Course
Yusuke Tochigi
?
Session4 - LabVIEW NXG Training Cours
Session4 - LabVIEW NXG Training CoursSession4 - LabVIEW NXG Training Cours
Session4 - LabVIEW NXG Training Cours
Yusuke Tochigi
?
Session2 - LabVIEW NXG Training Course
Session2 - LabVIEW NXG Training CourseSession2 - LabVIEW NXG Training Course
Session2 - LabVIEW NXG Training Course
Yusuke Tochigi
?

Recently uploaded (6)

ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
FUSIONDRIVER, INC.
?
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHubWhat is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
K Kinzal
?
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
Tomoharu ASAMI
?
株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する
株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する
株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する
ssuserd2c5cd
?
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
leesubin14
?
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
Toru Koido
?
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
FUSIONDRIVER, INC.
?
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHubWhat is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
K Kinzal
?
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
Tomoharu ASAMI
?
株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する
株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する
株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する
ssuserd2c5cd
?
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
leesubin14
?
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
Toru Koido
?

LabVIEW NXG OOP Training

  • 1. LabVIEW NXG OOP Training Yusuke Tochigi NXG 5.0 Version
  • 2. LabVIEW NXG OOP Training 2 このトレーニングについて LabVIEW NXG は Object-Oriented-Programming (OOP) 言語です。 OOP 手法を用いてアプリケーションを開発することで以下のメリットがあります。 ● 凝集度が高くなり、結合度が下がる ● コードの再利用がしやすい ● 仕様変更や拡張へ柔軟に対応できる ● 単体テストが容易になる 一方でクラスでの開発は工数が増える傾向にあり、簡易なアプリケーションでは、逆に無 駄な工数が生じる場合もあります。 OOP での開発は、アプリケーション規模と工数を天 秤にかけながら採用を判断します。 このトレーニングでは LabVIEW NXG における OOP の基本を紹介します。
  • 3. LabVIEW NXG OOP Training 3 OOP の基本 - クラス クラスとは、データとデータを操作するメソッドの集合体です。 データとは、クラスが持つ情報です。クラスには異なるデータタイプの様々な情報を持たせ ることができます。その情報を利用して何かの操作をする VI をメソッドと呼びます。 実は LabVIEW NXG の各制御器 / 表示器は、クラスの考え方に基づいて作られてい ます。例えば数値制御器では以下のようなクラス構造になっています。 数値制御器クラス 数値 : Double 最小 : Double 最大 : Double キーフォーカス : Boolean + データをキャプチャ + デフォルト値に再度初期化
  • 4. LabVIEW NXG OOP Training 4 OOP の基本 - クラスとオブジェクト オブジェクトは、クラスに基づき生成された実体のあるモノです。 正確ではありませんが、例えば次のように説明できます。パレットにはクラスがリストされて います。クラスをパネル上に配置するとオブジェクトが生成され、 VI 上で利用できます。 この例では、パネル上に配置された数値制御器は、「数値制御器クラス」を元に作成さ れたオブジェクトです。 クラス オブジェクト
  • 5. LabVIEW NXG OOP Training 5 OOP の基本 - カプセル化 カプセル化は、クラスデータへのアクセスを制限することで、データの不整合を防ぐ仕組み です。クラスデータの読み書きは、クラスに所属する VI からのみ可能です。 ● データ操作の場所を限定することで、デバッグ時の調査が容易になる ● データ構造を変更した場合、影響はクラス内に限定され、その他の場所に影響しない OOP ではカプセル化により読み書きの自由度を制限し、不整合を防ぎます。またこれに より、機能追加?変更が容易になります。これは後に詳しく紹介します。
  • 6. LabVIEW NXG OOP Training 6 OOP の基本 - 継承 継承は、クラスが既存クラスからデータやメソッドを引継ぐことです。継承元を「親クラス」ま たは「抽象クラス」、継承先を「子クラス」と呼びます。継承には以下のメリットがあります。 ● 子は親と同じクラスデータを持ち、同じメソッドを実行できる ● クラス間で共通の機能を、親クラスで一括して実装できる 以下の例では、デバイス間共通のデータとメソッドを親クラスで定義しています。個々で 必要なデータやメソッドは、子クラスで定義します。クラス毎に異なる Initialize を実装 したい場合には ? 次にご紹介するオーバーライドでその課題を解決します。
  • 7. LabVIEW NXG OOP Training 7 OOP の基本 - オーバーライド 親クラスが持つメソッドは、子クラスが引き継ぐことができます。しかし同じメソッドでも、親 と異なる機能を実装したい場合もあります。 親クラスのメソッド VI と同じ名前の VI を子クラスで作成できます。これを「オーバーライ ド」と呼び、子クラスは上書きしたメソッド VI を使用します。以下の例は、各クラスが Speak メソッドを呼び出した時の動作を表しています。 Class B は Speak メソッドをオ ーバーライドするので動作が異なります。 Parent Class A Class B Speak Walk Speak Hello Hello こんにちわ Speak メソッドの オーバーライド
  • 8. LabVIEW NXG OOP Training 8 OOP の基本 - ダイナミックディスパッチ 継承により、親クラスのメソッドを子クラスでオーバーライドできます。この時「ダイナミックデ ィスパッチ」という性質により、各インスタンスがどのクラスのメソッドを呼び出すかは、メソッ ド実行時に決定されます。 ● Abstract クラスは DAQ クラスの親クラス ● DAQ クラスは Abstract クラスの Initialize メソッドをオーバーライド 親子クラスは配列にまとめられます。これは Abstract クラスの配列になりますが、子クラ スは自分が子であることを覚えています。 For ループの 1 回目の実行は Abstract クラ スが渡され、 Abstract クラスの Initialize が実行されます。 2 回目は DAQ クラスが 渡され、 DAQ クラスの Initialize が実行されます。
  • 9. LabVIEW NXG OOP Training 9 ダイナミックディスパッチの例 例えば DUT 試験のようにハードウェアを用いた検査システムを考えます。検査のシーケ ンスはオペレータが自由に変更できることが必要です。ダイナミックディスパッチを採用する と、 For ループの中にクラス共通のメソッドを配置するだけで実装が完了します。 検査シーケンスはクラス配列の順序で決まります。今回の例では、 For ループ外側のコ ードをファイルから読み取るような実装にすると、テキストファイルの編集でシーケンスを制 御することができます。
  • 10. LabVIEW NXG OOP Training 10 LabVIEW NXG における OOP 開発 それでは実際に自動車を例として、 OOP 開発を行います。 以下の要件を持つクラスを開発します。 要件 ● 自動車クラスは以下のデータを持つ - Production Date ( 製造日 ) - Speed ● 自動車クラスは以下のメソッドを持つ - Speed up ( 速度に +1) - Speed down ( 速度に -1) ● TypeA クラスは自動車クラスを継承し、燃料を表す「 gas 」データと指定量の燃料を 入れる Fill メソッドを持つ。燃料の残量は外部から確認できる。 ● TypeB クラスは自動車クラスを継承し、燃料のいらない車である。 Speed up メソッド は速度に +10 するよう、メソッドをオーバーライドする
  • 11. LabVIEW NXG OOP Training 11 クラスの作成 新規プロジェクトを作成します。ナビゲーションペーンのプロジェクトファイルタブからプロジェ クトを右クリックし、新規からクラスを選択します。「 Car.gtype 」として保存します。
  • 12. LabVIEW NXG OOP Training 12 クラスへのデータ追加 Car.gtype を開き、データタブを選択します。パネル上に制御器を配置することで、クラ スデータを定義します。また、ドキュメントタブでワイヤの外観を変更することができます。
  • 13. LabVIEW NXG OOP Training 13 アクセサの作成 データの Write/Read を行うためにアクセス VI を作成します。プロジェクトファイルタブの Car.gtype 上の右クリックメニューからメンバーを追加 》 データメンバーアクセスのた めの VI またはアーキテクチャタブの + からメンバー VI を追加します。
  • 14. LabVIEW NXG OOP Training 14 アクセサの作成 Production Date は読み取りと書き込みを、 Speed は読み取りのみ作成します。 Speed の変更はメソッド VI に限定することで、データの不整合を防ぎます。 アクセサはダイナミックディスパッチ VI としても作成できます。今回はスタティックディスパッ チ VI として作成します。またオプションで、アクセサをプロパティノードとして使用できます。
  • 15. LabVIEW NXG OOP Training 15 アクセサの構造 アクセサのダイアグラムを確認すると、クラスデータからクラスタプロパテ ィ関数を用いてデータへのアクセスを行っています。 ここから分かるようにクラスとは実は、アクセスの自由度が制限された特殊 なクラスタです。
  • 16. LabVIEW NXG OOP Training 16 ダイナミックディスパッチ VI の作成 Speed up/down メソッドを作成します。これらは子クラスからのオーバーライドが可能 です。アクセサ VI と同じ手順でダイナミックディスパッチテンプレートからの VI を選択 します。以下のように VI を作成します。 ● Speed Up.gvi ● Speed Down.gvi
  • 17. LabVIEW NXG OOP Training 17 ここまでの実装 ここまで作成したコードを動かしてみます。新規 VI を作成して以下のように実装します。 実行すると、書き込まれた製造日が返され、 2 回スピードアップ、 1 回スピードダウンし ているので、スピードは「 1 」が返されます。 アクセサを作成したので、プロパティノードを使用して外部からクラスデータへアクセスでき ます。 Speed は書き込みを許可していないので、書き込みはできません。
  • 18. LabVIEW NXG OOP Training 18 子クラスの作成 子クラスを作成します。プロジェクトファイルタブで親クラスを右クリックし、子クラスを作成 を選択します。オーバーライドするメソッドがある場合、メソッドを選択して追加しま す。 TypeA ではオーバーライドは行わないので、この手順はスキップします。
  • 19. LabVIEW NXG OOP Training 19 子クラスの作成 TypeA クラスのアーキテクチャタブを確認すると、親クラスが Car であり、 Car クラスが 持つ VI を継承していることがわかります。 TypeA クラス自身は Speed データを持っていませんが、親クラスが持つデータを継承す るので、内部的に Speed データを所持し、取り扱うことができます。
  • 20. LabVIEW NXG OOP Training 20 TypeA クラスの編集 TypeA クラスに gas データを追加します。 gas データの読み取り VI と、 Fill メソッドを 作成します。 TypeA クラスは親クラスになることはないので、 Fill メソッドはオーバーライ ドを想定しないとし、スタティックディスパッチテンプレートから作成します。
  • 21. LabVIEW NXG OOP Training 21 ここまでの実装 動作確認のために、以下のような VI を作成します。 Car と TypeA のクラス制御器 定数は、プロジェクトファイルタブからのドラッグアンドドロップでも作成できます。 実行すると、 2 つの Speed 表示器に「 1 」の値が表示されます。 このことから、子クラスは親クラスが持つデータも同様に継承できることがわかりま す。 TypeA クラスは Speed up/down メソッドを持ちませんが、親クラスからの継承に より、親と同じメソッドを使用できます。
  • 22. LabVIEW NXG OOP Training 22 Car クラスを継承して TypeB クラスを作成します。 Speed Up.gvi をオーバーライド します。 オーバーライド VI は、デフォルトで親クラスのメソッドを呼び出します。呼び出し関数を 削除し、 Speed Up.gvi と同じように編集をします。ところが、 Speed データがクラス タに表示されません。 オーバーライド
  • 23. LabVIEW NXG OOP Training 23 親データへの子からのアクセス 子クラスが親クラスのデータを使用する場合、親クラスで定義したアクセス VI やメソッドを 使用する必要があります。 TypeB クラス自身にはデータが定義されていないため、クラ スタとして値を取りだすことはできません。 Car クラスに Speed データの書き込み VI を追加します。その後改めて、 TypeB クラ スの Speed up.gvi を以下のように編集します。
  • 24. LabVIEW NXG OOP Training 24 動作確認 TypeB クラスを使用するよう Demo.gvi を編集します。 Demo.gvi を実行する と、 TypeB の Speed up メソッドはオーバーライドされておりスピードが +10 さ れ、 Car クラスの方は元のまま +1 であることが確認できます。
  • 25. LabVIEW NXG OOP Training 25 ダイナミックディスパッチ ここで再度ダイナミックディスパッチについてみていきましょう。先ほどの Demo.gvi は以下 のように変更することができます。 1 親子、子同士のクラスを同じデータタイプとして配列に格納できます。この時ワイヤ上のデ ータは親クラスになりますが、実際には親子の関係情報は保持されています。 2 For ループの中で、各クラスでのメソッドを呼び出します。この手法では、ループ内のメソッ ドは格納された全クラスが共通で持つメソッドである必要があります。例えばここに TypeA クラスのみが持つ Fill メソッドは加えられません。 以上でデモの作成は完了です。
  • 26. LabVIEW NXG OOP Training 26 ダイナミックディスパッチ端子 クラスに所属するメソッド VI では、コネクタペーンの端子にダイナミックディスパッチを選択 することができます。 ダイナミックディスパッチを使用する場合、クラスの入出力端子はどちらもダイナミックディス パッチに設定する必要があります。
  • 27. LabVIEW NXG OOP Training 27 アクセススコープ アクセススコープを設定することで、 VI の呼び出しを制限できます。 VI がどこからでも際 限なく呼び出せてしまうと、開発者の意図とは異なる使い方がされ、バグにつながる場合 があります。 スコープにより、処理の隠ぺい化、値変更箇所の限定化等大きなメリットがあるため、大 規模アプリケーションでは積極的な使用が求められます。 Car.gtype Speed up.gvi TypeA.gtype Speed up.gvi External VI Write Speed External VI からの呼び出しは、 予期せぬ値の更新を 引き起こすため禁止します。
  • 28. LabVIEW NXG OOP Training 28 アクセススコープ ● パブリック どの VI からでも参照可能です。外部とのインタフェースとして使用します。 ● コミュニティ フレンド登録した VI からのみ参照可能です。フレンドはドキュメントタブから追加します。 ● プロテクト 同じクラスか子クラスからのみ参照可能です。 ● プライベート 自身のクラスからのみ参照可能です。
  • 29. LabVIEW NXG OOP Training 29 DVR による OOP データ値リファレンス (Data Variable Reference) を用いた OOP 開発の手法を紹 介します。 DVR とは、データの代わりにデータの参照先となるリファレンスを受け渡す手 法です。 ● 新規データ値リファレンスで任意のデータタイプと初期値を設定します ● In Place 要素ストラクチャでリファレンスからのデータを読み書きします ● データ値リファレンスを削除でリファレンスを削除します DVR では、ワイヤ上を流れるデータは値ではなく、リファレンスです。 DVR は C++ など のポインタに似ていて、大きな配列を取り扱う際などは、 DVR を使用することでパフォー マンスの低下や不要なデータコピーを防止できます。 5 が返される
  • 30. LabVIEW NXG OOP Training 30 DVR による OOP DVR ではリファレンスの作成と破棄が必須なので、単純な読み書きを行う場合でも、作 成と破棄のメソッドを作成する必要があります。この例はどちらも同じ処理を行っています が、 DVR のほうが若干処理が多くなっています。 しかしそれでも DVR を採用することには大きなメリットがあります。アプリケーションフレー ムワークを開発することを念頭に、そのメリットを見ていきましょう。ここでは DUT テスター のシーケンス編集を行うアプリケーションを例にします。
  • 31. LabVIEW NXG OOP Training 31 フレームワークの必要性 フレームワークとは、アプリケーション開発に必要な骨組みや汎用機能をまとめたもので す。ここで重要になるのが、「汎用的であること」です。 メイン VI に直接、データや機能を実装する場合もあります。しかし実はそういった実装で は、データ構造や機能を変更する際の工数が増える傾向にあります。 テストシーケンスの編集アプリケーションを考えます。メイン VI にハードウェアの設定データ を実装したとします。データ構造を変更すると、メイン VI やデータベースなど広い範囲で 修正と検証が必要になります。 Editor.gvi Settings DAQ Settings SMU Settings Relay データベース ( ファイル )
  • 32. LabVIEW NXG OOP Training 32 フレームワークの導入 フレームワークによってこれらの問題を解決します。このフレームワークは Configuration Editor Frameworkを元にしており、「 CEF NXG 」と呼びます。 Repository クラス : 複数のテストケースクラスと順序を保持 TestCase クラス : クラス 1 つがテスト 1 行に相当し、テストの設定を保持 Viewer クラス : テスト一覧を表示する ポイントは、メイン VI にデータや操作が実装されていないことです。新しい設定を追加す るためには TestCase クラスだけを変更すればよく、変更の影響は限定的です。 Repository Class +New +Open +Save +Add +Delete +Arrange TestCase Class - DAQ Settings - SMU Settings など Viewer Class +List TestCases Main.vi Event Handle Read Operation TestCase Class - DAQ Settings - SMU Settings など TestCase Class - DAQ Settings - SMU Settings etc
  • 33. LabVIEW NXG OOP Training 33 クラスによるフレームワーク開発 以下が CEF NXG のメイン VI です。クラスを導入することで、メイン VI にアプリケーショ ン固有のデータが実装されないというメリットがあります。これにより、メイン VI は編集アプ リのフレームワークとして整備し、案件毎に再利用ができます。
  • 34. LabVIEW NXG OOP Training 34 パラメータ変更 CEF NXG では、設定項目の変更が容易です。 TestCase クラスのタイプ定義へ制御 器を追加するだけで変更が完了します。カプセル化により、変更の影響は TestCase ク ラス内に限定されます。 タイプ定義制御器 タイプ定義制御器
  • 35. LabVIEW NXG OOP Training 35 クラスによる単体テスト クラスで開発すると、自然と機能を 1 つの VI に集約するように意識できます。これにより 凝集度が高まり、 VI の単体テストを容易にします。 各メソッドの単体テストを十分に行うことで、不具合のないフレームワークを開発し、様々 な案件において再利用できます。
  • 36. LabVIEW NXG OOP Training 36 CEF NXG における DVR CEF NXG において DVR OOP での開発は大きな利便性を生みます。 CEF NXG で は、テストケースの一覧を表表示器に表示します。値によるデータの受け渡しでは、操作 のたびに表表示器へワイヤを介して最新値を渡す必要があり、コードが煩雑になります。 表表示器 ワイヤを介した値の送信 Application Add Delete Up Down Change Val
  • 37. LabVIEW NXG OOP Training 37 CEF NXG における DVR DVR OOP では、先ほどの問題は起こりません。表表示器には事前に、 「この Repository リファレンスの場所に、全テストケースのデータがあるよ」 と伝えます。 Repository クラスは常に最新データをそのリファレンス先に保持します。メ ソッドを実行しデータが更新されると、表表示器に対し 「表示を更新してね」 と伝えます。表表示器は指定されたリファレンスの場所を確認し、最新データを表示しま す。伝えるだけであれば、ノーティフィケーションやキュー、ユーザーイベントといった配線を 使わない通知手法で対応が可能です。 表表示器 リファレンス 通知の度に指定場所を確認し、 表示を更新する
  • 38. LabVIEW NXG OOP Training 38 DVR OOP のメリット 改めて DVR OOP のメリットを紹介すると、 「配線をしなくてもデータの受け渡しが可能」 の一言に集約できます。 一方でどこからでもアクセスできるというメリットは、どこで読み書きしたか見失いやすくなる というデメリットでもあります。読み書きをクラスの特定メソッドに限定することで、このデメリ ットを解決します。
  • 39. LabVIEW NXG OOP Training 39 おわり CEF NXG のソースコードについてはお問い合わせください
  • 40. LabVIEW NXG OOP Training 40 おわり