豊田 孝

 前回はオブジェクト指向開発方法論を語る際には避けて通ることができないといわれるクラスを取り上げ,通常はプログラミング作業を行わない“普通の人々”の視点から,次のように整理しました。

・クラスは相互に独立した基本的な「用語」である
・クラス(用語)は,場面場面に応じて適切に選択し,使用する必要がある
・1つの会社に特有なクラス(用語)は,よりわかりやすく説明する必要がある
・1つの会社に特有な商品を表現するクラス(用語)である場合,次期商品名(用語)も意識して作成する必要がある
・1つの会社に特有な商品(クラス)は他の商品(クラス)と併用されることもある

 今回はクラス内容を構成するプロパティとメソッドを取り上げます。すぐにでも本題に入いたいところですが,確認のためにクラスについて簡単な復習をするとともに,簡単な補足説明を追加いたします。これ以降の文章を読まれる際には,以下の一文を頭の隅に入れておいて下さい。

“クラスは,IT時代における情報戦略の中心に位置するのではないか?”

 冒頭に紹介したクラス概要の一文一文を一読すれば,多くの人はその場で個々の意味を即座に理解することができると思います。しかし,通常はプログラミング作業をすることのない発注者と,日常的にプログラミングをする開発者の解釈内容の間には,相当の隔たりがあるのではないかと思います。この隔たりが大きすぎる場合,プロジェクトを進行させる上でかなり深刻な問題が出てしまうのではないか,と私は心配しています。

 例えば,ゲーム・プログラムの場合,多数のキャラクタが必要になります。これらのキャラクタをクラスとして定義したとしましょう。ゲームの原作者は,キャラクタを自分の分身と考えるでしょう。一方,営業関係者はキャラクタを宣伝販売する対象と考えるでしょうし,開発者は分析する対象として向き合うでしょう。1つのキャラクタに対する個々の立場の違いが極端に表面化した場合,その違いを埋めることなく開発作業を進行することは大変危険と言えます。同じ漫画ではあっても,漫画本とテレビ化されたアニメ作品とは異なる作品であるような印象を受けるのは誰しも経験したことがあるでしょう。これと似たような話には事欠きません。

 ある有名な作家は,自分の作品が入試問題に出題され,その解答を一読後激怒した,という話を聞いたことがあります。つまり,入試問題開発段階で勝手な解釈が行われ,原作者は開発された入試問題という製品品質に満足していないわけです。現在,この入試問題開発工程が変更されようとしているとは,皆様のご承知のとおりです。ここで,“クラスは用語である”という表現を次のように変更してみましょう。

“クラスは言霊(ことだま)である”

 言葉には霊が宿っているというわけです。どことなくサスペンス風な雰囲気を帯びることになりましたが,要はクラスが無限の奥行きのある意味的な空間を持っていることを示唆しています。すべてのクラスが無限の奥行きを持っているのであれば,正面きってクラスを他人に説明することなどできなくなります。無限の奥行きのある意味空間から“クラスの本質”を抜き出す作業は,それなりの能力を要求することはだれの目にも明らかです。

 神官,霊媒師あるいは占い師と呼ばれる人がいると思いますが,そのような人たちは特殊な感受性,理解力そして説明能力を持つといわれます。オブジェクト指向開発方法論に関する文献の多くは,クラスの選択こそ開発者の真価が問われ,一人前になるにはそれなりの時間と経験が必要であると説いています。そして,一定水準の能力を身につけるまでには時間がかかるとも説きます。また,現役のオブジェクト指向開発者の中には,このクラス選択定義作業こそもっとも創造性が要求され,それゆえもっとも魅力ある作業プロセスであると述べる人もいます。専門的には,このクラス選択作業を「クラス抽出」と呼んでいます。クラス抽出なら,“どこからクラスを取り出すのか”ということになりますが,一般的には「アプリケーション・ドメイン(領域)」,あるいは,「問題(プロブレム)領域」と呼んでいるようです。

 「問題領域」という表現は,問題を特定したうえで絞り込む(問題領域の境界設定)という作業内容を含んでいる点に注意してください。この作業をオブジェクト指向開発方法論では一般的には,「現実世界のモデル化」と呼んでいます。これは「複雑な現実世界の単純化作業」と表現しなおすことができるでしょう。ご想像のように,この作業にも創造性や経験などが問われます。経験を積んだ開発者は,経験から得た豊富な“パターン”を整理した記録集を持っているといわれます。

 ご存知の方もおられるかもしれませんが,最初のオブジェクト指向プログラミング言語はSimulaという名前を持っていました。Simulaは,英語のSimulation,つまり,模擬実験を意味すると思います。表現を変えれば,現実世界を模倣する,装う,ということになるでしょう。しかしここで注意すべきは,予備校の模擬試験でよい点数をとっても,目的の学校の入学試験に落ちてしまう人も結構いるということです。つまり,クラスによるモデル化はあくまでも模倣であり,現実世界そのものではありませんから,おのずとどこかに限界があるという運命は避けられないわけです。

