GUI とオブジェクト指向の間には強い繋がりがあると確信していた僕でしたが、その関係性をもっと直接説明した資料はないかと思って調べたところ、それほど多くはないものの、いくつかの文献に行き当たりました。
まず最も権威的なものとして、IBM が80年代に出版した「Object-Oriented Interface Design – IBM Common User Access Guidelines」というのがありました。これは IBM が OS/2 その他の GUI システム全般に適用するために策定したユーザーインターフェースデザインのための詳細なガイドラインなのですが、その前段部分で、「Object-Oriented User Interface(OOUI)」という言葉で GUI の思想を語っているのです。多少強引なところはあるものの、GUI はオブジェクト指向であるべきであるということを具体的な実装サンプルとともに説いているのです。ただ残念なことに、サンプルとして示されるデザインがあまりにもダサいので、Apple のガイドラインのような説得力がありません。理屈はよくても出来上がる画面がこれじゃなぁという感じなのです。OS/2 を思い出してください。あんな感じです。
IBM のこの OOUI メソッドは、後に「OVID(Object, View, and Interaction Design)」というメソッドに発展します。OVID については、「Designing for the User with OVID – Bridging User Interface Design and Software Engineering(Dave Roberts, Dick Berry, Scott Isensee, John Mullaly)」という本で詳しく解説されています。要するに、オブジェクト指向分析でモデリングした結果をシームレスに GUI デザインに繋げるための方法論で、クラスやステートマシンの定義をウィンドウやイベントハンドラなどに変換するプロセスを説明しています。
他にも、エンジニアリング寄りの観点から OOA と GUI をロジカルに繋げる手法を説明したものとして、「Designing Object-Oriented User Interfaces(Dave Collins)」や「Object Modeling and User Interface Design(Mark Van Harmelen)」といった文献があります。
これらのメソッドが目指しているのは、GUI という多分にアーティスティックで定性的なデザイン領域を、要求モデルから如何に論理的に(機械的に)扱うかということだと思いました。それができれば確かに、上流でのモデリングだけちゃんとやってれば最高のスクリーンデザインを導き出せるわけなので、絵心のないエンジニアにとっては朗報です。
ところがやっぱりそう簡単にいかないということは、これらの本を見ただけで分かってしまいます。IBM の例と同様に、事例として紹介されている画面のデザインが、どれもなんだかカッコ悪いのです。合理的ではあるものの、操作方法がなんだかとても「手続的」で、機能要件をそのままコントロールに割り当てただけのような感じがするのです。結局、タスク指向に引き寄せられているのです。
考えてみればそれもそのはずで、OOA でモデル化されるのはあくまでもユーザーの要求事項と因果関係だけなので、それらを秩序だったひとつの道具としてまとめる世界観は、ユーザーの想像の域を出ないのです。これは決定的な弱点です。それだと例えば、車を作るための要求分析で「直進する」「左折する」「右折する」という要件が定義された結果、それぞれを実行するための3つのボタンが運転席に配置されるということになってしまいます。要求事項は反映されていますが、使い物にはなりません。使えるようにするためには、これらの要求全体を根本的に、しかもシンプルに満たす「ハンドル」という世界観を発明するデザイナーの飛躍が必要なのです。
この飛躍を助けるのが「デザインパターン」なのではないかと思うのですが、それについてはまた後日書きます。
OOUI について、エンジニアリングの観点ではなくユーザーエクスペリエンスの観点から言及したものとして、「The Elements of User Interface Design(Theo Mandel)」という本があります。著者は IBM 出身で、この本の中で解説される OOUI の理論はほとんど OVID からの流用なのですが、インタラクションデザインやグラフィックデザインといったアーティスティックな領域におけるノウハウの一環として OOUI を位置づけ、デザイナーに向けて分かりやすく説明しているという点で意義深いと思います。
この本によれば、OOUI の特徴には次のようなものがあります:
- システムは互いに協調するオブジェクトおよびそれらのビューによって構成される
- タスクに対する入出力よりもオブジェクトに対する入出力を重視する
- ユーザーは自分なりの方法でタスクを遂行でき、またそれを改善できる
- 限定的なオブジェクトを複数のタスクで使い回す
- オブジェクトの状態はリアルタイムに視覚的にフィードバックされる
- ひとつのオブジェクトは複数のビューを持てる
- 直接操作かつ可逆的
- 全てのオブジェクトが常にアクティブ
- システムの内部的な仕組みを隠匿する
- 目的語 → 動詞 のシンタックス
- ユーザーが見るのはアプリケーションではなくオブジェクト
- オブジェクトはそれ自身が役割を体現する
そうですね、世の中、同じようなことを考える人がいるものです。これらは全て僕がモヤモヤと考えていたUIの理想像と一致するじゃないですか。おまけに自動車と電車の例え話まで出てくるのです。
そういうわけで、僕の中では結論として、良いユーザーインターフェースとはすなわち OOUI である、ということになったのでした。