LabVIEWでは、インタフェースはプライベートデータ制御のないクラスと考えることができますが、そのわずかな違いにより、ソフトウェアアーキテクチャでインタフェースをクラスとはまったく異なる目的に使用できます。具体的には、インタフェースでは複数の継承形式を可能にします。

インタフェースは、オブジェクトがその役割を実行する方法を定義せずに満たすことができる役割を宣言します。クラスは、インタフェースから継承することにより、そのオブジェクトが特定の役割を果たすことを宣言します。また、その動作の実行方法を指定する責任を負います。複数のインタフェースを継承するクラスは、そのオブジェクトをさまざまな役割を必要とする複数のソフトウェアモジュールに渡すことができます。

以下のプロジェクトには、Tool (ツール) クラスとさまざまなツール子クラスが含まれています。また、Lever (てこ) インタフェースも含まれています。Toolsクラスにはクラス内のデータを定義する制御器がありますが、インタフェースにはプライベートデータがないため、Lever (てこ) インタフェースには制御器がありません。「クラス」は、面の枠が塗りつぶされた立方体 () として表示されます。「インタフェース」は、面の枠が白線の立方体 () として表示されます。インタフェースとクラスのファイル拡張子は、どちらも (.lvclass) です。

以下の図は、「ツール」クラス、「鍵」クラス、「てこ」インタフェースの間の継承関係を示しています。「ツール」クラスと「てこ」インタフェースは、どちらもLabVIEWオブジェクトを継承します。「こじ開けツール」クラスと「ドライバー」クラスは、それぞれ独自のメソッドと親クラスのメソッドをもつ他、「てこ」としても使用できるため、「てこ」インタフェースからも継承します。これらのクラスは、「てこ」インタフェースのメソッドを継承します。てこはクラスではなくインタフェースであるため、この多重継承に問題はありません。関連のない3つのクラス (こじ開けツール、マイナスドライバ、鍵) には、LabVIEWオブジェクト以外の共通の祖先 (てこ) があります。

インタフェース命名のベストプラクティス

以下のガイドラインに従って、作成するインタフェースに、インタフェースの目的を識別する名前を付けます。

  • オブジェクトがインタフェースを継承する場合に、オブジェクトが持つ機能を説明する形容詞または副詞を使用します。たとえば、インタフェースが電圧を測定できるハードウェアを表す場合、インタフェースに「Can Measure Voltage.lvclass」という名前を付けます。そのインタフェースを継承するクラスまたはインタフェースは、電圧を測定することができます。
  • インタフェースから継承するクラスのカテゴリを説明する名詞を使用します。たとえば、インタフェースがてこツールを表すクラスのカテゴリを説明する場合、インタフェースに「Lever.lvclass」という名前を付けます。
  • 名前の最初には大文字の「I」を使用しないでください。ほとんどのテキストプログラミング言語では、インタフェースをクラスから区別するために、通常、インタフェース名の先頭に大文字の「I」を付けますが、LabVIEWではグリフを使用してインタフェースとクラスを区別します。また、LabVIEW開発環境のほとんどの部分で、クラスとインタフェースは意図的に同一に扱われます。メソッドの発呼者は通常、基底タイプがインタフェースであるかクラスであるかを気にしません。したがって、「I」を回避することで発呼者コードをリファクタリングすることなく、クラスをインタフェースに、またはその逆に変換できます。

インタフェースを使用するサンプルについては、以下のプロジェクトを参照してください。

  • labview\examples\Object-Oriented Programming\Basic Interfaces\Basic Interfaces.lvproj
  • labview\examples\Object-Oriented Programming\Actors and Interfaces\Actors and Interfaces.lvproj