連載:Microsoft AJAX Library&JavaScriptプログラミング

第1回 Microsoft AJAX Libraryで実践オブジェクト指向JavaScript

山田 祥寛(http://www.wings.msn.to/
2007/10/16
Page1 Page2 Page3 Page4

■インターフェイスの定義と実装

 次に、インターフェイスの定義と実装について見てみよう。インターフェイスとは何ぞやという点については、別記事「継承とインターフェイス」などが詳しいので、併せてご参照いただくとよいだろう。ここでは、MS AJAX Libでインターフェイス、そして、その実装クラスを定義する例にフォーカスして解説を進める。

 以下のリスト8は、IAnimalインターフェイスと、その実装クラスであるHamsterクラスを定義したコードだ。IAnimalインターフェイスでは、walkメソッドを1つを定義しているものとする。

// 名前空間Wingsを宣言
Type.registerNamespace("Wings");

// Wings.IAnimalインターフェイスを定義(メンバはwalkメソッドのみ)
Wings.IAnimal = function() {
  throw Error.notImplemented();
};

Wings.IAnimal.prototype = {
  walk : function() {
    throw Error.notImplemented();
  }
};

Wings.IAnimal.registerInterface("Wings.IAnimal");

// Wings.IAnimalインターフェイスを継承したWings.Hamsterクラスを定義
Wings.Hamster = function() {};

Wings.Hamster.prototype = {
  walk : function() {
    window.alert("トコトコ");
  }
};
Wings.Hamster.registerClass("Wings.Hamster", null, Wings.IAnimal);

var ham = new Wings.Hamster();
ham.walk(); // 「トコトコ」
リスト8 IAnimalインターフェイスと、その実装クラスHamsterを定義する例

 インターフェイスを定義する場合のポイントは、

registerClassメソッドの代わりに、registerInterfaceメソッドで登録

インターフェイス内のメンバはSys.NotImplementedException例外をスロー

の2点だけだ。Sys.NotImplementedExceptionは「メソッドが未実装である」ことを表す例外で、Error.notImplementedメソッドを呼び出すことで生成できる。

 そして、このインターフェイスを実装しているのが、リスト8の の部分だ。インターフェイスを実装するには、先ほどから何度も登場しているregisterClassメソッドの第3引数に実装するインターフェイスを指定するだけだ。ちなみに、第2引数は継承元となるクラスを指定するものであるが、ここでは継承は行わないのでnullを指定しておく。

 なお、インターフェイスは複数同時に実装することも可能だ。例えば、Wings.IAnimalインターフェイスとSys.IDisposableインターフェイスとを実装したいという場合には、

Wings.Hamster.registerClass(
  "Wings.Hamster", null, Wings.IAnimal, Sys.IDisposable);

のように、必要な数だけインターフェイスを列記することが可能だ。

 以上を理解したら、さっそくコードを実行してみよう。Wings.Hamsterクラスで実装されたwalkメソッドが正しくメッセージを返すことが確認できたら、試しにwalkメソッドの定義(リスト8の )を削除してみよう。今度は、

Sys.NotImplementationException: The method or operation is not implemented.

と、メソッドが実装されていないことを表すメッセージが確認できるはずだ。

[コラム]Typeクラスの実体

 スクリプト・コアの中核ともいえるTypeクラスであるが、その実体は、ブラウザのグローバル・オブジェクトであるwindowオブジェクトのプロパティである。

 実際に、MS AJAX Libのコードを確認してみよう。MS AJAX Libのコードは以下のフォルダに配置されている。

C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v<バージョン番号>\MicrosoftAjaxLibrary\System.Web.Extensions\<バージョン番号>

その中に含まれる「MicrosoftAjax.debug.js」を確認してみると、以下のような記述が見つかるはずだ。

window.Type = Function;

 このように、window.TypeプロパティにはFunctionオブジェクト(クラス)がセットされていることが確認できる。別稿「JavaScriptでオブジェクト指向プログラミング」でも紹介したように、JavaScriptにおけるクラスは関数(Function)オブジェクトによって表される。

 つまり、TypeクラスがFunctionクラスであるということは、すべてのクラスからTypeクラスのメンバを呼び出せるということになるわけだ。例えば本文でも、なにげなく、

Wings.Animal.registerClass("Wings.Animal");

のように記述してきたが、これはFunctionオブジェクトである「Wings.Animal」を介してTypeクラスのregisterClassメソッドを呼び出していたというわけだ。

 なお、グローバル・オブジェクトである「window」のメンバには、オブジェクト名を介さずに直接にアクセスすることが可能であるので、Typeプロパティについても、

Type.registerNamespace("Wings");

のように、あたかもそれ自体がオブジェクトであるかのようにアクセスすることができる。もちろん、

window.Type.registerNamespace("Wings");

としても間違いではないが、windowオブジェクトは省略して記述するのが一般的である。

 以上、今回はMS AJAX Libの概略を鳥観するとともに、MS AJAX Libを利用するうえで最も基本的な知識となる「スクリプト・コア」について解説した。

 スクリプト・コアの知識が役立つのは、自分自身でコーディングを行う局面だけではない。例えば、ASP.NET AJAX Control Toolkitなどで提供されているコントロールのコードを自力で読み解かなければならないような局面でも、その構造を把握する際に大いに役立つはずだ。

 今回紹介した内容のほかにも、Typeオブジェクトは型システムにアクセスするためのさまざまな機能を提供しているが、少なくとも、今回登場した基本的な名前空間や継承/実装の構文だけは、確実に理解しておくことをお勧めしたい(そのほかのTypeクラスのメンバについては、オンライン・ドキュメント「Typeクラス」も参照)。

 さて次回は、UpdatePanelコントロールによる非同期通信をクライアントサイドから制御するPageRequestManagerクラスについて解説する予定だ。どうぞお楽しみに。End of Article


 INDEX
  Microsoft AJAX Library&JavaScriptプログラミング
  第1回 Microsoft AJAX Libraryで実践オブジェクト指向JavaScript
    1.Microsoft AJAX Libraryの導入と構造
    2.スクリプト・コアによるクラス定義の基本
    3.MS AJAX Libによるさまざまなオブジェクト指向構文
  4.インターフェイスの定義と実装/[コラム]Typeクラスの実体
 
インデックス・ページヘ  「Microsoft AJAX Library&JavaScriptプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間