(1/3)『HelloWorld』プログラムを基に、BREWアプリケーションの全体像を詳しく解説する。World」の表示までを実践し、本連載の導入部として、環境構築の確認とプログラムの実行方法にフォーカスして解説を行いました。今回は、前回説明を省いた“プログラムの詳細部分”について詳しく見ていきたいと思います。BREWアプリケーションの全体像まず、前回作成した「HelloWorld」プログラムを利用しながらBREWアプリケーションの全体像を俯瞰(ふかん)してみましょう。BREWアプリケーションは、定義ファイルである「MIFファイル」なども含めて、大きく以下のように構成されています(図1)。BREWアプリケーションの全体像ここのポイントは、「BREWモジュール」と「BREWアプレット」です。BREWモジュールとは、BREWアプリケーションを格納するための“コンテナファイル”です。Windows上のシミュレータで実行する場合はDLLファイル、実機上のARMバイナリであればMODファイルとなります。このBREWモジュールがどのようなファイルなのかを定義しているのがMIFファイルです。MIFファイルは、BREWモジュールと1対1の関係にあります。このBREWモジュールの中に格納されているのが、BREWアプリケーションの実体であるBREWアプレットです。BREWアプレットは、構造上BREWモジュールの中に複数存在させることが可能なため、これらを識別するために「クラスID」というIDが割り振られています(注1)。このクラスIDを格納しているのが、MIFエディタで作成した「BIDファイル」です。※注1:BREWアプレットは、機能的に複数のアプレットをBREWモジュールに入れることが可能ですが、複数のアプレットを利用するケースはあまりありません。このため、通常のアプリケーション開発では、基本的に“単一のアプレットしか利用しない”と考えて差し支えないでしょう。このBIDファイルは、プログラム中でincludeすることになりますが、この中身は以下のようになっています。前回、MIFエディタで設定した値が「AEECLSID_HELLO」としてdefineされていることが分かります。Environment)」は、この「AEECLSID_HELLO」とプログラム中で定義されたクラスIDから、BREWアプレットであるHelloWorldプログラムを識別しています(図2)。AEE上でどのように動作しているのでしょうか。AEEに組み込まれてはじめて動作するプログラムです(注2)。※注2:アプレットという名称自体に「ほかのアプリケーションの中に組み込まれて実行される小さなプログラム」という意味があります。AEE側ということになります。AEEの命令をトリガーとして動作する“プログラムモジュール”といってもよいでしょう。Servlet」と似たような仕組みだと思っていただけると、イメージしやすいかもしれません。ここで、前回作成したHelloWorldプログラムを思い出してください。Wizard」で生成された3つのファイルのうち、中身を修正しなかったファイルが2つありました。その2つのファイルとは、「AEEModGen.c」と「AEEAppGen.c」です。AEEがBREWアプリケーションを実行する際に必要な関数が実装されており、BREWアプリケーションのテンプレートでもあり、かつ、ベースとなるものでもあります。基本的に、この2つのファイルは変更せずに利用します。プログラマが扱うものは、あくまで初期化やイベント処理などが記述されたアプレットの内部処理の部分(HelloWorldプログラムでは「hello.c」)です。「AEEModGen.c」と「AEEAppGen.c」には、BREWモジュールとBREWアプレットのロード、アンロードなどに関する記述があり、この2ファイルの中にBREWアプリケーションの動作を紐(ひも)解く鍵があります。「AEEModGen.c」の中を確認してみると、以下の関数にBREWアプリケーションを起動するポイントがあります。AEEがBREWモジュールをロードする際に行われる処理が記述されています(実際には、「AEEMod_Load()」が呼ばれているのですが、これは環境依存を抽象化する関数で、実質的には「AEEStaticMod_New()」が重要になります)。この「AEEStaticMod_New()」の内部で行われる重要な処理が「IModuleインターフェイス」の実装です。AEEはこのインターフェイスを介して、BREWモジュールのライフサイクルなどを管理します(注3)。※注3:ここでいうインターフェイスとは、オブジェクト指向のインターフェイスの概念です。インターフェイスの概念により、オブジェクト間のアクセスはお互いの実装を知らなくてもよくなります。BREWは、C言語での実装もサポートしているため、C言語でオブジェクト指向の実装を行っています。AEEはIModuleインターフェイスに定義されている名前で、BREWモジュールにアクセスするようになります(図3)。AEEに手を入れずにアプリケーションの開発に集中できます。IModuleインターフェイスについて例えば、「AEEModGen.c」の中にある関数は、以下のようにインターフェイスとして実装されています。AEEMod_FreeResources()「AEEMod_Load()」がインターフェイスではない理由は、エントリポイントであるため、当然、実行環境に依存するからです。これはシミュレータ環境だとWindowsのDLLとなるため、以下のように定義されていることからもその理由がよく分かると思います。SNSfacebooktwitterITmediaはアイティメディア株式会社の登録商標です。