豊田 孝

サンプル・プログラムのダウンロードはこちら

完成したプログラムの特徴と動作結果

 本連載はプログラミング・テクニックを紹介する連載ではありませんから,ソースコードに関する説明は割愛させていただきます。実行コードは本サイトからダウンロードできるようにしてあります。なお,動作環境はWindows 2000搭載DOS/Vマシンなら問題はないと思います。Windows Meでも動作する可能性がありますが,確認テストは行っておりません。サンプルプログラム実行後の責任は一切免除させていただきます。完成したプログラムは“知りたい情報さえわかれば,その情報に対応するクラス名を入力すれば,たちどころに必要情報を目の前の画面に表示させることができる”という特徴を持っています。例えば,お使いのマシンに書き込まれているBIOS情報を知りたい場合,Win32_BIOSというクラス名を入力するだけです。入力できるクラス名と表示される情報の関係詳細については,後ほど詳述します。

 開発したサンプルプログラムは2つあり,それぞれProperties.exeとMethods.exeという名称を持っています。前者はクラス内のプロパティ情報を表示し,後者はメソッド情報を表示します。ここで念のために,通常ソフトウエアを開発しない“普通の人々”の視点から,クラス情報を表示する意味を整理しておくことにします。

“クラス情報を表示するということは,クラスを構成するプロパティ(データ)とメソッド(動作内容)に関する情報を表示することである”

それでは次に,クラス情報を表示して得られるメリットもはっきりさせておきましょう。

“表示されるクラス情報を見れば,私たちはその製品の特徴を理解できるだけではなく,その製品を開発した会社の技術力や考え方,及び将来の技術動向なども分かる”

サンプル・プログラムの品質

 これはこの後はっきり分かることですが,サンプル・プログラムを起動すると確かにクラス情報が表示されます。しかし,その表示内容は必要最低限の情報です。表示情報を活用するには相当の高度な知識が必要です。おそらく,私の友人は,表示される情報を活用することはできないでしょう。その原因はなんでしょう? 次の一点につきます。

“要求があいまいであったから”

私の立場からすれば,次のようなサンプル・プログラムの作成効果が期待できます。

“友人の会社は一部上場会社である。友人は職場で私のサンプル・プログラムを実行するだろう。すると,彼の同僚の1人が表示画面を覗き込み,表示内容に興味を示すかもしれない。その興味が発展すれば,正式開発依頼である。そうなれば,要求変更と将来の拡張を見据えた製品を効率的に作成しよう! その術はすでに知っている。果報は寝て待とう”

図2
いよいよクラス情報を実際に表示する作業を開始します。

 ダウンロードしたサンプル・プログラムであるProperties.exeとMethods.exeのいずれかを起動すると,図2[拡大表示]のような初期画面が表示されます。これは目的のクラス名の入力を促す画面です。先ほどもちょっと触れましたが,念には念を入れるために,クラス名を入力する意味を,普通の人々の視点から再度整理しておくことにします。わかりやすい文章を用意するために,一部推測も入っております。この点ご了解ください。

“Microsoftは業界団体であるDMTFが策定したCIM(共通情報モデル)を採用して,コンピュータ・システムをモデル化している。コンピュータ・システムは一般には,メモリーやCPUなどをはじめとするハードウエア要素と,OSやアプリケーションなどのソフトウエア要素で構成されている。Microsoftはコンピュータ・システムとはどうあるべきかという問題への回答を,業界団体が用意した共通情報モデルに従って定義し,それを公開している。共通情報モデルはクラスとその構成を定義し,個々のクラスに名前を付けている。ただし,これから入力するクラス名はそのような,いわば,業界団体であるDMTF定義の標準クラスから,Microsoftが独自に定義し直した(専門的には派生)クラスに付けられた名称の1つである”