クラスとメソッド,プロパティの関係

 それでは,このようなクラス選択作業の流れを念頭に置きながら,クラスがどのように表現されているのかを具体的に見ることにしましょう。ここでも,次のような視点を設定することにします。

“オブジェクト指向開発方法論において不可欠といわれるクラスを構成するプロパティとメソッドは,私たち普通の人々にどのようなメリットをもたらすのか”

 プロパティとメソッドが普通の人々にもたらすメリットを考える前に,クラス,プロパティ,メソッド間の関係を確認しておく必要があります。そこで,すでに紹介済みの次の一文を思い出してください。

“類似したオブジェクトの構造と振る舞いは共通クラス内に定義できる”

この文章は,クラスという用語を中心に解釈しなおせば,次のように単純化できると思います。

“クラスは構造体と振る舞いを含んでいる”

この文章をさらに簡略化すれば,次のようになるでしょう。

“クラスはデータと動作で構成される”

 開発現場では,クラスを構成するデータを属性やプロパティ,動作をメソッドや操作などと呼んでいるようです。いろいろな表現方法があることは事実でしょうが,プロパティとメソッドは最終的には次のように整理できると思います。

“プロパティとメソッドはクラスを具体的に表現する情報である”

 ここで情報という言葉が出てきました。ご承知のように,いまIT革命が叫ばれています。そして,多数の人々が立ち上がり,それは見方によっては実体を伴わない用語である,と冷淡な批評を加え始めています。この「IT革命」という用語が唱えられる前は,「情報革命」や「情報化時代」という言葉が流行していました。一体この言葉は現在どのような扱いを受けているのでしょう? 私たちは情報革命を無事なし終え,現在はより高次のIT革命を遂行している最中なのでしょうか? 浅学の私にはこれらの問いへの回答を用意することは不可能です。同じように,情報とは何かという問いへの回答を用意することもできません。しかし,次のようなことは間違いなく言えるでしょう。

“情報には発信する側と受信する側が必要である”

 この角度からIT革命という用語を振り返ると,安価な高速発信と安価な高速受信を可能とする技術基盤の確立が重要であることはだれでも理解できます。いま世間では,ブロードバンドの必要性が叫ばれていることは私たちの知るところです。ところが,海の向こうの米国では経済の減速もあり,多数のドットコムやSIがその姿を市場から消しているといわれます。彼らはインターネットを利用して自分たちの情報を世界に発信していたはずです。そして,一時的にでも収益を上げたドットコムは,それなりの受信者を獲得していたことになります。しかし,市場からその姿を消すということは,獲得した受信者を失ったことを意味します。このような背景もあり,今CRM(Customer Relationship Management)と称される既存顧客へのサービス管理をシステム化する市場が急成長しているといわれます。

 普段ソフトウエア開発をしない“普通の人々”は,情報の受信者になると同時に,Webアプリケーションを通して発信者になる可能性もあります。“普通の人々”がインターネット上から情報を発信する場合,彼らは機器を購入し,ソフトウエア開発を外部のソフトウエア・ハウスなどに発注することになるでしょう(SIなどに一任する場合も当然あるでしょう)。情報の受信者と発信者に同時になるという現象は,ソフトウエア開発を日々行っている開発者にもそのまま当てはまる可能性を否定できません。なぜなら,時代からの要求が複雑になっている現状では,不得意な技術部分をそれを得意とする他の専門開発者に任せた方が安心だからです。発注する前には,信頼できる発注者を見つけ出す必要があります。この作業ではインターネットから情報を収集するために一時的にせよ,情報の受信者になります。個人的な人間関係から発注先を見つけ出すにしても,インターネット上に公開されている情報を確認しておいた方がよいと私は思います。結論として,プログラム開発に縁のない普通の人々も,ソフトウエア開発のプロである開発者も,最終的には,情報の受信者になる確率が高い,といえるでしょう。相互依存が私たちの想像を絶するほど,すでに進行しています。

