コンピューティングにおいて、オブジェクト指向ユーザーインターフェース(OOUI )は、オブジェクト指向プログラミングのメタファーに基づいたユーザーインターフェースの一種であり、 MacOSやUnixなどの最新のオペレーティングシステム(「オブジェクト指向オペレーティングシステム」)のほとんどを説明しています。OOUIでは、ユーザーはアプリケーションが対象とするドメイン内のエンティティを表すオブジェクトと明示的に対話します。たとえば、多くのベクター描画アプリケーションはOOUIを備えており、オブジェクトは線、円、キャンバスです。ユーザーはオブジェクトを明示的に選択したり、そのプロパティ(サイズや色など)を変更したり、オブジェクトに対して他のアクション(移動、コピー、再配置など)を実行したりできます。ビジネスアプリケーションにOOUIがある場合、ユーザーは顧客、製品、注文など、ビジネスドメイン内のエンティティを表すオブジェクトを選択したり、それらのオブジェクトに対してアクションを実行したりする可能性があります。
ヤコブ・ニールセンは、機能指向インターフェースとは対照的に、オブジェクト指向UIを次のように定義しています。「オブジェクト指向インターフェースは、機能指向インターフェースと比較して、アプリケーションを裏返すものと表現されることがあります。インタラクションの主な焦点は、通常、アイコンやウィンドウとして画面上にグラフィカルに表示されるユーザーのデータやその他の情報オブジェクトに変わります。」[ 1 ]
デイブ・コリンズは、OOUI(無免許運転)を3つの特徴を示すものとして定義している。
ジェフ・ラスキンは、OOUIの最も重要な特徴は「動詞-名詞」ではなく「名詞-動詞」の対話スタイルを採用していることであり、これはユーザビリティの面でいくつかの利点があると示唆している。[ 3 ]
OOUIの概念と、ユーザーインターフェース設計におけるその他の重要なアイデアの間には、以下のような大きな相乗効果が期待できます。
ユーザーインターフェースの未来的な構想の多くは、OOUI、特にOOGUIの概念に大きく依存しています。[ 4 ] しかし、これらのアイデアの1つ以上を実装しているものの、実際にはOOUIではないユーザーインターフェースの例は数多くあります。ただし、それらはしばしば誤ってOOUIとラベル付けされています。[ 5 ] 逆に、グラフィカルでもなく、直接操作技術も使用せず、強力なメタファーも使用しないOOUIの例もあります。たとえば、Smalltalkプログラミング言語の初期バージョンにはコマンドラインインターフェースがありましたが、それでも明らかにOOUIでした。[ 6 ]その後、GUI、直接操作、視覚的メタファーの開発における先駆的な役割でより有名になりました。
OOUIとオブジェクト指向プログラミングには多くの概念的な類似点があるが、OOUIをオブジェクト指向プログラミング言語を使用して実装する必要があるとは限らない。
IBMの共通ユーザーアクセス(CUA)のガイドライン(おそらくOOUI設計の標準を定義する最も包括的な試み)では、「オブジェクト指向プログラミングはオブジェクト指向ユーザーインターフェースの開発を容易にするが、必須ではない。オブジェクト指向ユーザーインターフェースは、より従来型のプログラミング言語やツールでも開発できる」と述べられている。[ 7 ]
しかし、両社には強い相乗効果がある。 1980年にゼロックスPARCを離れてアップルに入社したラリー・テスラーは、その関係性を強調した。
多くの観察者は、Smalltalk のユーザー インターフェースと Smalltalk 言語は分離可能なイノベーションであると仮説を立ててきました。そのため、Smalltalk のユーザー インターフェースの影響を受けたシステムのほとんどは、Smalltalk の実装アプローチに頼ることなく設計されています。Apple では、Lisaの最初の 6 つのアプリケーションをPascalを使用して実装した後、Smalltalk のアイデアをより多く取り入れるためにプログラミング言語を変更する説得力のある理由を発見しました。Lisa アプリケーションは現在、オブジェクト、クラス、サブクラス、およびメッセージ パッシングによるプロシージャ呼び出しを特徴とする Pascal の拡張であるClascal言語で記述されています。 [ 8 ]
OOUIの概念と、ドメインオブジェクトからソフトウェアを構築するという考え方の間には、明らかな相乗効果が存在する。しかし、OOUI内でユーザーが見たり操作したりするオブジェクトが、アプリケーションが構築されているドメインオブジェクトと必ずしも一致するとは限らない。
CUAガイドラインでは、「オブジェクト指向のユーザーインターフェイスでは、ユーザーが操作するオブジェクトは、プログラマーが製品を作成するために使用したコードのオブジェクトやモジュールと必ずしも一致するとは限らない」と述べられています。[ 7 ] CUAで説明されている基本的な設計方法は、 UMLを使用してインターフェイスをモデル化するOVID [ 9 ]メソッド にさらに洗練されました。
マーク・ファン・ハーメルンは、「オブジェクト指向のユーザーインターフェース設計では、設計者がプロジェクトの最初から問題をオブジェクト指向的に捉える必要はありません。さらに、設計者が全体を通してオブジェクト指向的な視点をとったとしても、オブジェクトモデルとオブジェクト指向のユーザーインターフェース設計に別々に焦点を当てることでメリットが得られます。」と述べています。[ 10 ]
対照的に、ネイキッドオブジェクトパターンは、少なくともその素朴な形式では、OOUIで表現されるオブジェクトと基となるドメインオブジェクトとの間に直接的な対応関係を強制し、後者から前者を自動生成するアプリケーション設計のアプローチである。[ 11 ]