図3
 ここで目をつぶってご自分のコンピュータ・システム環境を思い描いてみてください。日々開発業務を行う現役開発者の方は,どのようなシステム要素を,どのようなクラスとして定義されるでしょう。普段はソフトウエア開発に無縁な普通の人々は,おそらく,自分が現在使用しているコンピュータ・システムを制御しているBIOSや各種の拡張カードに関する情報など見たことがないかもしれません。今日からはいつでも見ることができます。

 DMTFには,多数のハードウエア/ソフトウエア・ベンダーが参加しています。参加者が一致協力して共通クラスを定義しています。すでに紹介したように,このクラス定義作業は,特定のOSや製品を意識しない方向で行われています。このため,これから表示されるクラス情報は,現在のITの流れを知らせてくれる貴重な生きた情報という意味もあるのではないかと思います。

図4
 いずれかのサンプル・プログラムを起動すると,先に紹介した初期画面が表示され,デフォルトでWin32_ComputerSystemという名称のクラスを入力できるようになっています。初期画面のOKボタンをそのままクリックすると,図3[拡大表示],図4[拡大表示]のような情報が表示されます。これら2種類の画面を前にして,ソフトウエア開発業務に日頃縁のない“普通の人々”は,次のような疑問を持つことでしょう。

“このような情報をどのように活用すればよいのであろうか?”

図5
 すでに触れたように,情報にはその情報を発信する側と受信する側があります。情報発信者はだれでも,自分が発信する情報を受信者が効率よく理解できるように,準備作業をするものです。これは情報発信の基本といえるでしょう。

 ソフトウエア開発を依頼された場合,問題領域をクラス単位に整理しただけでは不十分です。担当開発者は,自分が定義した個々のクラスの意味と機能を文書化する必要があります。この文書化には次のような目的があるはずです。

 第1の目的は,発注者(最終的には私たちユーザー)はその文書から,どのようなプロパティやメソッドが定義されているのかを理解することができるということです。この点は後で具体的に説明します。

図6
 第2の目的は,(これは次回連載で取り上げる“クラス継承”にあたりますが),クラスは基本的に開発プロジェクト内で再利用される資源という意味があります。つまり,1人の開発者が用意したクラスは,その開発者が属する開発プロジェクト・チーム全員の財産といえるのです。

 それではクラス・ベースの情報発信の意味と威力を具体的に見ていきましょう。先に取り出したWin32_ComputerSystemクラス情報は図5[拡大表示]のように文書化されています。この文書はすべて英文で記述されているところが辛いところですが,このように,Win32_ComputerSystemクラスを構成する個々のプロパティの意味がきちんと文書化されています。例えば,Win32_ComputerSystemクラスには図6[拡大表示]のようなSystemTypeというプロパティが用意されています。

図7
 この文書から,SystemTypeプロパティは,現在使用しているシステムが採用しているCPUアーキテクチャ,つまり,Win32_ComputerSystemクラスが持つデータ(属性といってもよいでしょう)を通知してくれていることがわかります。クラス間の関係(継承や関連など)詳細を表示してくれるCIM Studio(次回説明予定)というWMI Platform SDKに付属するツールは,このSystemTypeプロパティを図7[拡大表示]のように日本語で定義しています。

 今度はメソッド情報も調べてみましょう。すでに紹介した画面が示すように,サンプル・プログラムMethods.exeは動作完了後,SetPowerStateという名称を持つメソッドを持つと報告しています。Win32_ComputerSystemクラスが持つメソッドはこれだけです。CIM Studioヘルプはこのメソッドを次のように説明しています。ただし,この情報はあくまでも参考のために紹介するものですから,完全に理解する必要はありません(また理解できる人はそれほど多くはないと思います)。

uint32 SetPowerState(
[in] uint16 PowerState,
[in] datetime Time
);

“SetPowerState 方法により,コンピュータ・システムと実行されているOSの電源状態,及びシステムがいつその状態に入るかが定義されます。PowerStateパラメータは,PowerStateプロパティで定義された有効な整数値の1つとして指定されます。時間パラメータ(5以外に変更されるすべての状態は“電源サイクル”)は,標準日付値,または間隔値(方法の実行が受信されると間隔が開始する)のいずれかとして電源状態が設定されるときを示します。PowerStateパラメータが5の“電源サイクル” のとき,時間パラメータは,システムがもう一度電源オンになるときを示します。成功の場合,SetPowerStateは0を返し,指定された電源状態及び要求時間がサポートされていない場合は1を返し,ほかのエラーが発生する場合はほかの値が返されます。”

 この説明文を一読後の感想を申し上げれば,非常にわかりにくい,と言えると思います。私が発注者なら,開発担当者に再考をお願いすると思います。しかしこの難解な説明を辛抱強く解読(これはもちろん好ましいことではありません)してみると,次のようなことを理解することができます。