プロパティとメソッドの意味

 ここで,今回の目的である“オブジェクト指向開発方法論において不可欠といわれるクラスを構成するプロパティとメソッドは,“普通の人々”にどのようなメリットをもたらすのか?”という問いに立ち戻ってみましょう。

 これまでの話の展開から,プロパティとメソッドはクラスの実体情報といってよいでしょう。オブジェクト指向開発方法論は,情報をクラス化することが基本ですから,例えば,ある商品をクラスとして定義している場合,そのクラス情報を発信するということは商品情報を公開する企業戦略という意味合いを持ちます。一方そのクラス情報を受信する側は,購入対象となる商品に関する必要情報が効率よく閲覧できることを望みます。必要情報が公開されていない場合,閲覧者はサーチ・エンジンで見つけ出した別のWebサイトに移ってしまう可能性を否定できません。ここには,情報の発信者と受信者の間に相当の緊張関係が成立していることになります。

 前置きが長くなってしまいましたが,クラスを構成するプロパティとメソッドが普通の人々にもたらすメリットについて,仮想的な場面を想定しながら,具体的に検討する作業を開始しましょう。

依頼内容の検討とソリューション

 この検討作業では,次のような場面を想定します。

・私の友人の1人がWindows 2000 Professionalプレインストール・マシンを新たに購入した
・私はその友人から,Windows 2000 Professionalの特徴を分かりやすく説明するように依頼された

 友人の依頼内容は,“Windows 2000プロフェッショナルの特徴をわかりやすく説明してほしい”というものでした。皆さんならどのように対応するでしょうか。

 この種の依頼は日常的にありがちな依頼の1つであることもあり,多くの人はことの重大性に気づかないまま安請け合いをしてしまうと思います。ところが,まじめに考えてみると,どのOSにも言えることですが,依頼を受けた側としては次のような疑問をまず依頼者にぶつけ,はっきりした回答をもらっておく必要があるでしょう。

疑問1:依頼相手はこれまでどのようなOSを使用してきたのか
疑問2:依頼相手はWindows 2000 Professionalに関してどの程度の経験と予備知識を持っているのか
疑問3:依頼相手はWindows 2000 Professionalを使って何をしたいのか

これ以外の疑問も当然あるでしょうが,ここではこれら3点に絞ります。依頼相手である友人からは次のような回答を得たとしましょう。