“SetPowerStateメソッドは,PowerState プロパティ(データ)を使って,コンピュータの電源状態を操作する機能を提供している”

 これ以上の詳細説明は割愛させていただきますが,コンピュータの動作モードには低消費電力モードやセーブ運転モードなどが用意されています。このようなコンピュータの動作モード操作をこのSetPowerStateメソッドは担当していると考えておくとよいでしょう。

その他のクラス情報を表示するためのヒント

図8
 その他のクラス情報を取り出してみたい方は,ここからWMI Platform SDKをダウンロードし,付属ドキュメントを参照されてください。ドキュメントには図8[拡大表示]のような多数のクラスが記述されています。

 ご覧のように,ハードウエアからソフトウエアまでのかなり詳細な情報をクラスとして整理しています。このため,私が用意したサンプルプログラムを使用すれば,クラス名を入力するだけで,いつでも,必要な情報を表示させることができます。例えば,CIM_LogicalDeviceというクラス名を入力してみてください。面白い情報が表示されます。なお,入力したクラス名によっては大量の情報が背後で収集されるため,かなりの時間がかかります。Win32_Threadなどはそのようなクラスの1つです。特に,ファイルやディレクトリ関連クラスを指定すると,処理が終了するため,昼寝ができるほどです。理由はお分かりですね。ぜひ後日いろいろと試してください。繰り返しになり恐縮でございますが,実行後の責任は一切免除させていただきます。

サンプル・プログラムが暗示する時の流れ

 今回紹介した2つのサンプル・プログラムProperties.exeとMethods.exeは,内部でCOMと呼ばれるMicrosoftのコンポーネント技術を応用しています。MicrosoftはCOM技術を応用したアプリケーションの動作を基本的に永久保証してくれています。そして,これが重要なことですが,すでに紹介してあるRationalのUMLの大家であるRambaugh氏もRUP定義で中心的な役割を果たすKruchten氏もCOMとEJBに言及し,コンポーネントベースのソフトウエア開発の重要性を指摘していることです。わが国でもEJBコンポーネントの流通を促す会社コンポーネントスクエアがすでに操業を開始しています。COMコンポーネント分野では,文化オリエントコムラッドなどが古くから活動しています。

 一部開発者は,コンポーネントはアプリケーション開発を不要にするだろう,と主張します。事の真偽の程は不明ですが,コンポーネントの登場により,これまでソフトウエア開発を行わなかった,あるいは,ソフトウエア開発を自分には縁遠いものと信じ込み,遠くから開発風景を眺めてきた“普通の人々”も,次のような言葉を人知れずつぶやく可能性がでてきたということです。

“コンポーネントを使えば,こんな自分でもアプリケーションが作れるかもしれない”

 私はこのようなときの流れを大歓迎します。MicrosoftのCOMコンポーネントに関して言えば,COMコンポーネントはクラスの塊である,という認識を私は持っています。この認識をさらに深めれば,クラスはプロパティとメソッドで構成されることもあり,コンポーネントの時代を当分支えるのはオブジェクト指向開発方法論である,と結論できるのではないかと思います。

 ソフトウエア開発を実際に担当する開発者からすれば,自分が作成したコンポーネントをより多くの人に使用してもらうためには,文書作成能力も含めた高度なコミュニケーションスキルが要求される時代の到来といえるのではないでしょうか。ユーザとの交流は,クラス定義作業によい結果をもたらすと私は思います。

今回のまとめ

 今回は,これまでに取り上げたクラスについて復習するとともに,クラスを構成する重要な情報であるプロパティとメソッドの意味を説明しました。次回は,クラスの継承というトピックを取り上げます。明日またお会いしましょう。