疑問1への回答:自社WebはSolarisとJavaで運営されているが,現在その運営に自分は関与していない。しかし,自分の配属先は数ヵ月後に業者に依頼してWindows 2000ベースでLANを組むことになっている。今使用しているOSはWindows 95であり,主にExcelなどの表計算ソフトを使っている
疑問2への回答:他の部門では多くの人がWindows 2000をすでに採用している。時折自分も同僚のマシンを覗き込むことはある
疑問3への回答:現在の所属配属先にWindows 2000ベースのLANが完成した場合,後輩などに遅れをとり恥をかくのは嫌だし,ましてや上司に配置転換,あるいは,リストラの口実を与えたくない

 これらの回答内容には問題へのソリューションを探そうという真剣さも向上心のかけらもありません。「出直して来い!」と乱暴な言葉を吐き,友人の要請をばっさり切り捨てるのは簡単ですが,相手が長年の友であることもあり,何らかのアドバイスを与えてやりたいと思います。しかし,友人の回答から判断する限り,一日や二日で有効なアドバイスを与えることはできそうにありません。このような場合,Windows 2000 Professionalから必要な情報を表示することができる簡単なプログラムを作成し,必要になったときにそのつど動かしてもらい,自力で知識を増やしてもらうという方針を採用すると便利です。それでは,次にどのような機能を持つプログラムを作成すればよいかを考えてみましょう。以降の文章を読まれると,次のことが具体的に理解できるはずです。

“プロパティとメソッドで構成されるクラスは情報を公開するための強力な道具である”

サンプルプログラム作成上の心得

 Windows 2000プロフェッショナルという特定OSの特徴を紹介する機能を持つプログラムを作成するわけですが,まず何よりも先に次のようなことを考えることが重要ではないかと思います。

・可能な限り楽をして作成することを心がける
・最新OSを利用している場合,何もかもゼロから開発しようなどとは考えない
・利用できるものは特別な理由がなければ,徹底的に再利用する

効率的なプログラムの作成

 Windowsをはじめとする最新OSは,インターネット時代のニーズを満たすために多数の機能が追加され,複雑化する傾向にあります。しかしその一方で,ソフトウエア開発者の作業効率を改善するために,必要な開発基盤をOS自体に内蔵させたり,あるいは,時にはフレームワークと称して便利な開発基盤を追加提供してくれます。そして,これが重要なのですが,そのような開発基盤は再利用可能なクラスで構成されているのが普通です。

図1
 ここで,前回紹介した業界団体であるDistributed Management Task Forceが策定しているCommon Information Model(CIM)を思い立ちます。CIM策定作業には米Sun Microsystemsや米IBMとともに,米Microsoftも入っています。それでは,図1[拡大表示]をご覧下さい。

 この画面は,MicrosoftのWebサイトからダウンロードできるWMI Platform SDKに含まれるドキュメントから取り出しています。英文を見ただけで呼吸困難に陥る人には大変申し訳ないのですが,ご覧のように,Windows OSが細分化されています。この細分化は,次のように解釈してもよいと思います。

“Microsoftは,OSとしてのWindowsをこのように考えています”

 これまで説明してきたオブジェクト指向開発方法論から見た場合,クラスをベースとするOS情報公開であるといってもよいと思います。Linuxなどが勢力を増している現状では,クラスを利用した情報公開戦略という意味を持っているともいえます。このため,Microsoftが定義したクラス情報を表示させれば,現在使用しているOSの特徴だけではなく,一般論としては,Microsoftが考えているOSのあり方や同社の今後のOS戦略などもかなり理解できるといえます。つまり,Microsoft社の開発技術レベルや開発動向なども表示されるクラス情報から占える,といえると思います。

 多少時間をかけて画面を眺めてみましょう。ここには2000年6月末に発表された.Net情報は一切含まれていません。XMLやSOAPなどに関するクラスは一切ありません。おそらく将来的にも追加されないのではないか,と予想されます。これらは,どちらかといえば独自技術の開発やOSの改善ではなく,業界標準仕様の取り込み作業にすぎないからです。その一方,すでに紹介してあるWindows DNAを支えるCOM/DCOMは,この情報から言えば,MicrosoftのOSの一部であるという性格が強いことになります。このため,Microsoftは.Net構想を発表するとまもなく,Windows DNAという用語の使用を停止し,Windows Web Solutions Platformという新しい用語をWebサイトから公開しはじめました。Microsoftは現在,Windows DNAを第2世代のプラットフォーム,Windows Web Solutions Platformを第3世代のプラットフォームと明確に区別しています。

 次回は,サンプル・プログラムを使って,Windows 2000のクラスをのぞいてみましょう。お楽しみに。