コンピュータにユーザインターフェースを生成させるためのプログラム
【課題】.NET(登録商標)Frameworkの効率および/または性能を高めることを可能にするAPI関数の独自のセットを開発した。
【解決手段】プログラミングインターフェースが、アプリケーション、文書、媒体プレゼンテーション、および他の内容を生成する機能を提供する。これらの機能を用いると、開発者が、オペレーティングシステム、オブジェクトモデルサービス、あるいは他のシステムまたはサービスからサービスを得られるようになる。
【解決手段】プログラミングインターフェースが、アプリケーション、文書、媒体プレゼンテーション、および他の内容を生成する機能を提供する。これらの機能を用いると、開発者が、オペレーティングシステム、オブジェクトモデルサービス、あるいは他のシステムまたはサービスからサービスを得られるようになる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソフトウェアおよびそのようなソフトウェアの開発に関する。より詳細には、アプリケーションプログラムおよびコンピュータハードウェアによる、ソフトウェアプラットフォームの使用を容易にするプログラミングインターフェースに関する。
【背景技術】
【0002】
非常に早くから、コンピュータソフトウェアは、「オペレーティングシステム」ソフトウェアまたは「アプリケーション」ソフトウェアとして分類されるようになった。おおまかにいって、アプリケーションは、数学の方程式を解くか、またはワードプロセッシングをサポートするなど、コンピュータユーザのために特定のタスクを実行することを意図されたソフトウェアである。オペレーティングシステムは、コンピュータハードウェアを管理し、制御するソフトウェアである。オペレーティングシステムの目標は、コンピュータリソースをアプリケーションプログラマが使用可能にすると同時に、ハードウェアを実際に制御するのに必要な複雑さを隠蔽することである。
【0003】
オペレーティングシステムは、アプリケーションプログラムインターフェースまたはAPIとして周知の機能または関数を介してリソースを使用可能にする。用語APIは、これらの機能のうちの単一の関数を指すのにも使用される。関数は、多くの場合、アプリケーションプログラマに提供するリソースまたはサービスに関してグループ化される。アプリケーションソフトウェアは、個々のAPI関数を呼び出すことによってリソースを要求する。API関数は、オペレーティングシステムによって提供されるメッセージおよび情報をアプリケーションソフトウェアに中継する手段としても働く。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許出願第09/598,105号明細書
【特許文献2】米国特許出願第09/613,289号明細書
【非特許文献】
【0005】
【非特許文献1】[online]、ECMA、〈URL:www.ecma.ch〉
【発明の概要】
【発明が解決しようとする課題】
【0006】
ハードウェアの変更のほかに、オペレーティングシステムソフトウェアの進化を駆り立てるもう1つの要因が、アプリケーションソフトウェア開発を単純化し、加速する要望である。アプリケーションソフトウェア開発は、困難な作業になる場合があり、時折、数百万行のコードによって高度化されたプログラムを作成するために数年の開発者の時間を必要とする。Microsoft Windows(登録商標)オペレーティングシステムのさまざまなバージョンなどの広く使用されているオペレーティングシステムに関して、アプリケーションソフトウェア開発者は、そのオペレーティングシステムを利用する数千本の異なるアプリケーションを毎年記述している。そのように多くの異なるアプリケーション開発者をサポートするために、一貫性のある(coherent)、利便性の高いオペレーティングシステムベースが必要である。
【0007】
多くの場合、オペレーティングシステムをより複雑にすることによって、アプリケーションソフトウェアの開発を単純にすることができる。すなわち、ある機能が、複数の異なるアプリケーションプログラムに有用であり得る場合に、その機能をオペレーティングシステムに含めるために一度記述することが、数十人のソフトウェア開発者が数十本の異なるアプリケーションに含めるために数十回記述することを要求するよりよい場合がある。 このように、オペレーティングシステムが、複数のアプリケーションによって要求される広範囲の共通の機能性をサポートする場合、アプリケーションソフトウェア開発のコストおよび時間においてかなりの節約を達成することができる。
【0008】
オペレーティングシステムとアプリケーションソフトウェアの間のどこに線が引かれるかに関係なく、有用なオペレーティングシステムについて、オペレーティングシステムおよびコンピュータハードウェアとアプリケーションソフトウェアとの間のAPIは、オペレーティングシステム自体の効率的な内部動作と同様に重要であることは明白である。
【0009】
アプリケーションを開発するときに、開発者は、さまざまなツールを使用して、グラフィカルアイテムおよび他の内容を生成する。表示されるか、またはレンダリングされるグラフィカルアイテムおよび他のデータを配置するために、追加ツールは使用可能である。 これらのツールは、通常は、異なるエンティティまたは異なるツール開発者によって作成される。その結果、これらのツールは、一貫性のあるプログラミング環境を提供しない。したがって、これらの異なるツールを使用する開発者は、ツールそれぞれの使用方法を習得し、それらに互いに通信させることを試みる必要がある。これらのアクティビティは、面倒で時間がかかる可能性があり、間近の実際の開発タスクから時間を奪う。
【0010】
過去数年間に、インターネットおよびネットワーク技術全般の万国での採用によって、コンピュータソフトウェア開発者の風景が変化した。従来、ソフトウェア開発者は、独立型デスクトップコンピュータまたはローカルエリアネットワーク(LAN)を介して限られた数の他のコンピュータに接続されたLANベースコンピュータの単一サイトソフトウェアアプリケーションに焦点を合わせていた。ソフトウェアが、シュリンクラップパッケージでマーケティングされ、販売されたので、そのようなソフトウェアアプリケーションを、通常は、「シュリンクラップ」製品と称する。これらのアプリケーションは、明確に定義されたAPIを使用して、コンピュータの基礎になるオペレーティングシステムにアクセスした。
【0011】
インターネットが進化し、広く受け入れられたので、産業界は、ワールドワイドウェブ(または単に「ウェブ」)のさまざまなサイトでのアプリケーションのホスティングの威力を理解し始めた。ネットワーク化された世界では、あらゆる場所のクライアントが、個別の位置でホスティングされるサーバベースのアプリケーションに要求をサブミットし、ほんの一瞬で応答を受信することができる。しかし、これらのウェブアプリケーションは、通常は、元々は独立型コンピューティングマシンまたはローカルにネットワーク化されたコンピュータのために開発されたものと同一のオペレーティングシステムプラットフォームを使用して開発された。残念ながら、いくつかの場合に、これらのアプリケーションは、分散コンピューティング管理様式に適切に振り替えられない。基礎になるプラットフォームは、単純に、無制限の数の相互接続されたコンピュータをサポートするという観念を用いて構成されていなかった。
【0012】
インターネットによって導入された分散コンピューティング環境へのシフトに対処するために、Microsoft Corporation社は、「.NET」Framework(「ドットネット」と読む)と称するネットワークソフトウェアプラットフォームを開発した。Microsoft(登録商標).NETは、人、情報、システム、および装置を接続するソフトウェアである。このプラットフォームを用いると、開発者が、インターネットを介して実行されるウェブサービスを作成できるようになる。この動的なシフトは、Microsoftの.NET(登録商標)FrameworkのAPI関数のセットによって達成された。
【0013】
.NET(登録商標)Frameworkの使用がますます一般的になるにつれて、このプラットフォームの効率および/または性能を高める形が識別された。本発明者は、そのような高められた効率および/または性能を可能にするAPI関数の独自のセットを開発した。
【課題を解決するための手段】
【0014】
APIなどのプログラミングインターフェースが、アプリケーション、文書、媒体プレゼンテーション、および他の内容を生成する機能を提供する。これらの機能を用いると、開発者が、オペレーティングシステム、オブジェクトモデルサービス、あるいは他のシステムまたはサービスからサービスを得られるようになる。一実施形態では、これらの機能を用いると、開発者が、グラフィカルユーザインターフェースを生成できるようになる。
【0015】
同一の符号は、複数の図面を通じて同一の特徴を指すのに使用される。
【図面の簡単な説明】
【0016】
【図1】クライアントが、従来のプロトコルを使用する、インターネットを介してウェブサービスにアクセスするネットワークアーキテクチャを示す図である。
【図2】アプリケーションプログラムインターフェース(API)を含むネットワークプラットフォームのソフトウェアアーキテクチャを示すブロック図である。
【図3】APIによってサポートされるプレゼンテーションサブシステムならびにさまざまなAPI関数の機能クラスを示すブロック図である。
【図4】ソフトウェアアーキテクチャのすべてまたは一部を実行することができる例示的コンピュータを示すブロック図である。
【図5】プログラミングインターフェースの例の実施形態を示す図である。
【図6】プログラミングインターフェースの例の実施形態を示す図である。
【図7】プログラミングインターフェースの例の実施形態を示す図である。
【図8】プログラミングインターフェースの例の実施形態を示す図である。
【図9】プログラミングインターフェースの例の実施形態を示す図である。
【図10】プログラミングインターフェースの例の実施形態を示す図である。
【図11】プログラミングインターフェースの例の実施形態を示す図である。
【図12】プログラミングインターフェースの例の実施形態を示す図である。
【図13】プログラミングインターフェースの例の実施形態を示す図である。
【図14】プログラミングインターフェースの例の実施形態を示す図である。
【図15】プログラミングインターフェースの例の実施形態を示す図である。
【図16】プログラミングインターフェースの例の実施形態を示す図である。
【発明を実施するための形態】
【0017】
この開示は、開発者がウェブアプリケーションおよびウェブサービスを構築できるネットワークプラットフォームのアプリケーションプログラムインターフェース(API)を扱う。より詳細には、Microsoft Corporationによって作成された.NET(登録商標)Frameworkなどのネットワークプラットフォームを利用するオペレーティングシステムの例示的なAPIを説明する。.NET(登録商標)Frameworkは、分散コンピューティング環境で実施されるウェブサービスおよびウェブアプリケーションのソフトウェアプラットフォームである。.NET(登録商標)Frameworkは、特定のタスクを実行するために協力している疎結合ウェブサービスの間の通信にオープン通信標準規格を使用する、次世代のインターネットコンピューティングを表す。
【0018】
説明する実施形態で、ネットワークプラットフォームは、XML(extensible markup language)すなわちデータを記述するオープン標準規格を使用する。XMLは、World Wide Web Consortium(W3C)によって管理される。XMLは、ウェブページおよび企業間文書のデータ要素を定義するのに使用される。XMLでは、HTMLに類似するタグ構造が使用されるが、HTMLは、要素をどのように表示するかを定義し、XMLは、それらの要素に何が含まれるかを定義する。HTMLでは、事前定義のタグを使用するが、XMLでは、ページの開発者がタグを定義することができる。したがって、事実上すべてのデータアイテムを識別することができ、ウェブページが、データベースレコードのように機能することができる。XMLおよびシンプルオブジェクトアクセスプロトコル(SOAP)などの他のオープンプロトコルの使用を介して、ネットワークプラットフォームが、ユーザの必要に合わせて調整できる広範囲のサービスの統合を可能にする。本明細書に記載の実施形態を、XMLおよび他のオープン標準規格とともに説明するが、これは、請求される発明の動作に必要ではない。他の同等に実行可能な技術が、本明細書に記載の発明を実施するのに十分である。
【0019】
本明細書で使用される句、アプリケーションプログラムインターフェースまたはAPIには、メソッド呼出しまたは関数呼出しを使用する従来のインターフェースならびに、リモート呼出し(たとえばプロキシ、スタブ関係)およびSOAP/XML呼出しが含まれる。
【0020】
下の名前空間の説明の一部で、あるクラス、インターフェース、列挙、および委任の説明が空白にされていることを諒解されたい。これらのクラス、インターフェース、列挙、および委任のより完全な説明は、上のSDK参考文献が保管されるコンパクトディスクの主題の中で見つけることができる。
【0021】
(例示的ネットワーク環境)
図1に、.NET(商標)Frameworkなどのネットワークプラットフォームを実装できるネットワーク環境100を示す。ネットワーク環境100には、ネットワーク104(たとえばインターネット)上でアクセスできるサービスを提供する、代表的なウェブサーバ102(1)、…、102(N)が含まれる。一般に符号102として参照されるウェブサービスは、リモートプロシージャコール(RPC)またはオブジェクトブローカ型技術などの、ネットワークを介してウェブサービスと相互作用する他の手段も使用することができるが、通常は、XML、SOAP、WAP(wireless application protocol)、HTTP(ハイパーテキスト転送プロトコル)、およびSMTP(シンプルメール転送プロトコル)などの産業界標準ウェブプロトコルを介してネットワーク104上でプログラム的に相互作用する、再利用可能なプログラマブルアプリケーションコンポーネントである。ウェブサービスは、自己記述的とすることができ、しばしば、メッセージのフォーマットおよび順序に関して定義される。
【0022】
ウェブサービス102は、他のサービス(通信リンク106によって表されるように)、またはウェブアプリケーション110などのソフトウェアアプリケーション(通信リンク112および114によって表されるように)によって直接にアクセス可能である。各ウェブサービス102は、特定のサービスに関する要求を処理するソフトウェアを実行する1つまたは複数のサーバを含むものとして示されている。そのようなサービスは、しばしば、要求元にサービスされる情報を保管するデータベースを維持する。ウェブサービスを構成して、さまざまな異なるサービスの任意の1つを実行することができる。ウェブサービスの例に、ログイン検証、通知、データベース保管、株式市況、ディレクトリの突き止め、地図作成、音楽、電子ウォレット、カレンダ/スケジューラ、電話リスティング、ニュースおよび情報、ゲーム、発券業務などが含まれる。ウェブサービスを、互いにおよび他のアプリケーションと組み合わせて、インテリジェント対話経験を構築することができる。
【0023】
ネットワーク環境100には、ウェブサービス102(通信リンク122によって表される)および/またはウェブアプリケーション110(通信リンク124、126、および128によって表される)を使用する代表的なクライアント装置120(1)、120(2)、120(3)、120(4)、…、120(M)も含まれる。クライアントは、クライアント120(3)と120(4)の間の例示的なXMLリンク129によって表されるように、標準プロトコルを使用して互いに通信することもできる。
【0024】
全般的に符号120として参照されるクライアント装置は、多数の異なる形で実施することができる。可能なクライアント実施形態の例に、制限なしに、ポータブルコンピュータ、ステーショナリコンピュータ、タブレットPC、テレビジョン/セットトップボックス、無線通信装置、携帯情報端末、ゲーム機、プリンタ、コピー機、および他のスマート装置が含まれる。
【0025】
ウェブアプリケーション110は、ネットワークプラットフォームで動作するように設計されたアプリケーションであり、クライアント120からの要求を処理し、サービスするときに、ウェブサービス102を使用することができる。ウェブアプリケーション110は、プログラミングフレームワーク132上で稼動する1つまたは複数のソフトウェアアプリケーション130からなり、ソフトウェアアプリケーション130は、1つまたは複数のサーバ134または他のコンピュータシステムで実行されている。ウェブアプリケーション110の一部が、実際には1つまたは複数のクライアント120に常駐する場合があることに留意されたい。その代わりに、ウェブアプリケーション110が、実際にタスクを達成するクライアント120上の他のソフトウェアを調整することができる。
【0026】
プログラミングフレームワーク132は、アプリケーション開発者によって開発されるアプリケーションおよびサービスをサポートする構造である。プログラミングフレームワーク132は、複数の言語をサポートすることによって、マルチ言語開発およびシームレス統合を可能にする。プログラミングフレームワーク132は、SOAPなどのオープンプロトコルをサポートし、基礎になるオペレーティングシステムサービスおよびオブジェクトモデルサービスをカプセル化する。このフレームワークは、複数のプログラミング言語の堅牢で保護された実行環境を提供し、保護され、統合されたクラスライブラリを提供する。
【0027】
フレームワーク132は、アプリケーションプログラムインターフェース(API)レイヤ142、共通言語ランタイム(CLR)レイヤ144、およびオペレーティングシステム/サービスレイヤ146を含むマルチティアアーキテクチャである。この階層アーキテクチャを用いると、フレームワークの他の部分に影響せずに、さまざまなレイヤに対する更新および修正が可能になる。共通言語仕様(CLS)140を用いると、さまざまな言語の設計者が、基礎になるライブラリ機能性にアクセスできるコードを記述できるようになる。共通言語仕様140は、言語設計者とライブラリ設計者の間の、言語インターオペラビリティを促進するのに使用できるコントラクトとして機能する。CLSを厳守することによって、ある言語で記述されたライブラリは、別の言語で記述されたコードモジュールから直接にアクセスでき、ある言語で記述されたコードモジュールと別の言語で記述されたコードモジュールの間のシームレスな統合を達成することができる。CLSの1つの例示的な詳細な実施形態が、ECMA TC39/TG3の参加者によって作成されたECMA標準規格である。非特許文献1を参照されたい。
【0028】
APIレイヤ142は、アプリケーション130が、レイヤ146によって提供されるリソースおよびサービスにアクセスするために呼び出す関数のグループを提供する。ネットワークプラットフォームに対するAPI関数を公開することによって、アプリケーション開発者は、ネットワークリソースが実際にどのように動作するかまたは使用可能にされるかの複雑な相互作用を理解する必要なしに、ネットワークリソースおよび他のウェブサービスを完全に利用する分散コンピューティングシステム用のウェブアプリケーションを作成することができる。さらに、ウェブアプリケーションを、任意の数のプログラミング言語で記述でき、共通言語ランタイムレイヤ144によってサポートされ、共通言語仕様140の一部として含まれる中間言語に変換することができる。この形で、APIレイヤ142が、広範囲のさまざまなアプリケーションにメソッドを提供することができる。
【0029】
さらに、フレームワーク132を、フレームワークをホスティングするサーバ134からリモートに実行されるリモートアプリケーションによって設定される、API呼出しをサポートするように構成することができる。それぞれクライアント120(3)および120(M)に常駐する代表的なアプリケーション148(1)および148(2)は、直接的にまたは間接的に、ネットワーク104上でAPIレイヤ142への呼出しを行うことによって、API関数を使用することができる。
【0030】
このフレームワークを、クライアントで実施することもできる。クライアント120(3)は、フレームワーク150がクライアントで実施される情況を表す。このフレームワークは、サーバベースのフレームワーク132と同一とするか、クライアント用に修正することができる。その代わりに、クライアントが、携帯電話、携帯情報端末、ハンドヘルドコンピュータ、または他の通信/コンピューティング装置などの制限付きまたは専用機能の装置である場合に、クライアントベースフレームワークを圧縮することができる。
【0031】
(開発者のプログラミングフレームワーク)
図2に、プログラミングフレームワーク132を詳細に示す。共通言語仕様(CLS)レイヤ140は、さまざまな言語130(1)、130(2)、130(3)、130(4)、…、130(K)で記述されたアプリケーションをサポートする。そのようなアプリケーション言語に、Visual Basic、C++、C#、COBOL、Jscript、Perl、Eiffel、Pythonなどが含まれる。共通言語仕様140は、それに従う場合にさまざまな言語が通信できるようなる特徴のまたは特徴に関するルールのサブセットを指定する。たとえば、いくつかの言語は、共通言語ランタイム144によってサポートされる可能性がある所与の型(たとえば、「int*」型)をサポートしない。この場合に、共通言語仕様140に、その型が含まれない。その一方で、すべてまたはほとんどの言語によってサポートされる型(たとえば、「int[]」型)は、共通言語仕様140に含まれ、したがって、ライブラリ開発者は、それを使用することができ、言語がそれを処理できることが保証される。この通信の能力は、ある言語で記述されたコードモジュールと別の言語で記述されたコードモジュールの間のシームレスな統合をもたらす。異なる言語が、特定のタスクに特によく適するので、言語の間のシームレスな統合によって、開発者が、特定のコードモジュールに対し特定の言語を選択でき、そのコードモジュールを異なる言語で記述されたモジュールと共に使用する能力が与えられる。共通言語ランタイム144を用いると、クロス言語継承と共にシームレスなマルチ言語開発が可能になり、複数プログラミング言語の堅牢で保護された実行環境が提供される。共通言語仕様140および共通言語ランタイム144に関するさらなる情報については、特許文献1、表題「Method and System for Compiling Multiple Languages」および特許文献2、表題「Unified Data Type System and Method」を参照されたい。
【0032】
フレームワーク132によって、オペレーティングシステム146(1)(たとえば、Windows(登録商標)ブランドのオペレーティングシステム)およびオブジェクトモデルサービス146(2)(たとえば、コンポーネントオブジェクトモデル(COM)または分散COM)がカプセル化される。オペレーティングシステム146(1)は、ファイル管理、通知、イベント処理、ユーザインターフェース(たとえば、ウィンドウイング(windowing)、メニュー、ダイアログなど)、セキュリティ、認証、検証、プロセスおよびスレッド、メモリ管理などの従来の機能を提供する。オブジェクトモデルサービス146(2)は、さまざまなタスクを実行するために、他のオブジェクトとのインターフェースを提供する。APIレイヤ142に対して行われる呼出しは、オペレーティングシステム146(1)および/またはオブジェクトモデルサービス146(2)によるローカル実行のために共通言語ランタイムレイヤ144に渡される。
【0033】
API142は、API関数を複数の名前空間にグループ化する。名前空間によって、本質的に、セットとして「型」と呼ばれる、関連する機能性の特定のセットを提供する、クラス、インターフェース、委任(delegate)、列挙、および構造体のセットが定義される。クラスは、参照割り当てセマンティックス(semantics)を有する、管理されるヒープから割り当てられるデータを表す。委任は、オブジェクト指向関数ポインタである。列挙は、名前付き定数を表す特殊な種類の値型である。構造体は、値割り当てセマンティックスを有する、静的に割り当てられたデータを表す。インターフェースは、他の型を実施できるコントラクトを定義する。
【0034】
名前空間を使用することによって、設計者が、型のセットを階層名前空間に編成することができる。設計者は、型のセットから複数のグループを作成することができ、各グループに、論理的に関連する機能性を公開する少なくとも1つの型が含まれる。例示的な実施形態では、API142が、3つのルート名前空間を含むように編成される。図2には3つのルート名前空間だけが示されているが、追加のルート名前空間をAPI142に含めることもできることに留意されたい。API142に示された3つのルート名前空間は、プレゼンテーションサブシステムの第1名前空間200(ユーザインターフェースシェルの名前空間202を含む)、ウェブサービスの第2名前空間204、およびファイルシステムの第3名前空間206である。各グループに名前を割り当てることができる。たとえば、プレゼンテーションサブシステム名前空間200に、名前「Windows」を割り当てることができ、ファイルシステム名前空間206の型に、名前「Storage」を割り当てることができる。名前付きグループを、System名前空間全体などのシステムレベルAPIの単一の「グローバルルート」名前空間の下で編成することができる。トップレベル識別子を選択し、プレフィックシングすることによって、各グループの型を、型を含むグループの名前の前に置かれた選択されたトップレベル識別子を含む階層名によって簡単に参照することができる。たとえば、ファイルシステム名前空間206の型を、階層名「System.Storage」を使用して参照することができる。このようにして、個々の名前空間200、204、および206が、System名前空間からの主要な分岐になり、および個々の名前空間が「System.」プレフィックスなどの指示子(designator)を前に付けられる指定を伝える。
【0035】
プレゼンテーションサブシステム名前空間200は、プログラミングおよびコンテンツ開発に関する。この名前空間は、アプリケーション、文書、媒体プレゼンテーション、および他のコンテンツの生成を可能にする型を供給する。たとえば、プレゼンテーションサブシステム名前空間200は、開発者がオペレーティングシステム146(1)および/またはオブジェクトモデルサービス146(2)からサービスを得られるようにするプログラミングモデルを提供する。
【0036】
シェル名前空間202は、ユーザインターフェース機能性に関する。この名前空間は、開発者が自分のアプリケーションにユーザインターフェース機能性を埋め込めるようにし、さらに、開発者がユーザインターフェース機能性を拡張できるようにする型を供給する。
【0037】
ウェブサービス名前空間204は、たとえば、イントラネット上の2つのピアの間で動作するチャットアプリケーションのように単純なアプリケーションおよび/または数百万のユーザに関するスケーラブルウェブサービスなどの複雑なアプリケーションなど、さまざまなウェブアプリケーションの作成を可能にするインフラストラクチャに関する。本明細書で説明するインフラストラクチャは、有利なことに、特定のソリューションの複雑さに適当なパーツだけを使用する必要があるという点で、非常に可変である。このインフラストラクチャは、さまざまなスケールおよび複雑さのメッセージベースアプリケーションを構築する基礎を提供する。このインフラストラクチャまたはフレームワークは、基本的メッセージング、セキュアメッセージング、信頼されるメッセージング、およびトランザクション処理されるメッセージングのAPIを提供する。下で説明する実施形態では、関連するAPIが、有用性、使い易さ、拡張性、およびバージョナビリティ(versionability)のバランスをとるように注意深く作成された形で名前空間の階層に分解される。
【0038】
ファイルシステム名前空間206は、ストレージに関する。この名前空間は、情報の保管および検索を可能にする型を供給する。
【0039】
フレームワーク132のほかに、プログラミングツール220が、開発者がウェブサービスおよび/またはアプリケーションを構築するのを支援するために設けられている。プログラミングツール220の1つの例が、Microsoft社によって提供されるプログラミングツールのマルチ言語スイートであるVisual Studio(商標)である。
【0040】
(ルートAPI名前空間)
図3に、プレゼンテーションサブシステム200の一部を詳細に示す。一実施形態で、名前空間が、名前のストリングがピリオドによって連結される階層命名規約に従って識別される。たとえば、プレゼンテーションサブシステム200は、ルート名「System.Windows」によって識別される。「System.Windows」名前空間内に、「System.Windows.Controls」として識別される、さまざまなコントロールの別の名前空間があり、この名前空間は、さらに、「System.Windows.Controls.Primitives」と称する、プリミティブ(図示せず)のもう1つの名前空間を識別する。この命名規約を念頭において、以下では、API142の選択された名前空間の一般的な概要を示すが、他の命名規約を使用して同等の効果を得ることができる。
【0041】
図3からわかるように、プレゼンテーションサブシステム200に、複数の名前空間が含まれる。図3に示された名前空間は、プレゼンテーションサブシステム200の特定の実施形態を表す。プレゼンテーションサブシステム200の他の実施形態に、1つまたは複数の追加の名前空間を含めることができ、あるいは、図3に示された名前空間の1つまたは複数を省略することができる。
【0042】
プレゼンテーションサブシステム200は、API142のプレゼンテーション機能性の多くのルート名前空間である。Controls名前空間310に、ユーザインターフェースなどの情報のディスプレイを構築するのに使用されるコントロールと、ユーザがアプリケーションと対話できるようにするクラスが含まれる。コントロールの例に、ディスプレイ上のボタンを作成する「Button」、ディスプレイ上のラジオスタイルのボタンを生成する「RadioButton」、ディスプレイ上のメニューを作成する「Menu」、ディスプレイ上のツールバーを作成する「ToolBar」、ディスプレイ上のイメージを作成する「Image」、および情報の階層ビューを作成する「TreeView」が含まれる。
【0043】
ある種のコントロールは、複数の要素をネストし、配置することによって作成される。 これらのコントロールは、コントロールの作成に使用される要素を隠蔽する論理モデルを有し、これによって、プログラミングモデルが単純になる。コントロールに、開発者またはユーザがスタイルおよびテーマを与えることができる(たとえば、ユーザインターフェースボタンの外見および挙動をカスタマイズすることによって)。一部のコントロールは、個人が個々のコントロールのスタイルを調整できるようにするアドレス可能コンポーネントを有する。さらに、コントロールを、アプリケーション設計者およびコンポーネント開発者がサブクラス化し、拡張することができる。コントロールは、ベクトルグラフィックスを使用してレンダリングされ、特定のインターフェースまたは他のディスプレイの要件に合うようにサイズを変更することができる。コントロールは、たとえばユーザインターフェースの対話フィールを強化し、アクションおよびリアクションを示すためにアニメーションを使用することができる。
【0044】
Controls名前空間310に、1つまたは複数のパネルが含まれ、このパネルは、その子(たとえばネストされた要素)を測定し、配置するコントロールである。たとえば、「DockPanel」パネルでは、各子をディスプレイの上辺、左辺、下辺、または右辺にドッキングすることによって子を配置し、残りのスペースに他のデータを充てんする。特定のパネルが、ディスプレイ最上部のメニューおよびツールバー、ディスプレイ最下部のステータスバー、ディスプレイの左辺のフォルダリストにドッキングし、残りのスペースにメッセージのリストを充てんすることができる。
【0045】
上述のように、System.Windows.Controls.Primitivesは、通常はSystem.Windows.Controls名前空間内のコントロールの開発者および彼ら自身のコントロールを作成する開発者によって使用されるコンポーネントである複数のコントロールを含む名前空間である。これらのコントロールの例に、「ThumbおよびRepeatButton」が含まれる。別のコンポーネントである「ScrollBar」は、4つのリピートボタン(「ラインアップ」の1つ、「ラインダウン」の1つ、「ページアップ」の1つ、および「ページダウン」の1つ)および現在のビューを文書内の別のロケーションにドラッグする「Thumb」によって作成される。別の例では、「ScrollViewer」は、スクロール可能領域を提供するために2つの「ScrollBars」および1つの「ScrollArea」を使用して作成されるコントロールである。
【0046】
下のリストに、System.Windows.Controls名前空間によって公開される例のクラスが含まれる。これらのクラスを用いると、ユーザが、たとえばさまざまな入出力機能ならびに追加のディスプレイ機能を介してアプリケーションと対話できるようになる。
・AccessKey − AccessKeyは、文字をラップし、その文字をキーボードニーモニックとして示すキーボードキュー装飾を受け取ることを示す、FrameworkElement要素である。デフォルトで、キーボードキュー装飾は、下線である。
・Audio − Audio要素。
・Border − ボーダー、バックグラウンド、またはその両方を、別の要素の回りに描く。
・Button − Clickイベントに固有に反応する標準ボタンコンポーネントを表す。
・Canvas − Canvas領域に関連して座標によってユーザが子要素を明示的に位置決めできる領域を定義する。
・CheckBox − ユーザに、真/偽などのオプションを与えるためにCheckBoxを使用する。CheckBoxを用いると、ユーザが、オプションのリストから選択できるようになる。CheckBoxコントロールによって、ユーザが、オプションの組合せを選択できるようになる。
・CheckedChangedEventArgs − CheckedChangedEventArgsクラスには、CheckedChangedEventイベントに関する追加情報が含まれる。
・CheckStateChangedEventArgs − CheckStateChangedEventArgsクラスには、 CheckStateChangedEventイベントに関する追加情報が含まれる。
・ClickEventArgs − Clickイベントに関する情報を含む。
・ColumnStyle − 変更可能なColumnStyleオブジェクトを表す。
・ColumnStyles − Changeable要素のコレクションである変更可能なパターンのIListオブジェクト。
・ComboBox − ComboBoxコントロール。
・ComboBoxItem − ComboBox内部で選択可能なアイテムを実装するコントロール。
・ContactPickerDialog − ユーザが1つまたは複数の連絡先を選択できるようにする。
・ContactPropertyRequest − アプリケーションが、ContactPickerDialogを介して連絡先プロパティに関する情報を要求できるようにする。このクラスを継承することはできない。
・ContactPropertyRequestCollection - ContactPropertyRequestオブジェクトのコレクションを表す。
・ContactSelection − Microsoft(登録商標)Windows(登録商標)File System、コードネーム「WinFS」またはMicrosoft Active Directory(登録商標)からの、選択された連絡先に関する情報。
・ContactSelectionCollection − ContactSelectionオブジェクトのコレクションを表す。
・ContactTextBox − 連絡先または連絡先のプロパティの選択をサポートするエディットコントロール。
・ContactTextBoxSelectionChangedEventArgs − ContactTextBoxSelectionChangedイベントの引数。
・ContactTextBoxTextChangedEventArgs − ContactTextBoxTextChangedイベントの引数。
・ContactTextBoxTextResolvedEventArgs − TextResolvedToContactイベントの引数。
・ContentChangedEventArgs − ContentChangedEventのイベント引数。
・ContentControl − 単一の内容を有するすべてのコントロールの基本クラス。
・ContentPresenter − ContentPresenterは、コンテンツコントロールのスタイルで、コンテンツが追加されるコントロールのビジュアルツリー(chromeテンプレート)内の位置を表すのに使用される。
・ContextMenu − ユーザが呼び出す選択肢のメニューを定義するコントロール。
・ContextMenuEventArgs − ContextMenuEventに送られるデータ。
・Control −すべてのユーザ対話要素の基本クラスを表す。このクラスは、そのサブクラスのプロパティの基本的なセットを提供する。
・Decorator − ボーダーなど、単一の子要素の上または周囲にエフェクトを適用する要素の基本クラス。
・DockPanel − 互いに関して水平にまたは垂直にのいずれかで子要素を配置できる領域を定義する。
・DragDeltaEventArgs − DragDeltaEventArgsクラスには、DragDeltaEventイベントに関する追加情報が含まれる。
・FixedPanel − FixedPanelは、自動ページ付け(pagination)について固定されたページを含む固定フォーマット文書において使用されるルート要素である。FixedPanelは、一度に1ページまたはページのスクロール可能なスタックとして、自動ページ付けされたコンテンツを表示する。
・FlowPanel − FlowPanelは、単一行の長さを超えるコンテンツを、改行、ラップ、および位置合せするのに使用される。FlowPanelは、コンテナのコンテンツ、たとえばTextのフローが単一行の長さを超える可能性が高いときに使用できる、改行プロパティおよび位置合せプロパティを提供する。
・Frame − 別のマークアップツリーのコンテンツをロードできる領域。
・Generator − Generatorは、ItemsControlの代わりにUIを生成し、GeneratorFactoryの監督下で働くオブジェクトである。
・GeneratorFactory − GeneratorFactoryは、ItemsControlの代わりにUIを生成する責任を負う。GeneratorFactoryは、コントロールのItemsCollection(フラット化されたビュー)のアイテムとそれに対応するUIElementの間の関連付けを維持する。コントロールのアイテムコンテナは、ファクトリにGeneratorを要求することができ、ファクトリは、実際のUIの生成を行う。
・GridPanel − 行および列からなるグリッド領域を定義する。
・HeaderItemsControl − 複数のアイテムを含み、ヘッダを有するすべてのコントロールの基本クラス。
・HorizontalScrollBar − 水平スクロールバークラス。
・HorizontalSlider −水平スライダクラス。
・HyperLink − HyperLinkクラスでは、ナビゲーションコントロールが実装される。デフォルトプレゼンタは、TextPresenterである。
・Image − 文書またはアプリケーションにイメージを含める簡単な方法を提供する。
・IncludeContactEventArgs − ContactPickerDialog.IncludeContactイベントのハンドラに渡される引数。
・ItemCollection − コントロール内の個別のアイテムのコレクションを維持する。コレクションコンテンツの変更およびコンテンツに関するデータの入手を可能にするメソッドおよびプロパティを提供する。
・ItemsChangedEventArgs − ItemsChangedイベントは、アイテムコレクションが変更したレイアウトを知らせるためにGeneratorFactoryによって引き起こされる。
・ItemsControl − 複数の子を有するすべてのコントロールの基本クラス。
・ItemsView − ItemsViewはItemCollectionのフラット化されたビューを提供する。
・KeyboardNavigation − KeyboardNavigationクラスは、フォーカス可能コントロールの間の、論理(タブ)ナビゲーションおよび方向付き(矢印)ナビゲーションのメソッドを提供する
・ListBox − 選択可能なアイテムのリストを実装するコントロール。
・ListItem − ListBox内部の選択可能アイテムを実装するコントロール。
・Menu − ユーザが呼び出す選択肢のメニューを定義するコントロール。
・MenuItem − メニューの子アイテム。MenuItemを選択してコマンドを呼び出すことができる。MenuItemは、セパレータとすることができる。MenuItemは、サブメニューのヘッダとすることができる。MenuItemは、チェック付きまたはチェックなしにすることができる。
・PageViewer − 自動ページ付けコントロール、ツールバー、およびページバーコントロールを含む文書表示コンポジットコントロールを表す。
・PaginationCompleteEventArgs − PaginationCompleteEventのイベント引数。
・PaginationProgressEventArgs − PaginationProgressEventのイベント引数。
・Pane − 新しいウィンドウを起動せずにマークアップ言語(たとえば「XAML」)でウィンドウプロパティを定義する方法を提供する。
・Panel − すべてのPanel要素の基本クラスを提供する。Panel要素をインスタンス化するためには、派生具象クラスを使用する。
・RadioButton − RadioButtonは、2つの状態すなわち真または偽を有するオプションボタンを実装する。
・RadioButtonList − このコントロールは、RadioButtonのグループ化コントロールとして働き、RadioButtonを相互排他的に処理する部分である。RadioButtonListは、Selectorから継承する。RadioButtonListは、本質的に単一のSelectionModeセレクタであり、(Selectorからの)選択という概念は、これがグループ化するRadioButtonのCheckedプロパティをキーオフとする。
・RowStyle − 変更可能なパターンChangeable要素。
・RowStyles − Changeable要素のコレクションである変更可能なパターンのIListオブジェクト。
・ScrollChangeEventArgs − ScrollChangeEventsArgsは、スクロール状態の変更を記述する。
・ScrollViewer −
・SelectedItemsCollection − Selectorの選択されたアイテムのコンテナ。
・SelectionChangedEventArgs − 選択変更イベントハンドラへの入力。
・SimpleText − SimpleTextは、ユーザインターフェース(UI)シナリオでの使用を想定された軽量で、複数行の、単一フォーマットテキスト要素である。SimpleTextは、複数の同一のフォーマッティングプロパティをTextとして公開し、しばしば、ある多用途性を犠牲にして性能を高めるのに使用することができる。
・StyleSelector − StyleSelectorを用いると、アプリケーション作成者がカスタムスタイル選択ロジックを提供できるようになる。たとえば、ContentとしてクラスBugを用いて、Pri1バッグに特定のスタイル、Pri2バッグに異なるスタイルを使用する。アプリケーション作成者は、派生セレクタクラスでSelectStyleメソッドをオーバーライドし、このクラスのインスタンスにContentPresenterクラスのStyleSelectorプロパティを割り当てることができる。
・Text − Textの複数のフォーマットをレンダリングできるTextコントロールを表す。Textは、アプリケーションUI内で最もよく使用される。より高度なテキストシナリオは、TextPanelの追加の機能セットから利益を得る。比較的単純なテキストサポートが必要である場合のほとんどで、Textは、軽量の性質および機能の範囲のゆえに、好ましい要素である。
・TextBox − テキスト入力を受け入れる編集可能な領域を提供するコントロールを表す。
・TextChangedEventArgs − TextChangedEventArgsクラスは、TextRange.SetText()によって送出されるイベントに関連するRoutedEventArgsの型を表す。
・TextPanel − テキストをフォーマットし、サイズを変更し、描画する。TextPanelは、複数の行のテキストおよび複数のテキストフォーマットをサポートする。
・ToolTip − ユーザがコントロールの上でホバリングするときに情報を表示するコントロール。
・ToolTipEventArgs − ToolTipEvent時に送られるデータ。
・TransformDecorator − TransformDecoratorは、子を含み、指定された変換をその子に適用する。TransformDecoratorは、変換後に子がデコレータの空間にぴたりとおさまり、最大限の領域を使用するように、そのローカル(変換前)座標で子を測定し、配置するロジックを実装する。したがって、子は、それに適用される変換の知識を有する必要がない。
・UIElementCollection − UIElementCollectionは、UIElementの順序付きコレクションである。
・ValueChangedEventArgs − このValueChangedEventArgsクラスには、ValueChangedEventイベントに関する追加情報が含まれる。
・VerticalScrollBar − 垂直スクロールバークラス。
・VerticalSlider − 垂直スライダクラス。
・Video − 現在のユーザ座標系内の指定された長方形でストリーミングビデオファイルまたはストリーミングオーディオファイルを再生する。
・VisibleChangedEventArgs − VisibleChangedEventArgsクラスには、VisibleChangedEventイベントに関する追加情報が含まれる。
【0047】
System.Windows.Controls名前空間には、さまざまな列挙も含まれる。下のリストに、System.Windows.Controls名前空間に関連する列挙例が含まれる。
・CharacterCase − テキストがタイプされるときにTextBoxコントロール内の文字の大文字小文字を指定する。
・CheckState − チェックボックスなど、チェック付き、チェックなし、または中間状態とすることができるコントロールの状態を指定する。
・ClickMode − Clickイベントを発生させなければならないときを指定する。
・ContactControlPropertyPosition − 連絡先のプロパティの位置およびディスプレイを制御する。
・ContactPickerDialogLayout − ContactPickerDialogが選択されたプロパティをどのように表示すべきかを指定する。
・ContactPropertyCategory − プロパティが、ユーザが選択できる複数の値を有する場合に、どの値をデフォルトとして扱うかを指定する。たとえば、ContactPickerDialogから電話番号プロパティを要求するときに「Work」が好ましいカテゴリとして指定され、ユーザが、仕事場と家庭の両方の電話番号を有する連絡先を選択する場合に、仕事場の電話番号がデフォルト選択として示される。ユーザは、UIを使用して、その代わりに家庭の電話番号を選択することができる。
・ContactPropertyType − ContactPickerDialogがユーザに要求できる連絡先のプロパティを指定する。
・ContactType − どの連絡先型をContactPickerDialogに表示するかを指定する。
・Direction − この列挙は、ジェネレータがUIを作る方向を指定するためにGeneratorFactoryおよびGeneratorによって使用される。
・Dock − DockPanel内の子要素のDock位置を指定する。
・GeneratorStatus − この列挙は、GeneratorFactoryによって、その状況を示すのに使用される。
・KeyNavigationMode − TabNavigationプロパティの型によって、Tabナビゲーションが生じるときにコンテナがフォーカスを移動する方法が指定される。
・MenuItemBehavior − MenuItemが有することができる異なる挙動を定義する。
・MenuItemType − MenuItemsの異なる配置型を定義する。
・Orientation − スライダオリエンテーション型。
・PageViewerFit − ページをPageViewerのクライアント領域にどのように適合させるかを選択する。
・PageViewerMode − モードドロップダウンに反映される現在のPageViewerモードを選択する。
・ScrollerVisibility − ScrollerVisibiltyは、スクロールバーの可視性挙動を定義する。
・SelectionMode − ListBoxの選択挙動を指定する。
【0048】
「Position」が、System.Windows.Controls名前空間に関連する構造体の例である。Generatorのユーザは、この構造体を使用して位置を記述する。たとえば、アイテムリストの先頭から前への生成を開始するには、位置(−1、0)および方向Forwardを指定する。リストの末尾から後ろへの生成を開始するには、位置(−1、0)および方向Backwardを指定する。インデックスkの要素の後のアイテムを生成するには、位置(k、0)および方向Forwardを指定する。
【0049】
下のリストに、System.Windows.Controls名前空間に関連する例の委任が含まれる。
・CheckedChangedEventHandler − この委任は、CheckedChangedEventイベントのハンドラによって使用される。
・CheckStateChangedEventHandler − この委任は、CheckStateChangedEventイベントのハンドラによって使用される。
・ClickEventHandler − Clickイベントを処理するメソッドを表す。
・ContactTextBoxSelectionChangedEventHandler − ContactTextBoxSelectionChangedイベントの委任ハンドラ。
・ContactTextBoxTextChangedEventHandler − ContactTextBoxTextChangedイベントの委任ハンドラ。
・ContactTextBoxTextResolvedEventHandler − TextResolvedToContactイベントの委任ハンドラ。
・ContentChangedDelegate − ContentChangedEventに関する委任。
・ContextMenuEventHandler − ContextMenuEventを処理するコールバック型。
・DragDeltaEventHandler − この委任は、DragDeltaEventイベントのハンドラによって使用される。
・IncludeContactEventHandler − ContactPickerDialog.IncludeContactイベントのハンドラ。
・ItemsChangedEventHandler − ItemsChangedEventArgsを受け取るハンドラに使用される委任。
・OpenedEventHandler − ContactPickerDialog.Openedイベントのハンドラ。
・PaginationCompleteDelegate − PaginationCompleteEventに関する委任。
・PaginationProgressDelegate − PaginationProgressEventに関する委任。
・ScrollChangeEventHandler − この委任は、ScrollChangeEventイベントのハンドラによって使用される。
・SelectionChangedEventHandler − 選択変更イベントの処理に関する委任型。
・TextChangedEventHandler − TextChangedEventArgsを受け取るハンドラに使用される委任。
・ToolTipEventHandler − ToolTipEventの処理に関するコールバック型。
・ValueChangedEventHandler − この委任は、ValueChangedEventイベントのハンドラによって使用される。
・VisibleChangedEventHandler − この委任は、VisibleChangedEventイベントのハンドラによって使用される。
【0050】
もう1つの名前空間、System.Windows.Controls.Atomsは、System.Windows.Controls名前空間のサブ名前空間である。System.Windows.Controls.Atomsには、関連するコントロール、イベント引数、およびイベントハンドラが含まれる。下のリストに、System.Windows.Controls.Atoms名前空間に関連する例のクラスが含まれる。
・PageBar − スクロール可能自動ページ付けコントロールを表す。
・PageElement − 自動ページ付けされたコンテンツの特定のページをレンダリングする。レンダリングされるページは、PageSourceプロパティによって指定される。
・PageHoveredEventArgs − PageHoveredEventArgsは、マウスポインタがホバリングしている場所に関する情報を提供する。
・PageScrolledEventArgs − PageScrolledEventArgsには、PageScrolledEventに関する情報が含まれる。
・PageSelectedEventArgs − PageSelectedEventは、新しい行/列範囲選択が行われるときに発せられる。
・PageSelector − PageSelector:ページのうちで表示される行/列の範囲をユーザが選択できるようにする。
・PageSource − 自動ページ付けされるコンテンツのソースを識別する。自動ページ付けされるコンテンツをフォーマットするプロパティおよびメソッドも提供する。
【0051】
下のリストに、System.Windows.Controls.Atoms名前空間に関連する例の委任が含まれる。
・PageHoveredEventHandler − この委任は、PageHoveredEventイベントのハンドラによって使用される。
・PageScrolledEventHandler − この委任は、PageHoveredイベントのハンドラによって使用される。
・PageSelectedEventHandler − この委任は、PageSelectedEventイベントのハンドラによって使用される。
【0052】
System.Windows.Controls.Primitives名前空間は、System.Windows.Controls名前空間のもう1つのサブ名前空間である。上で述べたように、Primitivesサブ名前空間には、他のより複雑なコントロールによってプリミティブとして使用されることを意図されたコントロールが含まれる。下のリストに、System.Windows.Controls.Primitives名前空間に関連する例のクラスが含まれる。
・ButtonBase − 派生クラスにおいてオーバーライドされるときに、関連するイベントおよびプロパティを定義し、関連する入力イベントのハンドラを提供する。
・Popup − コンテンツを含むフライアウトウィンドウを作成するコントロール。
・RangeBase − 指定された範囲を有する要素の基本クラスを表す。そのような要素の例が、スクロールバーおよびプログレスバーである。このクラスは、関連するイベントおよびプロパティを定義し、そのイベントのハンドラを提供する。
・RepeatButton − RepeatButtonコントロールは、Clickイベントが発生するときの反復セマンティックスを追加する。
・ScrollArea − ScrollAreaは、スクロールに関する有効な要素である。これは、これがクリッピングするコンテンツを含み、そのコンテンツのオフセットおよび範囲を公開するプロパティを提供する。プログラムによってあるいはキーボードまたはマウスホイールを介してスクロールを駆動できるように、デフォルト入力処理も提供する。
・ScrollBar − スクロールバークラス。
・Selector − 子の間からアイテムを選択するコントロールの基本クラス。
・Slider − スライダクラス。
・Thumb − サムコントロールは、スクロールバーの基本的なドラッグ移動機能性およびウィジェットのウィンドウサイズ変更を可能にする。
【0053】
「IEnsureVisible」が、System.Windows.Controls.Primitives名前空間に関連するインターフェースの例である。IEnsureVisibleは、子ビジュアルをスクロールする/ビューに移動するためにビジュアルに対して実施される。
【0054】
下のリストに、System.Windows.Controls.Primitives名前空間に関連する例の列挙が含まれる。
・ArrowButtonStates −
・CloseModeType − さまざまなマウスイベントに対してポップアップがどのように振る舞うべきかを記述する。
・Part − Part列挙は、スクロールバーを構成するコントロールのセマンティック使用を示すのに使用される。
・PartStates − スクロールバー部品状態。
・PlacementType − ポップアップがスクリーンに置かれるべき場所を記述する。
・SizeBoxStates −
【0055】
Documents名前空間312は、リッチフォーマットであり意味論的に豊富な文書の作成に使用されるセマンティック要素およびフォーマッティング要素のコレクションである。一実施形態で、「要素」は、主に要素の階層(「ツリー」と称する)と共に使用されるクラスである。これらの要素は、対話型(たとえば、キーボード、マウス、または他の入力デバイスを介するユーザ入力を受け取る)とすることができ、イメージまたはオブジェクトをレンダリングすることができ、他の要素の配置を支援することができる。要素例に、一般的なブロックを実装する「Block」要素、テーブルの本体を含むコンテンツを表す「Body」要素、テーブル内の表データを含む「Cell」要素、テーブルのヘッダに含まれるコンテンツを表す「Header」要素、およびコンテンツを複数のページにまたがって分割するのに使用される「PageBreak」要素が含まれる。
【0056】
下のリストに、System.Windows.Documents名前空間によって公開される例のクラスが含まれる。
・AdaptiveMetricsContext − AdaptiveMetricsContextは、適応フローフォーマット(adaptive−flow−format)文書のルート要素を提供する。子パネルが、AdaptiveMetricsContext要素でカプセル化されたならば、親パネルのコンテンツは、RME(Reading Metrics Engine)によって処理される。子パネルのサイズは、任意の列の数およびサイズならびに最適のフォントサイズおよび行高さを計算するのに使用される。
・Block − デフォルトレンダリング挙動を誘導しない一般的なブロック要素を実装する。
・BlockElement − すべてのBlock要素の基本クラスを実装する。
・Body − Table要素の本体を含むコンテンツを表す。
・Bold − Inlineから導出されるBold要素を実装する。
・BreakRecord − 改ページにまたがって自動ページ付けされたコンテンツのフォーマッティングを継続するのに必要な情報を保管する。自動ページ付けサポートを提供するためには、このクラスから継承する。これは、抽象クラスである。
・Cell − Cellには、あるTable内の表データが含まれる。Cell要素は、Rowに含まれる。
・CellCollection − テーブルセルの順序付きコレクション。
・Column − Column要素は、GridPanelまたはTableのコンテンツを配分するのに使用される。
・ColumnCollection − ColumnCollectionは、Columnの順序付きコレクションである。
・ColumnResult − 列のビュー関連情報を表す。
・ContainerParagraphResult − 他のParagraphオブジェクトだけを含むParagraphオブジェクトの計算されたレイアウトパラメータへのアクセスを提供する。
・ContentPosition − 段落内のコンテンツの位置を表す。関連するコンテンツの位置を記述するには、このクラスから継承する。これは、抽象クラスである。
・Document − Documentクラスの目的は、文書のコンテンツを、それを囲むUI「chrome」から分離することである。「分離」は、そのUIについて考慮せずに(およびコミットせずに)文書を作成できることを意味する。Documentクラスは、文書コンテンツ、通常はTextPanelまたはFixedPanelと、その子を保持する。ビジュアルツリー(デフォルトでPageViewer)が、WPPコントロールスタイリング機構を介してこの要素に関連付けられる。
・DocumentPage − 自動ページ付けの対象である文書のページに関連するコントロールのレイアウト情報を表す。これらのコントロールのレイアウト情報を記述するには、このクラスから継承する。これは、抽象クラスである。
・DocumentPageParagraphResult − 自動ページ付けによって影響を受けるオブジェクトの計算されたレイアウトパラメータへのアクセスを提供する。
・FindEngine − 検索アルゴリズムの基本クラス。
・FindEngineFactory − 検索アルゴリズムファクトリ。
・FixedPage − 固定フォーマットレイアウト文書内のコンテンツの単一ページへのアクセスを提供する。
・Footer − Table要素のフッタを含むコンテンツを表す。
・Header − Table要素のヘッダを含むコンテンツを表す。
・Heading − ヘディングとしてテキストをレンダリングするブロックレベル要素を実装する。
・HyphenationDictionary − HyphenationDictionaryは、アプリケーション内のハイフネーションサポートを提供するための辞書を表す。これには、インライン辞書と外部辞書への参照との両方を含めることができる。インライン辞書は、より高い優先順位を有し、外部辞書のエントリの前に適用される。
・Hyphenator − Hyphenatorオブジェクトは、HyphenationDictionary内のハイフネーションデータへの参照を維持し、ハイフネーションも実行する。
・Inline − デフォルトレンダリング挙動を全く誘導しない一般的なInline要素を実装する。
・InlineElement − すべてのインライン要素の基本クラスとして、一般的なインライン要素を実装する。
・Italic − Inlineから導出されるItalic要素を実装する。
・LineBreak − 改行を課すマークアップ要素を表す。
・LineResult − テキストの行の計算された情報へのアクセスを提供する。
・List − List要素を実装する。Listは、中黒または番号付けなどのマーカーを用いてフォーマットされるように設計されたブロックレベル要素である。
・ListElementItem − 中黒または番号付けなどのマーカーをサポートする、ListElementItemを実装する。
・Note − HTMLのnote要素に類似する、Note要素を実装する。
・PageBreak − さまざまなページにまたがってコンテンツを分割するのに使用されるマークアップ要素を表す。
・PageDescriptor − 自動ページ付けされたレイアウトを作成するのに必要な情報を保管する、PageDescriptorを実装する。
・Paragraph − 段落のテキストをレンダリングするのに使用されるブロックレベル要素を実装する。レンダリング挙動は、HTMLのparagraph要素のレンダリング挙動に類似する。
・ParagraphResult − Paragraphオブジェクトの計算されたレイアウトパラメータへのアクセスを提供する。
・Row − GridPanel要素またはTable要素内の行を定義する。
・RowCollection − RowCollectionは、Rowの順序付きコレクションを表す。
・RowGroup − TableまたはGridPanel内の行のグループのプロパティデフォルトを指定する。
・Section − 一般的なコンテナ要素を実装する。レンダリング挙動は、HTMLのdiv要素に類似する。
・SmallCaps − インラインSmallCaps要素を実装する。SmallCapsは、タイトルなどで、強調のために文字の小さい大文字版としてレンダリングされる、印刷形態である。
・Subscript − インラインSubscript要素を表す。Subscript文字は、他の文字の真下、左下、または右下に書き込まれる。
・Superscript − インラインSuperscript要素を表す。Superscript文字は、通常は文字または数字であり、他の文字の真上、左上、または右上にレンダリングされる。
・Table − Tableは、マークアップ言語(たとえば「XAML」)を使用して表形式で複雑なデータを表示するのに使用される。
・TextArray − テキストのアクセスおよび操作に関する基本API。
・TextChangedEventArgs − TextChangedEventArgsは、TextArrayが変更されるときに送られるイベント引数を定義する。
・TextElement − TextElementは、TextTreeのTextRange機能を提供する。これは、固定されたエンドポイントを有する不変の、連続的なTextRangeである。これは、ContentElement Input、FocusおよびEventingのサポートを提供する。DependencyObjectプロパティのサポートも提供する。
・TextNavigator − これによって、テキストコンテンツを列挙することができる。移動可能なTextPositionを実装する。テキストラン(text run)によって移動するか、テキスト内の既知のロケーションで位置決めすることができる。
・TextParagraphResult − フローティングオブジェクトおよび図を含む、テキストに関する計算されたレイアウトパラメータへのアクセスを提供する。
・TextPosition − これは、TextArray内のある位置を表すオブジェクトである。テキスト内の位置を表すコンパクトなオブジェクトによって、テキストが変更されるときに位置が自動的に維持される。比較動作は、同一のTextArray(同一のContext)内の位置だけに適用可能である。TextPositionは、スタティックまたは移動可能とすることができる。IsChangeableプロパティによって、位置の種類がわかる。
・TextRange − TextRangeは、プロパティへの0個以上のサブレンジの一般的関連付けを提供する抽象クラスである。サブレンジ操作は、派生クラスで定義される。
・TextRangeMovable − TextRangeMovableは、移動可能なTextRangeの抽象クラスである。このクラスでは、TextUnitsに基づく始点および終点への移動の能力が追加される。
・TextTreeChangedEventArgs − TextChangedEventArgsでは、TextArrayが変更されるときに送られるイベント引数が定義される。
・TextTreeDumper − TreeDumperは、パッケージング問題に起因してパブリックであるツリーテストクラスである。
・TextTreeNavigator − これは、TextTree内のある移動可能位置を表すオブジェクトである。これは、TextTree内のみでの使用されるTextNavigatorの特定の実装である。
・TextTreePosition − これは、TextTree内のある不変の位置を表すオブジェクトである。これは、TextTree内でのみ使用されるTextPositionの特定の実装である。
・TextTreeRange − TextTreeのTextRange機能を提供する。これは、移動可能なエンドポイントを有する、不変の、連続的なTextRangeである。
・TextTreeRangeContentEnumerator − TextTreeRangeの真下のオブジェクト子に対する列挙子。
・TextUnit − テキストナビゲーションの拡張可能な単位。
・TextUnits − TextPositionおよびTextRangeに一般に使用されるテキスト単位。
・Typography − OpenTypeタイポグラフィプロパティの豊富なセットへのアクセスを提供する。
・UIElementParagraphResult − 完全にUIElementから構成される段落のParagraphResult。Floaters、Figures、および組み込みブロックレベルUIElementsに使用される。
・Underline − InlineElementから派生したUnderline要素を実装する。
【0057】
下のリストに、System.Windows.Documents名前空間に関連する例のインターフェースが含まれる。
・IDocumentContentHost − コンテンツホストの子が、コンテンツが変更されるときにホストに通知するようにするために、コンテンツホストでこのインターフェースを実装する。
・IDocumentFormatter − 自動ページ付けなどの文書機能のサポートを提供するには、要素においてこのインターフェースを実装する。
・ITextDocumentResult − 文書の列情報を維持するには、このインターフェースを実装する。
・ITextParagraphResult − テキスト段落に関するテキスト情報および位置情報を提供するには、このインターフェースを実装する。
【0058】
下のリストにSystem.Windows.Documents名前空間に関連する例の列挙が含まれる。
・ElementEdge − これは、TextPositionが配置されるオブジェクトのエッジを識別する。
・FindAdvancedOptions − FindAlgorithm(検索初期化)クラスおよびTextRangeMovable/TextSelection(単純化された検索実行)クラスによって使用される高度な検索オプション。
・FindOptions − TextBox.Findメソッドによって使用される単純化された検索オプション。
・LogicalDirection − LogicalDirectionは、テキスト内の移動の論理方向を定義する。これは、コンテンツがTextPositionに挿入されるときにTextPositionを移動する先を決定するのにも使用される。
・TextArrayRunType − これは、LogicalDiretionを考慮に入れて、TextPositionが配置される実行(run)を識別する。
・TextChangeOptions − CanChangeTextの可能なテキスト変更。
・TextMoveOptions − ナビゲーションを停止する条件を指定することによって、TextNavigatorの移動を制御する。
【0059】
下のリストに、System.Windows.Documents名前空間に関連する例の委任が含まれる。
・ObjectCloneDelegate − TextArrayの一部がコピーまたは移動されるときにDependencyObjectのクローンまたはコピーを提供するコールバックメソッド。
・TextChangedEventHandler − TextChangedEventHandler委任は、コンテンツがTextTreeに追加されるか除去されるたびに、TextChangedEventArgsを用いて呼び出される。
【0060】
Shapes名前空間314は、イメージおよびオブジェクトの作成に使用されるベクトルグラフィックス要素のコレクションである。ベクトルグラフィックス要素の使用によって、要素のサイズを簡単に変更して、特定のインターフェースまたはディスプレイ装置の要件に合わせることができるようになる。下のリストに、System.Windows.Shapes名前空間によって公開される例のクラスが含まれる。
・Ellipse − 楕円を描く。
・Glyphs − 「XAML」などのマークアップ言語のグリフ形状を表す。グリフは、フォントを表すのに使用される。
・Line − 2点間に直線を描く。
・Path − 一連の接続された直線および曲線を描く。
・Polygon − 多角形(閉じた形状を形成する接続された一連の線)を描く。
・Polyline − 一連の接続された直線を描く。
・Rectangle − 長方形を描く。
・Shape − 楕円、多角形、および長方形などの形状要素の基礎的機能性を提供する抽象クラス。
【0061】
System.Windows.Controls名前空間、System.Windows.Documents名前空間、およびSystem.Windows.Shapes名前空間は、アプリケーションおよび関連コンポーネントを開発する統合システムを提供する。この統合システムは、3つのすべての名前空間に共通のプログラミングモデルを提供し、これによって、アプリケーションプログラムの開発を単純にする。3つのすべての名前空間の間のこのインターオペラビリティによって、開発者が、3つの名前空間によって提供される機能のどれにでも適用される単一のプログラミングアーキテクチャを習得できるようになる。たとえば、共通のマークアップ言語が、3つの名前空間のすべてにまたがって使用される。この共通マークアップ言語は、XMLマークアップにおいて指定されるクラスおよびプロパティの、オブジェクトのインスタンス化されたツリーへのマッピングを提供する。
【0062】
さらに、一貫性のあるプログラミングモデルおよび一貫性のあるサービスが、3つの名前空間にまたがって使用される。たとえば、一貫性のあるイベントシステムが、さまざまなイベントの開始および処理に使用される。共通のプロパティシステムが、プロパティが「Controls」名前空間、「Documents」名前空間、または「Shapes」名前空間のどれに関連するかにかかわらず、さまざまなプロパティのスタイル指定、プロパティへのデータのバインディング、またはプロパティのアニメーション表示に使用される。さらに、同一の入力パラダイムおよびレイアウト処理が、3つのすべての名前空間にまたがって共通する。たとえば、System.Windows.Controls名前空間からのさまざまなコントロールを、System.Windows.Documents名前空間を使用して定義される文書のコンテンツの途中にネストすることができる。
【0063】
ソースファイルの例には、「Controls」、「Documents」、および「Shapes」を使用して宣言的に定義されるウィンドウおよびペイン(「ページ」とも称する)のセットが含まれる。対話ロジックも、ウィンドウおよびペインについて提供される。対話ロジックでは、特定のユーザアクションに応答してあるいはイベントまたはアクティビティの発生に応答して実行されるプログラムコードが識別される。対話ロジックは、たとえば、コモンランゲージランタイム(CLR)言語を使用して定義される。CLRは、プログラムコード(たとえば.NETプログラムコード)の実行を処理し、セキュリティ関連サービスおよびメモリ関連サービスなどのさまざまなサービスを提供するランタイム環境である。CLR言語の例に、C#およびVisual Basicが含まれる。ソースファイルに、C#およびVisual Basic言語ファイルなどの他の独立型のプログラミング言語ファイルも含めることができる。
【0064】
この議論では、「Controls」名前空間、「Documents」名前空間、および「Shapes」名前空間の統合に言及するが、この統合は、本明細書に記載の名前空間およびサブ名前空間のいずれか、またはすべてに適用することができる。
【0065】
Data名前空間316には、要素のプロパティをデータソース、データソースクラス、ならびにデータコレクションおよびビューのデータ固有実装に束縛するのに使用されるクラスおよびインターフェースが含まれる。これらのクラスおよびインターフェースは、データ入力の例外を処理するのにも使用され、これらのクラスおよびインターフェースを用いると、さまざまなデータソース内の情報に基づいてユーザインターフェースをランタイムに作成できるようになる。データは、テキスト形式で表示することができ、あるいは、負である場合に金額を赤で表示するなど、ディスプレイのフォーマッティングを変更するのに使用することができる。クラスの例に、ダイナミックプロパティユーザインターフェースとソースデータとの間のバインディングを管理するバインディング宣言オブジェクトを表す「Bind」クラスと、XMLコンテンツノードへのデータバインディングのデータソースとして働く「XmlDataSource」クラスが含まれる。
【0066】
media名前空間318は、さまざまな媒体クラスを提供する。アプリケーション設計者ならびにコンポーネント開発者は、このクラスを使用して、さまざまなプレゼンテーション機能性を開発することができる。media名前空間318のクラス例に、あるイメージングエフェクト(たとえば、ブラーおよびグレイスケール)を可能にする「ImageEffect」クラス、および単色、グラディエント、イメージ、ビデオ、および類似物を使用する領域の塗潰しの機構を提供する「Brush」クラスが含まれる。
【0067】
media名前空間318には、開発者がプロパティをアニメーション表示にし、アニメーションのセットをタイムラインのセットと整合させることを可能にするサービスを含むサブ名前空間System.Windows.Media.Animationが含まれる。アニメーションは、期間にわたって値を変更するオブジェクトである。アニメーションエフェクトに、ディスプレイ上のオブジェクトの移動、およびオブジェクトのサイズ、形状、または色の変更が含まれる。複数のアニメーションクラスが、さまざまなアニメーションエフェクトを実装するために提供される。エフェクトは、アニメーションを要素のプロパティ値に関連付けることによって達成される。たとえば、ビューにフェードインし、およびフェードアウトする長方形を作成するために、1つまたは複数のアニメーションが、長方形の不透明度プロパティに関連付けられる。
【0068】
Media名前空間318には、さまざまなテキストサービスを提供するサブ名前空間System.Windows.Media.TextFormattingも含まれる。たとえば、「TextFormatter」テキストエンジンは、テキスト行を改行し、ディスプレイに提示されるテキストをフォーマットするサービスを提供する。「TextFormatter」は、異なるテキスト文字フォーマットおよび段落スタイルを処理でき、国際テキストレイアウトを処理することができる。
【0069】
design名前空間320は、フォームおよびテキストの編集、データのフォーマット、およびクロスプロセスデータ共有を可能にするクラスを提供する。これらのクラスは、文書、アプリケーション、および他のコンテンツの編集に関する拡張可能なフレームワークを提供する。
【0070】
input名前空間322には、システムによって受け取られる入力を調整する入力マネージャが含まれる。input名前空間322には、キーボードまたはマウスなどの異なる入力デバイスを管理し、その制御を提供するのを助けるクラスも含まれる。
【0071】
navigation名前空間324は、ブラウザアプリケーションなど、ナビゲーションパラダイムを有するアプリケーションの作成を可能にするクラスおよびサービスのセットを提供する。これらのクラスおよびサービスによって、カスタマイズされたナビゲーション経験を有するアプリケーションの開発が可能になる。たとえば、オンライン商人から製品またはサービスを購入するときに、「戻る」ボタンをクリックすると、アプリケーションが異なるページを表示するようになり、そのページで、ユーザに、注文を取り消すか変更することを望むかどうかを尋ねる。別の例では、「更新」ボタンによって、アプリケーションが、まずアプリケーションを再ロードした後に新しいデータを検索するのではなく、新しいデータを検索するようになる。Navigation名前空間324には、ユーザに提示される質問の階層を生成する機構を提供するページ機能も含まれる。
【0072】
automation名前空間326は、アクセシビリティおよびユーザインターフェースオートメーションをサポートするクラスのセットを提供する。
【0073】
serialization名前空間328は、XMLファイルまたは2進表現を有するファイルから、またはこれらにオブジェクトの階層(たとえば要素)をロードまたは保管できるパーサを提供する。このプロセスでは、オブジェクトに関連するプロパティも設定され、イベントハンドラに関連付けられる。
【0074】
interop名前空間330は、他のオペレーティングシステムまたはコンピューティングプラットフォームとのインターオペラティブを可能にするクラスのセットを提供する。
【0075】
forms.Interop名前空間332は、アプリケーションがフォーム制御動作をホスティングできるようにする要素を提供する。
【0076】
別の名前空間System.IO.CompoundFile(図3に図示せず)は、さまざまな文書配布可能ファイルが保管される複合ファイルを使用するサービスを提供する。これらのサービスを用いると、内容の暗号化および圧縮が可能になる。これらのサービスは、リフロー可能な文書および固定フォーマット文書など、同一の内容の複数の翻訳のストレージもサポートする。
【0077】
(例示的なコンピューティングシステムおよび環境)
図4に、プログラミングフレームワーク132を(完全にまたは部分的にのいずれかで)実施できる、適するコンピューティング環境400の例を示す。コンピューティング環境400は、本明細書に記載のコンピュータアーキテクチャおよびネットワークアーキテクチャで使用することができる。
【0078】
例示的なコンピューティング環境400は、コンピューティング環境の一例にすぎず、コンピュータおよびネットワークアーキテクチャの使用の範囲または機能性に関する制限を示唆することを意図されたものではない。また、コンピューティング環境400を、例示的なコンピューティング環境400に示された、構成要素のいずれかまたはその組合せに関する依存性または要件を有するものと解釈してもならない。
【0079】
フレームワーク132を、多数の他の汎用または専用コンピューティングシステム環境または構成と共に実施することができる。使用に適する可能性がある衆知のコンピューティングシステム、コンピューティング環境、および/または構成の例に、パーソナルコンピュータ、サーバコンピュータ、マルチプロセッサシステム、マイクロプロセッサベースのシステム、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたは装置のいずれかを含む分散コンピューティング環境などが含まれるが、これに制限されない。このフレームワークのコンパクト版またはサブセット版を、携帯電話、携帯情報端末、ハンドヘルドコンピュータ、または他の通信/コンピューティング装置などの限られたリソースのクライアントで実施することもできる。
【0080】
フレームワーク132を、1つまたは複数のコンピュータまたは他の装置によって実行される、プログラムモジュールなどのコンピュータ実行可能命令の全般的な文脈で説明することができる。一般に、プログラムモジュールには、特定のタスクを実行するか特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。フレームワーク132は、通信ネットワークを介してリンクされたリモート処理装置によってタスクが実行される分散コンピューティング環境で実践することもできる。分散コンピューティング環境では、プログラムモジュールを、メモリストレージ装置を含むローカルおよびリモートの両方のコンピュータストレージ媒体に配置することができる。
【0081】
コンピューティング環境400に、コンピュータ402の形の汎用コンピューティング装置が含まれる。コンピュータ402のコンポーネントには、1つまたは複数のプロセッサまたは処理装置404、システムメモリ406、および処理装置404を含むさまざまなシステムコンポーネントをシステムメモリ406に接続するシステムバス408を含めることができるが、これに制限はされない。
【0082】
システムバス408は、メモリバスまたはメモリコントローラ、周辺バス、AGP(Accelerated Graphics Port)、およびさまざまなバスアーキテクチャのいずれかを使用するプロセッサバスまたはローカルバスを含む、複数の可能なタイプのバス構造の1つまたは複数を表す。たとえば、そのようなアーキテクチャに、ISA(Industry Standard Architecture)バス、MCA(Micro Channel Architecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Association)ローカルバス、およびメザニンバスとも称するPCI(Peripheral Component Interconnects)バスを含めることができる。
【0083】
コンピュータ402に、通常は、さまざまなコンピュータ可読媒体が含まれる。そのような媒体は、揮発性媒体および不揮発性媒体、リムーバブル媒体および固定の媒体の両方を含む、コンピュータ402によってアクセス可能である任意の使用可能な媒体とすることができる。
【0084】
システムメモリ406には、ランダムアクセスメモリ(RAM)410などの揮発性メモリおよび/または読取専用メモリ(ROM)412などの不揮発性メモリの形のコンピュータ可読媒体が含まれる。起動中などにコンピュータ402内の要素の間での情報の転送を助ける基本ルーチンを含む基本入出力システム(BIOS)414が、ROM412に保管される。RAM410には、通常は、処理装置404によって即座にアクセス可能および/または処理装置404によって現在操作されているデータおよび/またはプログラムモジュールが含まれる。
【0085】
コンピュータ402に、他のリムーバブル/固定の、揮発性/不揮発性コンピュータストレージを含めることもできる。たとえば、図4に、固定の不揮発性磁気媒体(図示せず)から読み取り、これに書き込むハードディスクドライブ416、リムーバブル不揮発性磁気ディスク420(たとえば「フロッピ(登録商標)ディスク」)から読み取り、これに書き込む磁気ディスクドライブ418、およびCD−ROM、DVD−ROM、または他の光媒体などのリムーバブル不揮発性光ディスク424から読み取り、かつ/またはこれに書き込む光ディスクドライブ422が含まれる。ハードディスクドライブ416、磁気ディスクドライブ418、および光ディスクドライブ422は、それぞれ、1つまたは複数のデータメディアインターフェース423によってシステムバス408に接続される。その代わりに、ハードディスクドライブ416、磁気ディスクドライブ418、および光ディスクドライブ422を、1つまたは複数のインターフェース(図示せず)によってシステムバス408に接続することができる。
【0086】
ディスクドライブおよびそれに関連するコンピュータ可読媒体は、コンピュータ402のコンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性ストレージを提供する。この例では、ハードディスク416、リムーバブル磁気ディスク420、およびリムーバブル光ディスク424が示されているが、磁気カセットまたは他の磁気記憶装置、フラッシュメモリカード、CD−ROM、デジタル多用途ディスク(DVD)、または他の光ストレージ、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、電気的消去可能プログラマブル読取専用メモリ(EEPROM)、および類似物などのコンピュータによってアクセス可能なデータを保管できる他のタイプのコンピュータ可読媒体を使用して、例示的なコンピューティングシステムおよび環境を実施することもできることを理解されたい。
【0087】
たとえば、オペレーティングシステム426、1つまたは複数のアプリケーションプログラム428、他のプログラムモジュール430、およびプログラムデータ432を含む、任意の個数のプログラムモジュールを、ハードディスク416、磁気ディスク420、光ディスク424、ROM412、および/またはRAM410に保管することができる。オペレーティングシステム426、1つまたは複数のアプリケーションプログラム428、他のプログラムモジュール430、およびプログラムデータ432(またはその組合せ)に、プログラミングフレームワーク132の要素を含めることができる。
【0088】
ユーザは、キーボード434およびポインティング装置436(たとえば「マウス」)などの入力装置を介してコンピュータ402にコマンドおよび情報を入力することができる。他の入力装置438(具体的には図示せず)に、マイクロホン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、シリアルポート、スキャナ、および/または類似物を含めることができる。上記および他の入力装置は、システムバス408に接続された入出力インターフェース440を介して処理装置404に接続されるが、パラレルポート、ゲームポート、またはUSB(Universal Serial Bus)などの他のインターフェースおよびバス構造によって接続することができる。
【0089】
モニタ442または他のタイプの表示装置を、ビデオアダプタ444などのインターフェースを介してシステムバス408に接続することもできる。モニタ442のほかに、他の出力周辺装置に、スピーカ(図示せず)およびプリンタ446など、入出力インターフェース440を介してコンピュータ402に接続できるコンポーネントを含めることができる。
【0090】
コンピュータ402は、リモートコンピューティング装置448などの1つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク化された環境で動作することができる。たとえば、リモートコンピューティング装置448を、パーソナルコンピュータ、ポータブルコンピュータ、サーバ、ルータ、ネットワークコンピュータ、ピアデバイス、または他の一般的なネットワークノード、などとすることができる。リモートコンピューティング装置448は、コンピュータ402に関して本明細書で説明した要素および特徴の多くまたはすべてを含めることができるポータブルコンピュータとして図示されている。
【0091】
コンピュータ402とリモートコンピュータ448の間の論理接続は、ローカルエリアネットワーク(LAN)450および一般的な広域ネットワーク(WAN)452として図示されている。そのようなネットワーキング環境は、オフィス、会社規模のコンピュータネットワーク、イントラネット、およびインターネットでありふれたものである。
【0092】
LANネットワーキング環境において実施されるときに、コンピュータ402は、ネットワークインターフェースまたはネットワークアダプタ454を介してローカルネットワーク450に接続される。WANネットワーキング環境において実施されるときに、コンピュータ402に、通常は、広域ネットワーク452を介する通信を確立する、モデム456または他の手段が含まれる。モデム456は、コンピュータ402の内蔵または外付けとすることができるが、入出力インターフェース440または他の適当な機構を介してシステムバス408に接続することができる。図示のネットワーク接続が、例示的であり、コンピュータ402と448の間の通信リンクを確立する他の手段を使用できることを理解されたい。
【0093】
コンピューティング環境400と共に図示されたものなどのネットワーク化された環境において、コンピュータ402に関して示したプログラムモジュールまたはその一部を、リモートメモリ記憶装置に保管することができる。たとえば、リモートアプリケーションプログラム458が、リモートコンピュータ448の記憶装置に常駐している。例示のために、アプリケーションプログラムおよびオペレーティングシステムなどの他の実行可能なプログラムコンポーネントが、本明細書では別個のブロックに図示されているが、そのようなプログラムおよびコンポーネントが、さまざまなときにコンピューティング装置402の異なるストレージコンポーネントに常駐することができ、コンピュータのデータプロセッサによって実行されることを理解されたい。
【0094】
フレームワーク132、具体的にはAPI142またはAPI142に対して行われる呼出しの実装を、ある形のコンピュータ可読媒体を介して保管または伝送することができる。コンピュータ可読媒体は、コンピュータによってアクセスできる任意の使用可能な媒体とすることができる。制限ではなく例として、コンピュータ可読媒体に、「コンピュータストレージ媒体」および「通信媒体」を含めることができる。「コンピュータストレージ媒体」には、揮発性および不揮発性、取外し可能および取外し不能の、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報のストレージに関する方法またはテクノロジで実施される媒体が含まれる。コンピュータストレージ媒体には、RAM、ROM、EEPROM、フラッシュメモリ、または他のメモリテクノロジ、CD−ROM、デジタル多用途ディスク(DVD)、または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、または他の磁気記憶装置、あるいは、所望の情報を保管するのに使用でき、コンピュータによってアクセスできる他のすべての媒体が含まれるが、これに制限はされない。
【0095】
「通信媒体」によって、通常は、搬送波または他のトランスポート機構などの変調されたデータ信号内でコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータが実施される。通信媒体には、すべての情報配信媒体も含まれる。用語「変調されたデータ信号」は、信号内で情報をエンコードする形で、その特性の1つまたは複数を設定または変更された信号を意味する。制限ではなく例として、通信媒体に、有線ネットワークまたは直接配線接続などの有線媒体と、音響、RF、赤外線、および他の無線媒体などの無線媒体が含まれる。上記のいずれかの組合せも、コンピュータ可読媒体の範囲に含まれる。
【0096】
その代わりに、フレームワークの諸部分を、ハードウェアで、あるいはハードウェア、ソフトウェア、および/またはファームウェアの組合せで実施することができる。たとえば、1つまたは複数の特定用途向け集積回路(ASIC)またはプログラマブルロジックデバイス(PLD)を設計またはプログラムして、本フレームワークの1つまたは複数の部分を実施することができる。
【0097】
プログラミングインターフェース(または単にインターフェース)は、コードの1つまたは複数のセグメントが、コードの1つまたは複数の他のセグメントと通信するかそのセグメントによって提供される機能性にアクセスできるようにする機構、処理、プロトコルとみなすことができる。その代わりに、プログラミングインターフェースを、他のコンポーネントの1つまたは複数の機構、メソッド、関数呼出し、モジュールなどとの通信接続が可能なシステムのコンポーネントの1つまたは複数の機構、メソッド、関数呼出し、モジュール、オブジェクトなどとみなすことができる。前の文の用語「コードのセグメント」は、コードの1つまたは複数の命令または行を含むことが意図されており、これには、使用される用語、コードセグメントが別々にコンパイルされるかどうか、コードセグメントがソースコード、中間コード、またはオブジェクトコードのどれとして提供されるか、コードセグメントがランタイムシステム内またはプロセス内で使用されるかどうか、コードセグメントが同一のマシンまたは異なるマシンに配置されるか、あるいはマシンにまたがって分散されるかどうか、コードのセグメントによって表される機能性が、完全にソフトウェアで、完全にハードウェアで、あるいはハードウェアとソフトウェアの組合せのどれで実施されるかに無関係に、たとえば、コードモジュール、オブジェクト、サブルーチン、関数などが含まれる。
【0098】
概念上、プログラミングインターフェースは、一般的に、図5または図6に示されているように見ることができる。図5に、第1コードセグメントと第2コードセグメントがそれを介して通信する導管としてのインターフェースInterface1を示す。図6に、システムの第1コードセグメントおよび第2コードセグメントが媒体Mを介して通信できるようにする、インターフェースオブジェクトI1およびI2(第1および第2コードセグメントの一部とすることも、そうしないこともできる)を含むものとしてインターフェースを示す。図6に鑑みて、インターフェースオブジェクトI1およびI2を、同一のシステムの別々のインターフェースと考えることができ、オブジェクトI1およびI2と媒体Mにインターフェースが含まれると考えることもできる。図5および7に、両方向のフローおよびフローの両側のインターフェースを示したが、ある実施形態では、一方向の情報フローだけを有する(または、下で示すように情報フローなし)ことができ、あるいは、片側だけにインターフェースオブジェクトを有することができる。制限ではなく例として、アプリケーションプログラミングまたはプログラムインターフェース(API)、エントリポイント、メソッド、関数、サブルーチン、リモートプロシージャコール、およびコンポーネントオブジェクトモデル(COM)インターフェースなどの用語が、プログラミングインターフェースの定義に含まれる。
【0099】
そのようなプログラミングインターフェースの態様に、第1コードセグメントが情報(ここで、「情報」は、その最も広い意味で使用され、「情報」には、データ、コマンド、要求などが含まれる)を第2コードセグメントに送る方法と、第2コードセグメントがその情報を受け取る方法と、情報の構造、シーケンス、構文、編成、スキーマ、タイミング、および内容とを含めることができる。これに関して、基礎になるトランスポート媒体自体は、媒体が有線、無線またはその両方の組合せのどれであれ、インターフェースによって定義される形で情報がトランスポートされる限り、インターフェースの動作に重要でない可能性がある。ある状況では、情報転送が別の機構を介する(たとえば、情報が、コードセグメントの間で流れる情報と別に、バッファ、ファイルなどに置かれる)ので、従来の意味で一方向または両方向に渡されないか、あるコードセグメントが第2コードセグメントによって実行される機能性に単純にアクセスするので情報が存在しない場合がある。 これらの態様のいずれかまたはすべてが、所与の状況で、たとえば、コードセグメントが疎結合された構成または密結合された構成のどちらの一部であるかに応じて、重要になる可能性があり、したがって、このリストは、例示的であり、非限定的とみなされなければならない。
【0100】
プログラミングインターフェースのこの概念は、当業者に既知であり、本発明の前述の詳細な説明から明白である。しかし、プログラミングインターフェースを実施する他の形があり、明示的に除外されない限り、これらも、本明細書に記載の請求項に含まれることが意図されている。そのような他の形は、図5および7の極度に単純化された図よりも洗練されて見える、または複雑に見える可能性があるが、それでも、そのような他の形によって、同一の全体的な結果を達成する類似する機能が実行される。これから、プログラミングインターフェースの例示的な代替実施形態を短く説明する。
【0101】
A.因数分解
あるコードセグメントから別のコードセグメントへの通信は、通信を複数の個別の通信に分解することによって、間接的に達成することができる。これを、図7および9に概略的に示す。図からわかるように、いくつかのインターフェースを、機能性の分割可能なセットとして記述することができる。したがって、数学的に24または2×2×3×2を提供するように、図5および7のインターフェースの機能性を因数分解して、同一の結果を達成することができる。したがって、図7からわかるように、インターフェースInterface1によって提供される機能を再分割して、このインターフェースの通信を複数のインターフェース、Interface1A、Interface1B、Interface1Cなどに変換し、同一の結果を達成することができる。図8からわかるように、インターフェースI1によって提供される機能性を、複数のインターフェースI1a、I1b、I1cなどに再分割し、それと同時に同一の結果を達成することができる。同様に、第1コードセグメントから情報を受け取る第2コードセグメントのインターフェースI2を、複数のインターフェースI2a、I2b、I2cなどに因数分解することができる。因数分解するときに、第1コードセグメントに含まれるインターフェースの数が、第2コードセグメントに含まれるインターフェースの数と一致する必要はない。図7および9のどちらの場合でも、インターフェースInterface1およびI1の機能的趣旨は、それぞれ図5および7と同一のままである。インターフェースの因数分解は、関連するプロパティ、累算的プロパティ、および他の数学的プロパティに従う場合もあり、因数分解の理解が困難な場合がある。たとえば、動作の順序付けは、重要でない場合があり、その結果、あるインターフェースによって実行される機能を、別のコードまたはインターフェースによって、インターフェースに達するよりかなり前に実行することができ、あるいは、システムの別々の構成要素によって実行することができる。さらに、プログラミング技術の当業者は、同一の結果を達成する異なる関数呼出しを行うさまざまな形があることを理解することができる。
【0102】
B.再定義
いくつかの場合に、初期の結果を達成しながら、プログラミングインターフェースのある態様(たとえばパラメータ)を無視し、追加し、または再定義することが可能である場合がある。これを、図9および11に示す。たとえば、図5のインターフェースInterface1に、関数呼出しSquare(input、precision、output)すなわち、3つのパラメータinput、precision、およびoutputを含む呼出しであって、第1コードセグメントから第2コードセグメントに発行される関数呼出しが含まれると仮定する。真ん中のパラメータprecisionが、図9に示されているように、所与のシナリオで関係がない場合に、無視することができ、意味のない(この状況)パラメータと置換することができる。関係のない追加のパラメータを追加することもできる。どちらの場合でも、inputが第2コードセグメントによって二乗された後にoutputが返される限り、square(二乗)の機能性を達成することができる。precision(精度)は、コンピューティングシステムの下流または他の部分に意味のあるパラメータとすることもできるが、二乗計算の狭い目的について精度が必要でないことが理解されたならば、置換するか無視することができる。たとえば、結果に悪影響を及ぼさずに、有効な精度値を渡すのではなく、誕生日などの意味のある値を渡すことができる。同様に、図10に示されているように、インターフェースI1が、インターフェースへのパラメータを無視するか追加するために再定義されたインターフェースI1’に置換される。インターフェースI2は、同様に、不要なパラメータを無視するか、ほかで処理できるパラメータについて再定義されたインターフェースI2’として再定義することができる。ここでのポイントは、いくつかの場合に、プログラミングインターフェースに、パラメータなど、ある目的に不要な態様が含まれる場合があり、したがって、それらを無視するか再定義することができ、あるいは、他の目的のために他の形で処理できるということである。
【0103】
C.インラインコーディング
2つの別々のコードモジュールの機能性の一部またはすべてをマージし、これらの間の「インターフェース」の形を変えることが実行可能である場合もある。たとえば、図5および7の機能性を、それぞれ図11および13の機能性に変換することができる。図11では、図5の前の第1コードセグメントおよび第2コードセグメントが、その両方を含む1つのモジュールにマージされている。この場合に、コードセグメントは、まだ互いに通信することができるが、インターフェースは、単一モジュールにより適する形に適合させることができる。したがって、たとえば、前のCallステートメントおよびReturnステートメントは、もはや不要とすることができるが、インターフェースInterface1に準ずる類似する処理または応答を、まだ有効とすることができる。同様に、図12では、図6のインターフェースI2の一部(またはすべて)を、インターフェースI1にインラインで記述して、インターフェースI1”を形成することができる。図からわかるように、インターフェースI2は、I2aおよびI2bに分割され、インターフェース部分I2aは、インターフェースI1とインラインにコーディングされて、インターフェースI1”を形成する。具体的な例として、図6のインターフェースI1が、関数呼出しsquare(input、output)を実行し、これがインターフェースI2によって受け取られ、インターフェースI2は、第2コードセグメントによるinputを用いて渡された値の処理(二乗)の後に、二乗された結果にoutputを用いて返すことを検討されたい。その場合に、第2コードセグメントによって実行される処理(inputの二乗)を、インターフェースへの呼出しなしで、第1コードセグメントによって実行することができる。
【0104】
D.分離(divorce)
あるコードセグメントから別のコードセグメントへの通信は、通信を複数の個別の通信に分解することによって、間接的に達成することができる。これを、図13および15に示す。図13からわかるように、1または複数のミドルウェア(機能性および/またはインターフェース機能を元のインターフェースから分離するので、分離インターフェース)を設けて、第1インターフェースInterface1の通信を、異なるインターフェース、この例ではインターフェースInterface2A、Interface2B、およびInterface2Cに従うように変換する。たとえば、これは、たとえばInterface1プロトコルに従ってオペレーティングシステムと通信するように設計されたアプリケーションのインストールベースがあるが、そのオペレーティングシステムが、異なるインターフェース、この例ではインターフェースInterface2A、Interface2B、およびInterface2Cを使用するように変更される場合に行うことができる。ポイントは、第2コードセグメントによって使用された元のインターフェースが、もはや第1コードセグメントによって使用されるインターフェースと互換でなくなるように変更され、したがって、古いインターフェースと新しいインターフェースとに互換性を持たせるため、仲介物が使用されることである。同様に、図14からわかるように、インターフェースI1からの通信を受け取る分離インターフェースDI1を有し、インターフェース機能性を、たとえば、DI2と共に働くが同一の機能的結果を提供するように再設計されているインターフェースI2aおよびI2bに送る、分離インターフェースDI2を有する第3コードセグメントを導入することができる。同様に、DI1およびDI2は、同一のまたは類似する機能的結果を提供しながら、図6のインターフェースI1およびI2の機能性を変換するように一緒に働くことができる。
【0105】
E.再記述
もう1つの可能な変形形態が、コードを動的に再記述して、インターフェース機能性を、同一の総合的な結果を達成する別のものに置換することである。たとえば、中間言語(たとえば、Microsoft(登録商標) IL、Java(登録商標) ByteCodeなど)で提示されるコードセグメントを、実行環境(.NET framework(登録商標)、Java(登録商標)ランタイム環境、または類似するランタイムタイプ環境によって提供されるものなど)内のジャストインタイム(JIT)コンパイラまたはインタープリタに供給するシステムがある。JITコンパイラは、第1コードセグメントから第2コードセグメントへの通信を動的に変換する、すなわち、それらを、第2コードセグメント(元のまたは異なる第2コードセグメント)が必要とする可能性がある異なるインターフェースに合わせることができる。これを、図15および17に示す。図15からわかるように、この手法は、上で説明した分離シナリオに似ている。これは、たとえば、アプリケーションのインストールベースが、Interface1プロトコルに従ってオペレーティングシステムと通信するように設計されているが、オペレーティングシステムが、異なるインターフェースを使用するように変更される場合に行うことができる。 JITコンパイラを使用して、通信を、オンザフライでインストールベースアプリケーションからオペレーティングシステムの新しいインターフェースに合わせることができる。 図16からわかるように、インターフェースを動的に再記述するこの手法は、動的因数分解、または他の形のインターフェースの変更にも適用することができる。
【0106】
代替実施形態を介してインターフェースとして同一のまたは類似する結果を達成する、上で説明したシナリオを、さまざまな形で、順次および/または並列で、または他の介在コードと共に、組みわせることもできることにも留意されたい。したがって、上で提示した代替実施形態は、相互に排他的ではなく、混合され、マッチングされ、かつ組み合わされて、図5および7で提示された一般的なシナリオと同一のまたは同等のシナリオを作ることができる。また、ほとんどのプログラミング構造と同様に、本明細書に記載されていないが、それでも本発明の趣旨および範囲によって表されるインターフェースの同一のまたは類似する機能性を達成する他の類似する形があることに留意されたい、すなわち、インターフェースの価値の基礎になるのは、少なくとも部分的に、インターフェースによって表される機能性と、インターフェースによって使用可能にされる有益な結果である。
【0107】
(結論)
本発明を、構造的特徴および/または方法論的動作に固有の言葉で説明したが、請求項で定義される本発明は、説明した特定の特徴または動作に必ずしも制限されないことを理解されたい。そうではなく、特定の特徴および動作は、請求される発明を実施する例示的な形として開示されたものである。
【符号の説明】
【0108】
100 ネットワーク環境
104 ネットワーク
106,112,114,122〜129 通信リンク
132 プログラミングフレームワーク
142 APIレイヤ
372 名前空間
400 コンピューティング環境
416 ハードディスクドライブ
418 磁気ディスクドライブ
422 光ディスクドライブ
420 リムーバブル不揮発性磁気ディスク
424 リムーバブル不揮発性光ディスク
438 入力装置
【技術分野】
【0001】
本発明は、ソフトウェアおよびそのようなソフトウェアの開発に関する。より詳細には、アプリケーションプログラムおよびコンピュータハードウェアによる、ソフトウェアプラットフォームの使用を容易にするプログラミングインターフェースに関する。
【背景技術】
【0002】
非常に早くから、コンピュータソフトウェアは、「オペレーティングシステム」ソフトウェアまたは「アプリケーション」ソフトウェアとして分類されるようになった。おおまかにいって、アプリケーションは、数学の方程式を解くか、またはワードプロセッシングをサポートするなど、コンピュータユーザのために特定のタスクを実行することを意図されたソフトウェアである。オペレーティングシステムは、コンピュータハードウェアを管理し、制御するソフトウェアである。オペレーティングシステムの目標は、コンピュータリソースをアプリケーションプログラマが使用可能にすると同時に、ハードウェアを実際に制御するのに必要な複雑さを隠蔽することである。
【0003】
オペレーティングシステムは、アプリケーションプログラムインターフェースまたはAPIとして周知の機能または関数を介してリソースを使用可能にする。用語APIは、これらの機能のうちの単一の関数を指すのにも使用される。関数は、多くの場合、アプリケーションプログラマに提供するリソースまたはサービスに関してグループ化される。アプリケーションソフトウェアは、個々のAPI関数を呼び出すことによってリソースを要求する。API関数は、オペレーティングシステムによって提供されるメッセージおよび情報をアプリケーションソフトウェアに中継する手段としても働く。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許出願第09/598,105号明細書
【特許文献2】米国特許出願第09/613,289号明細書
【非特許文献】
【0005】
【非特許文献1】[online]、ECMA、〈URL:www.ecma.ch〉
【発明の概要】
【発明が解決しようとする課題】
【0006】
ハードウェアの変更のほかに、オペレーティングシステムソフトウェアの進化を駆り立てるもう1つの要因が、アプリケーションソフトウェア開発を単純化し、加速する要望である。アプリケーションソフトウェア開発は、困難な作業になる場合があり、時折、数百万行のコードによって高度化されたプログラムを作成するために数年の開発者の時間を必要とする。Microsoft Windows(登録商標)オペレーティングシステムのさまざまなバージョンなどの広く使用されているオペレーティングシステムに関して、アプリケーションソフトウェア開発者は、そのオペレーティングシステムを利用する数千本の異なるアプリケーションを毎年記述している。そのように多くの異なるアプリケーション開発者をサポートするために、一貫性のある(coherent)、利便性の高いオペレーティングシステムベースが必要である。
【0007】
多くの場合、オペレーティングシステムをより複雑にすることによって、アプリケーションソフトウェアの開発を単純にすることができる。すなわち、ある機能が、複数の異なるアプリケーションプログラムに有用であり得る場合に、その機能をオペレーティングシステムに含めるために一度記述することが、数十人のソフトウェア開発者が数十本の異なるアプリケーションに含めるために数十回記述することを要求するよりよい場合がある。 このように、オペレーティングシステムが、複数のアプリケーションによって要求される広範囲の共通の機能性をサポートする場合、アプリケーションソフトウェア開発のコストおよび時間においてかなりの節約を達成することができる。
【0008】
オペレーティングシステムとアプリケーションソフトウェアの間のどこに線が引かれるかに関係なく、有用なオペレーティングシステムについて、オペレーティングシステムおよびコンピュータハードウェアとアプリケーションソフトウェアとの間のAPIは、オペレーティングシステム自体の効率的な内部動作と同様に重要であることは明白である。
【0009】
アプリケーションを開発するときに、開発者は、さまざまなツールを使用して、グラフィカルアイテムおよび他の内容を生成する。表示されるか、またはレンダリングされるグラフィカルアイテムおよび他のデータを配置するために、追加ツールは使用可能である。 これらのツールは、通常は、異なるエンティティまたは異なるツール開発者によって作成される。その結果、これらのツールは、一貫性のあるプログラミング環境を提供しない。したがって、これらの異なるツールを使用する開発者は、ツールそれぞれの使用方法を習得し、それらに互いに通信させることを試みる必要がある。これらのアクティビティは、面倒で時間がかかる可能性があり、間近の実際の開発タスクから時間を奪う。
【0010】
過去数年間に、インターネットおよびネットワーク技術全般の万国での採用によって、コンピュータソフトウェア開発者の風景が変化した。従来、ソフトウェア開発者は、独立型デスクトップコンピュータまたはローカルエリアネットワーク(LAN)を介して限られた数の他のコンピュータに接続されたLANベースコンピュータの単一サイトソフトウェアアプリケーションに焦点を合わせていた。ソフトウェアが、シュリンクラップパッケージでマーケティングされ、販売されたので、そのようなソフトウェアアプリケーションを、通常は、「シュリンクラップ」製品と称する。これらのアプリケーションは、明確に定義されたAPIを使用して、コンピュータの基礎になるオペレーティングシステムにアクセスした。
【0011】
インターネットが進化し、広く受け入れられたので、産業界は、ワールドワイドウェブ(または単に「ウェブ」)のさまざまなサイトでのアプリケーションのホスティングの威力を理解し始めた。ネットワーク化された世界では、あらゆる場所のクライアントが、個別の位置でホスティングされるサーバベースのアプリケーションに要求をサブミットし、ほんの一瞬で応答を受信することができる。しかし、これらのウェブアプリケーションは、通常は、元々は独立型コンピューティングマシンまたはローカルにネットワーク化されたコンピュータのために開発されたものと同一のオペレーティングシステムプラットフォームを使用して開発された。残念ながら、いくつかの場合に、これらのアプリケーションは、分散コンピューティング管理様式に適切に振り替えられない。基礎になるプラットフォームは、単純に、無制限の数の相互接続されたコンピュータをサポートするという観念を用いて構成されていなかった。
【0012】
インターネットによって導入された分散コンピューティング環境へのシフトに対処するために、Microsoft Corporation社は、「.NET」Framework(「ドットネット」と読む)と称するネットワークソフトウェアプラットフォームを開発した。Microsoft(登録商標).NETは、人、情報、システム、および装置を接続するソフトウェアである。このプラットフォームを用いると、開発者が、インターネットを介して実行されるウェブサービスを作成できるようになる。この動的なシフトは、Microsoftの.NET(登録商標)FrameworkのAPI関数のセットによって達成された。
【0013】
.NET(登録商標)Frameworkの使用がますます一般的になるにつれて、このプラットフォームの効率および/または性能を高める形が識別された。本発明者は、そのような高められた効率および/または性能を可能にするAPI関数の独自のセットを開発した。
【課題を解決するための手段】
【0014】
APIなどのプログラミングインターフェースが、アプリケーション、文書、媒体プレゼンテーション、および他の内容を生成する機能を提供する。これらの機能を用いると、開発者が、オペレーティングシステム、オブジェクトモデルサービス、あるいは他のシステムまたはサービスからサービスを得られるようになる。一実施形態では、これらの機能を用いると、開発者が、グラフィカルユーザインターフェースを生成できるようになる。
【0015】
同一の符号は、複数の図面を通じて同一の特徴を指すのに使用される。
【図面の簡単な説明】
【0016】
【図1】クライアントが、従来のプロトコルを使用する、インターネットを介してウェブサービスにアクセスするネットワークアーキテクチャを示す図である。
【図2】アプリケーションプログラムインターフェース(API)を含むネットワークプラットフォームのソフトウェアアーキテクチャを示すブロック図である。
【図3】APIによってサポートされるプレゼンテーションサブシステムならびにさまざまなAPI関数の機能クラスを示すブロック図である。
【図4】ソフトウェアアーキテクチャのすべてまたは一部を実行することができる例示的コンピュータを示すブロック図である。
【図5】プログラミングインターフェースの例の実施形態を示す図である。
【図6】プログラミングインターフェースの例の実施形態を示す図である。
【図7】プログラミングインターフェースの例の実施形態を示す図である。
【図8】プログラミングインターフェースの例の実施形態を示す図である。
【図9】プログラミングインターフェースの例の実施形態を示す図である。
【図10】プログラミングインターフェースの例の実施形態を示す図である。
【図11】プログラミングインターフェースの例の実施形態を示す図である。
【図12】プログラミングインターフェースの例の実施形態を示す図である。
【図13】プログラミングインターフェースの例の実施形態を示す図である。
【図14】プログラミングインターフェースの例の実施形態を示す図である。
【図15】プログラミングインターフェースの例の実施形態を示す図である。
【図16】プログラミングインターフェースの例の実施形態を示す図である。
【発明を実施するための形態】
【0017】
この開示は、開発者がウェブアプリケーションおよびウェブサービスを構築できるネットワークプラットフォームのアプリケーションプログラムインターフェース(API)を扱う。より詳細には、Microsoft Corporationによって作成された.NET(登録商標)Frameworkなどのネットワークプラットフォームを利用するオペレーティングシステムの例示的なAPIを説明する。.NET(登録商標)Frameworkは、分散コンピューティング環境で実施されるウェブサービスおよびウェブアプリケーションのソフトウェアプラットフォームである。.NET(登録商標)Frameworkは、特定のタスクを実行するために協力している疎結合ウェブサービスの間の通信にオープン通信標準規格を使用する、次世代のインターネットコンピューティングを表す。
【0018】
説明する実施形態で、ネットワークプラットフォームは、XML(extensible markup language)すなわちデータを記述するオープン標準規格を使用する。XMLは、World Wide Web Consortium(W3C)によって管理される。XMLは、ウェブページおよび企業間文書のデータ要素を定義するのに使用される。XMLでは、HTMLに類似するタグ構造が使用されるが、HTMLは、要素をどのように表示するかを定義し、XMLは、それらの要素に何が含まれるかを定義する。HTMLでは、事前定義のタグを使用するが、XMLでは、ページの開発者がタグを定義することができる。したがって、事実上すべてのデータアイテムを識別することができ、ウェブページが、データベースレコードのように機能することができる。XMLおよびシンプルオブジェクトアクセスプロトコル(SOAP)などの他のオープンプロトコルの使用を介して、ネットワークプラットフォームが、ユーザの必要に合わせて調整できる広範囲のサービスの統合を可能にする。本明細書に記載の実施形態を、XMLおよび他のオープン標準規格とともに説明するが、これは、請求される発明の動作に必要ではない。他の同等に実行可能な技術が、本明細書に記載の発明を実施するのに十分である。
【0019】
本明細書で使用される句、アプリケーションプログラムインターフェースまたはAPIには、メソッド呼出しまたは関数呼出しを使用する従来のインターフェースならびに、リモート呼出し(たとえばプロキシ、スタブ関係)およびSOAP/XML呼出しが含まれる。
【0020】
下の名前空間の説明の一部で、あるクラス、インターフェース、列挙、および委任の説明が空白にされていることを諒解されたい。これらのクラス、インターフェース、列挙、および委任のより完全な説明は、上のSDK参考文献が保管されるコンパクトディスクの主題の中で見つけることができる。
【0021】
(例示的ネットワーク環境)
図1に、.NET(商標)Frameworkなどのネットワークプラットフォームを実装できるネットワーク環境100を示す。ネットワーク環境100には、ネットワーク104(たとえばインターネット)上でアクセスできるサービスを提供する、代表的なウェブサーバ102(1)、…、102(N)が含まれる。一般に符号102として参照されるウェブサービスは、リモートプロシージャコール(RPC)またはオブジェクトブローカ型技術などの、ネットワークを介してウェブサービスと相互作用する他の手段も使用することができるが、通常は、XML、SOAP、WAP(wireless application protocol)、HTTP(ハイパーテキスト転送プロトコル)、およびSMTP(シンプルメール転送プロトコル)などの産業界標準ウェブプロトコルを介してネットワーク104上でプログラム的に相互作用する、再利用可能なプログラマブルアプリケーションコンポーネントである。ウェブサービスは、自己記述的とすることができ、しばしば、メッセージのフォーマットおよび順序に関して定義される。
【0022】
ウェブサービス102は、他のサービス(通信リンク106によって表されるように)、またはウェブアプリケーション110などのソフトウェアアプリケーション(通信リンク112および114によって表されるように)によって直接にアクセス可能である。各ウェブサービス102は、特定のサービスに関する要求を処理するソフトウェアを実行する1つまたは複数のサーバを含むものとして示されている。そのようなサービスは、しばしば、要求元にサービスされる情報を保管するデータベースを維持する。ウェブサービスを構成して、さまざまな異なるサービスの任意の1つを実行することができる。ウェブサービスの例に、ログイン検証、通知、データベース保管、株式市況、ディレクトリの突き止め、地図作成、音楽、電子ウォレット、カレンダ/スケジューラ、電話リスティング、ニュースおよび情報、ゲーム、発券業務などが含まれる。ウェブサービスを、互いにおよび他のアプリケーションと組み合わせて、インテリジェント対話経験を構築することができる。
【0023】
ネットワーク環境100には、ウェブサービス102(通信リンク122によって表される)および/またはウェブアプリケーション110(通信リンク124、126、および128によって表される)を使用する代表的なクライアント装置120(1)、120(2)、120(3)、120(4)、…、120(M)も含まれる。クライアントは、クライアント120(3)と120(4)の間の例示的なXMLリンク129によって表されるように、標準プロトコルを使用して互いに通信することもできる。
【0024】
全般的に符号120として参照されるクライアント装置は、多数の異なる形で実施することができる。可能なクライアント実施形態の例に、制限なしに、ポータブルコンピュータ、ステーショナリコンピュータ、タブレットPC、テレビジョン/セットトップボックス、無線通信装置、携帯情報端末、ゲーム機、プリンタ、コピー機、および他のスマート装置が含まれる。
【0025】
ウェブアプリケーション110は、ネットワークプラットフォームで動作するように設計されたアプリケーションであり、クライアント120からの要求を処理し、サービスするときに、ウェブサービス102を使用することができる。ウェブアプリケーション110は、プログラミングフレームワーク132上で稼動する1つまたは複数のソフトウェアアプリケーション130からなり、ソフトウェアアプリケーション130は、1つまたは複数のサーバ134または他のコンピュータシステムで実行されている。ウェブアプリケーション110の一部が、実際には1つまたは複数のクライアント120に常駐する場合があることに留意されたい。その代わりに、ウェブアプリケーション110が、実際にタスクを達成するクライアント120上の他のソフトウェアを調整することができる。
【0026】
プログラミングフレームワーク132は、アプリケーション開発者によって開発されるアプリケーションおよびサービスをサポートする構造である。プログラミングフレームワーク132は、複数の言語をサポートすることによって、マルチ言語開発およびシームレス統合を可能にする。プログラミングフレームワーク132は、SOAPなどのオープンプロトコルをサポートし、基礎になるオペレーティングシステムサービスおよびオブジェクトモデルサービスをカプセル化する。このフレームワークは、複数のプログラミング言語の堅牢で保護された実行環境を提供し、保護され、統合されたクラスライブラリを提供する。
【0027】
フレームワーク132は、アプリケーションプログラムインターフェース(API)レイヤ142、共通言語ランタイム(CLR)レイヤ144、およびオペレーティングシステム/サービスレイヤ146を含むマルチティアアーキテクチャである。この階層アーキテクチャを用いると、フレームワークの他の部分に影響せずに、さまざまなレイヤに対する更新および修正が可能になる。共通言語仕様(CLS)140を用いると、さまざまな言語の設計者が、基礎になるライブラリ機能性にアクセスできるコードを記述できるようになる。共通言語仕様140は、言語設計者とライブラリ設計者の間の、言語インターオペラビリティを促進するのに使用できるコントラクトとして機能する。CLSを厳守することによって、ある言語で記述されたライブラリは、別の言語で記述されたコードモジュールから直接にアクセスでき、ある言語で記述されたコードモジュールと別の言語で記述されたコードモジュールの間のシームレスな統合を達成することができる。CLSの1つの例示的な詳細な実施形態が、ECMA TC39/TG3の参加者によって作成されたECMA標準規格である。非特許文献1を参照されたい。
【0028】
APIレイヤ142は、アプリケーション130が、レイヤ146によって提供されるリソースおよびサービスにアクセスするために呼び出す関数のグループを提供する。ネットワークプラットフォームに対するAPI関数を公開することによって、アプリケーション開発者は、ネットワークリソースが実際にどのように動作するかまたは使用可能にされるかの複雑な相互作用を理解する必要なしに、ネットワークリソースおよび他のウェブサービスを完全に利用する分散コンピューティングシステム用のウェブアプリケーションを作成することができる。さらに、ウェブアプリケーションを、任意の数のプログラミング言語で記述でき、共通言語ランタイムレイヤ144によってサポートされ、共通言語仕様140の一部として含まれる中間言語に変換することができる。この形で、APIレイヤ142が、広範囲のさまざまなアプリケーションにメソッドを提供することができる。
【0029】
さらに、フレームワーク132を、フレームワークをホスティングするサーバ134からリモートに実行されるリモートアプリケーションによって設定される、API呼出しをサポートするように構成することができる。それぞれクライアント120(3)および120(M)に常駐する代表的なアプリケーション148(1)および148(2)は、直接的にまたは間接的に、ネットワーク104上でAPIレイヤ142への呼出しを行うことによって、API関数を使用することができる。
【0030】
このフレームワークを、クライアントで実施することもできる。クライアント120(3)は、フレームワーク150がクライアントで実施される情況を表す。このフレームワークは、サーバベースのフレームワーク132と同一とするか、クライアント用に修正することができる。その代わりに、クライアントが、携帯電話、携帯情報端末、ハンドヘルドコンピュータ、または他の通信/コンピューティング装置などの制限付きまたは専用機能の装置である場合に、クライアントベースフレームワークを圧縮することができる。
【0031】
(開発者のプログラミングフレームワーク)
図2に、プログラミングフレームワーク132を詳細に示す。共通言語仕様(CLS)レイヤ140は、さまざまな言語130(1)、130(2)、130(3)、130(4)、…、130(K)で記述されたアプリケーションをサポートする。そのようなアプリケーション言語に、Visual Basic、C++、C#、COBOL、Jscript、Perl、Eiffel、Pythonなどが含まれる。共通言語仕様140は、それに従う場合にさまざまな言語が通信できるようなる特徴のまたは特徴に関するルールのサブセットを指定する。たとえば、いくつかの言語は、共通言語ランタイム144によってサポートされる可能性がある所与の型(たとえば、「int*」型)をサポートしない。この場合に、共通言語仕様140に、その型が含まれない。その一方で、すべてまたはほとんどの言語によってサポートされる型(たとえば、「int[]」型)は、共通言語仕様140に含まれ、したがって、ライブラリ開発者は、それを使用することができ、言語がそれを処理できることが保証される。この通信の能力は、ある言語で記述されたコードモジュールと別の言語で記述されたコードモジュールの間のシームレスな統合をもたらす。異なる言語が、特定のタスクに特によく適するので、言語の間のシームレスな統合によって、開発者が、特定のコードモジュールに対し特定の言語を選択でき、そのコードモジュールを異なる言語で記述されたモジュールと共に使用する能力が与えられる。共通言語ランタイム144を用いると、クロス言語継承と共にシームレスなマルチ言語開発が可能になり、複数プログラミング言語の堅牢で保護された実行環境が提供される。共通言語仕様140および共通言語ランタイム144に関するさらなる情報については、特許文献1、表題「Method and System for Compiling Multiple Languages」および特許文献2、表題「Unified Data Type System and Method」を参照されたい。
【0032】
フレームワーク132によって、オペレーティングシステム146(1)(たとえば、Windows(登録商標)ブランドのオペレーティングシステム)およびオブジェクトモデルサービス146(2)(たとえば、コンポーネントオブジェクトモデル(COM)または分散COM)がカプセル化される。オペレーティングシステム146(1)は、ファイル管理、通知、イベント処理、ユーザインターフェース(たとえば、ウィンドウイング(windowing)、メニュー、ダイアログなど)、セキュリティ、認証、検証、プロセスおよびスレッド、メモリ管理などの従来の機能を提供する。オブジェクトモデルサービス146(2)は、さまざまなタスクを実行するために、他のオブジェクトとのインターフェースを提供する。APIレイヤ142に対して行われる呼出しは、オペレーティングシステム146(1)および/またはオブジェクトモデルサービス146(2)によるローカル実行のために共通言語ランタイムレイヤ144に渡される。
【0033】
API142は、API関数を複数の名前空間にグループ化する。名前空間によって、本質的に、セットとして「型」と呼ばれる、関連する機能性の特定のセットを提供する、クラス、インターフェース、委任(delegate)、列挙、および構造体のセットが定義される。クラスは、参照割り当てセマンティックス(semantics)を有する、管理されるヒープから割り当てられるデータを表す。委任は、オブジェクト指向関数ポインタである。列挙は、名前付き定数を表す特殊な種類の値型である。構造体は、値割り当てセマンティックスを有する、静的に割り当てられたデータを表す。インターフェースは、他の型を実施できるコントラクトを定義する。
【0034】
名前空間を使用することによって、設計者が、型のセットを階層名前空間に編成することができる。設計者は、型のセットから複数のグループを作成することができ、各グループに、論理的に関連する機能性を公開する少なくとも1つの型が含まれる。例示的な実施形態では、API142が、3つのルート名前空間を含むように編成される。図2には3つのルート名前空間だけが示されているが、追加のルート名前空間をAPI142に含めることもできることに留意されたい。API142に示された3つのルート名前空間は、プレゼンテーションサブシステムの第1名前空間200(ユーザインターフェースシェルの名前空間202を含む)、ウェブサービスの第2名前空間204、およびファイルシステムの第3名前空間206である。各グループに名前を割り当てることができる。たとえば、プレゼンテーションサブシステム名前空間200に、名前「Windows」を割り当てることができ、ファイルシステム名前空間206の型に、名前「Storage」を割り当てることができる。名前付きグループを、System名前空間全体などのシステムレベルAPIの単一の「グローバルルート」名前空間の下で編成することができる。トップレベル識別子を選択し、プレフィックシングすることによって、各グループの型を、型を含むグループの名前の前に置かれた選択されたトップレベル識別子を含む階層名によって簡単に参照することができる。たとえば、ファイルシステム名前空間206の型を、階層名「System.Storage」を使用して参照することができる。このようにして、個々の名前空間200、204、および206が、System名前空間からの主要な分岐になり、および個々の名前空間が「System.」プレフィックスなどの指示子(designator)を前に付けられる指定を伝える。
【0035】
プレゼンテーションサブシステム名前空間200は、プログラミングおよびコンテンツ開発に関する。この名前空間は、アプリケーション、文書、媒体プレゼンテーション、および他のコンテンツの生成を可能にする型を供給する。たとえば、プレゼンテーションサブシステム名前空間200は、開発者がオペレーティングシステム146(1)および/またはオブジェクトモデルサービス146(2)からサービスを得られるようにするプログラミングモデルを提供する。
【0036】
シェル名前空間202は、ユーザインターフェース機能性に関する。この名前空間は、開発者が自分のアプリケーションにユーザインターフェース機能性を埋め込めるようにし、さらに、開発者がユーザインターフェース機能性を拡張できるようにする型を供給する。
【0037】
ウェブサービス名前空間204は、たとえば、イントラネット上の2つのピアの間で動作するチャットアプリケーションのように単純なアプリケーションおよび/または数百万のユーザに関するスケーラブルウェブサービスなどの複雑なアプリケーションなど、さまざまなウェブアプリケーションの作成を可能にするインフラストラクチャに関する。本明細書で説明するインフラストラクチャは、有利なことに、特定のソリューションの複雑さに適当なパーツだけを使用する必要があるという点で、非常に可変である。このインフラストラクチャは、さまざまなスケールおよび複雑さのメッセージベースアプリケーションを構築する基礎を提供する。このインフラストラクチャまたはフレームワークは、基本的メッセージング、セキュアメッセージング、信頼されるメッセージング、およびトランザクション処理されるメッセージングのAPIを提供する。下で説明する実施形態では、関連するAPIが、有用性、使い易さ、拡張性、およびバージョナビリティ(versionability)のバランスをとるように注意深く作成された形で名前空間の階層に分解される。
【0038】
ファイルシステム名前空間206は、ストレージに関する。この名前空間は、情報の保管および検索を可能にする型を供給する。
【0039】
フレームワーク132のほかに、プログラミングツール220が、開発者がウェブサービスおよび/またはアプリケーションを構築するのを支援するために設けられている。プログラミングツール220の1つの例が、Microsoft社によって提供されるプログラミングツールのマルチ言語スイートであるVisual Studio(商標)である。
【0040】
(ルートAPI名前空間)
図3に、プレゼンテーションサブシステム200の一部を詳細に示す。一実施形態で、名前空間が、名前のストリングがピリオドによって連結される階層命名規約に従って識別される。たとえば、プレゼンテーションサブシステム200は、ルート名「System.Windows」によって識別される。「System.Windows」名前空間内に、「System.Windows.Controls」として識別される、さまざまなコントロールの別の名前空間があり、この名前空間は、さらに、「System.Windows.Controls.Primitives」と称する、プリミティブ(図示せず)のもう1つの名前空間を識別する。この命名規約を念頭において、以下では、API142の選択された名前空間の一般的な概要を示すが、他の命名規約を使用して同等の効果を得ることができる。
【0041】
図3からわかるように、プレゼンテーションサブシステム200に、複数の名前空間が含まれる。図3に示された名前空間は、プレゼンテーションサブシステム200の特定の実施形態を表す。プレゼンテーションサブシステム200の他の実施形態に、1つまたは複数の追加の名前空間を含めることができ、あるいは、図3に示された名前空間の1つまたは複数を省略することができる。
【0042】
プレゼンテーションサブシステム200は、API142のプレゼンテーション機能性の多くのルート名前空間である。Controls名前空間310に、ユーザインターフェースなどの情報のディスプレイを構築するのに使用されるコントロールと、ユーザがアプリケーションと対話できるようにするクラスが含まれる。コントロールの例に、ディスプレイ上のボタンを作成する「Button」、ディスプレイ上のラジオスタイルのボタンを生成する「RadioButton」、ディスプレイ上のメニューを作成する「Menu」、ディスプレイ上のツールバーを作成する「ToolBar」、ディスプレイ上のイメージを作成する「Image」、および情報の階層ビューを作成する「TreeView」が含まれる。
【0043】
ある種のコントロールは、複数の要素をネストし、配置することによって作成される。 これらのコントロールは、コントロールの作成に使用される要素を隠蔽する論理モデルを有し、これによって、プログラミングモデルが単純になる。コントロールに、開発者またはユーザがスタイルおよびテーマを与えることができる(たとえば、ユーザインターフェースボタンの外見および挙動をカスタマイズすることによって)。一部のコントロールは、個人が個々のコントロールのスタイルを調整できるようにするアドレス可能コンポーネントを有する。さらに、コントロールを、アプリケーション設計者およびコンポーネント開発者がサブクラス化し、拡張することができる。コントロールは、ベクトルグラフィックスを使用してレンダリングされ、特定のインターフェースまたは他のディスプレイの要件に合うようにサイズを変更することができる。コントロールは、たとえばユーザインターフェースの対話フィールを強化し、アクションおよびリアクションを示すためにアニメーションを使用することができる。
【0044】
Controls名前空間310に、1つまたは複数のパネルが含まれ、このパネルは、その子(たとえばネストされた要素)を測定し、配置するコントロールである。たとえば、「DockPanel」パネルでは、各子をディスプレイの上辺、左辺、下辺、または右辺にドッキングすることによって子を配置し、残りのスペースに他のデータを充てんする。特定のパネルが、ディスプレイ最上部のメニューおよびツールバー、ディスプレイ最下部のステータスバー、ディスプレイの左辺のフォルダリストにドッキングし、残りのスペースにメッセージのリストを充てんすることができる。
【0045】
上述のように、System.Windows.Controls.Primitivesは、通常はSystem.Windows.Controls名前空間内のコントロールの開発者および彼ら自身のコントロールを作成する開発者によって使用されるコンポーネントである複数のコントロールを含む名前空間である。これらのコントロールの例に、「ThumbおよびRepeatButton」が含まれる。別のコンポーネントである「ScrollBar」は、4つのリピートボタン(「ラインアップ」の1つ、「ラインダウン」の1つ、「ページアップ」の1つ、および「ページダウン」の1つ)および現在のビューを文書内の別のロケーションにドラッグする「Thumb」によって作成される。別の例では、「ScrollViewer」は、スクロール可能領域を提供するために2つの「ScrollBars」および1つの「ScrollArea」を使用して作成されるコントロールである。
【0046】
下のリストに、System.Windows.Controls名前空間によって公開される例のクラスが含まれる。これらのクラスを用いると、ユーザが、たとえばさまざまな入出力機能ならびに追加のディスプレイ機能を介してアプリケーションと対話できるようになる。
・AccessKey − AccessKeyは、文字をラップし、その文字をキーボードニーモニックとして示すキーボードキュー装飾を受け取ることを示す、FrameworkElement要素である。デフォルトで、キーボードキュー装飾は、下線である。
・Audio − Audio要素。
・Border − ボーダー、バックグラウンド、またはその両方を、別の要素の回りに描く。
・Button − Clickイベントに固有に反応する標準ボタンコンポーネントを表す。
・Canvas − Canvas領域に関連して座標によってユーザが子要素を明示的に位置決めできる領域を定義する。
・CheckBox − ユーザに、真/偽などのオプションを与えるためにCheckBoxを使用する。CheckBoxを用いると、ユーザが、オプションのリストから選択できるようになる。CheckBoxコントロールによって、ユーザが、オプションの組合せを選択できるようになる。
・CheckedChangedEventArgs − CheckedChangedEventArgsクラスには、CheckedChangedEventイベントに関する追加情報が含まれる。
・CheckStateChangedEventArgs − CheckStateChangedEventArgsクラスには、 CheckStateChangedEventイベントに関する追加情報が含まれる。
・ClickEventArgs − Clickイベントに関する情報を含む。
・ColumnStyle − 変更可能なColumnStyleオブジェクトを表す。
・ColumnStyles − Changeable要素のコレクションである変更可能なパターンのIListオブジェクト。
・ComboBox − ComboBoxコントロール。
・ComboBoxItem − ComboBox内部で選択可能なアイテムを実装するコントロール。
・ContactPickerDialog − ユーザが1つまたは複数の連絡先を選択できるようにする。
・ContactPropertyRequest − アプリケーションが、ContactPickerDialogを介して連絡先プロパティに関する情報を要求できるようにする。このクラスを継承することはできない。
・ContactPropertyRequestCollection - ContactPropertyRequestオブジェクトのコレクションを表す。
・ContactSelection − Microsoft(登録商標)Windows(登録商標)File System、コードネーム「WinFS」またはMicrosoft Active Directory(登録商標)からの、選択された連絡先に関する情報。
・ContactSelectionCollection − ContactSelectionオブジェクトのコレクションを表す。
・ContactTextBox − 連絡先または連絡先のプロパティの選択をサポートするエディットコントロール。
・ContactTextBoxSelectionChangedEventArgs − ContactTextBoxSelectionChangedイベントの引数。
・ContactTextBoxTextChangedEventArgs − ContactTextBoxTextChangedイベントの引数。
・ContactTextBoxTextResolvedEventArgs − TextResolvedToContactイベントの引数。
・ContentChangedEventArgs − ContentChangedEventのイベント引数。
・ContentControl − 単一の内容を有するすべてのコントロールの基本クラス。
・ContentPresenter − ContentPresenterは、コンテンツコントロールのスタイルで、コンテンツが追加されるコントロールのビジュアルツリー(chromeテンプレート)内の位置を表すのに使用される。
・ContextMenu − ユーザが呼び出す選択肢のメニューを定義するコントロール。
・ContextMenuEventArgs − ContextMenuEventに送られるデータ。
・Control −すべてのユーザ対話要素の基本クラスを表す。このクラスは、そのサブクラスのプロパティの基本的なセットを提供する。
・Decorator − ボーダーなど、単一の子要素の上または周囲にエフェクトを適用する要素の基本クラス。
・DockPanel − 互いに関して水平にまたは垂直にのいずれかで子要素を配置できる領域を定義する。
・DragDeltaEventArgs − DragDeltaEventArgsクラスには、DragDeltaEventイベントに関する追加情報が含まれる。
・FixedPanel − FixedPanelは、自動ページ付け(pagination)について固定されたページを含む固定フォーマット文書において使用されるルート要素である。FixedPanelは、一度に1ページまたはページのスクロール可能なスタックとして、自動ページ付けされたコンテンツを表示する。
・FlowPanel − FlowPanelは、単一行の長さを超えるコンテンツを、改行、ラップ、および位置合せするのに使用される。FlowPanelは、コンテナのコンテンツ、たとえばTextのフローが単一行の長さを超える可能性が高いときに使用できる、改行プロパティおよび位置合せプロパティを提供する。
・Frame − 別のマークアップツリーのコンテンツをロードできる領域。
・Generator − Generatorは、ItemsControlの代わりにUIを生成し、GeneratorFactoryの監督下で働くオブジェクトである。
・GeneratorFactory − GeneratorFactoryは、ItemsControlの代わりにUIを生成する責任を負う。GeneratorFactoryは、コントロールのItemsCollection(フラット化されたビュー)のアイテムとそれに対応するUIElementの間の関連付けを維持する。コントロールのアイテムコンテナは、ファクトリにGeneratorを要求することができ、ファクトリは、実際のUIの生成を行う。
・GridPanel − 行および列からなるグリッド領域を定義する。
・HeaderItemsControl − 複数のアイテムを含み、ヘッダを有するすべてのコントロールの基本クラス。
・HorizontalScrollBar − 水平スクロールバークラス。
・HorizontalSlider −水平スライダクラス。
・HyperLink − HyperLinkクラスでは、ナビゲーションコントロールが実装される。デフォルトプレゼンタは、TextPresenterである。
・Image − 文書またはアプリケーションにイメージを含める簡単な方法を提供する。
・IncludeContactEventArgs − ContactPickerDialog.IncludeContactイベントのハンドラに渡される引数。
・ItemCollection − コントロール内の個別のアイテムのコレクションを維持する。コレクションコンテンツの変更およびコンテンツに関するデータの入手を可能にするメソッドおよびプロパティを提供する。
・ItemsChangedEventArgs − ItemsChangedイベントは、アイテムコレクションが変更したレイアウトを知らせるためにGeneratorFactoryによって引き起こされる。
・ItemsControl − 複数の子を有するすべてのコントロールの基本クラス。
・ItemsView − ItemsViewはItemCollectionのフラット化されたビューを提供する。
・KeyboardNavigation − KeyboardNavigationクラスは、フォーカス可能コントロールの間の、論理(タブ)ナビゲーションおよび方向付き(矢印)ナビゲーションのメソッドを提供する
・ListBox − 選択可能なアイテムのリストを実装するコントロール。
・ListItem − ListBox内部の選択可能アイテムを実装するコントロール。
・Menu − ユーザが呼び出す選択肢のメニューを定義するコントロール。
・MenuItem − メニューの子アイテム。MenuItemを選択してコマンドを呼び出すことができる。MenuItemは、セパレータとすることができる。MenuItemは、サブメニューのヘッダとすることができる。MenuItemは、チェック付きまたはチェックなしにすることができる。
・PageViewer − 自動ページ付けコントロール、ツールバー、およびページバーコントロールを含む文書表示コンポジットコントロールを表す。
・PaginationCompleteEventArgs − PaginationCompleteEventのイベント引数。
・PaginationProgressEventArgs − PaginationProgressEventのイベント引数。
・Pane − 新しいウィンドウを起動せずにマークアップ言語(たとえば「XAML」)でウィンドウプロパティを定義する方法を提供する。
・Panel − すべてのPanel要素の基本クラスを提供する。Panel要素をインスタンス化するためには、派生具象クラスを使用する。
・RadioButton − RadioButtonは、2つの状態すなわち真または偽を有するオプションボタンを実装する。
・RadioButtonList − このコントロールは、RadioButtonのグループ化コントロールとして働き、RadioButtonを相互排他的に処理する部分である。RadioButtonListは、Selectorから継承する。RadioButtonListは、本質的に単一のSelectionModeセレクタであり、(Selectorからの)選択という概念は、これがグループ化するRadioButtonのCheckedプロパティをキーオフとする。
・RowStyle − 変更可能なパターンChangeable要素。
・RowStyles − Changeable要素のコレクションである変更可能なパターンのIListオブジェクト。
・ScrollChangeEventArgs − ScrollChangeEventsArgsは、スクロール状態の変更を記述する。
・ScrollViewer −
・SelectedItemsCollection − Selectorの選択されたアイテムのコンテナ。
・SelectionChangedEventArgs − 選択変更イベントハンドラへの入力。
・SimpleText − SimpleTextは、ユーザインターフェース(UI)シナリオでの使用を想定された軽量で、複数行の、単一フォーマットテキスト要素である。SimpleTextは、複数の同一のフォーマッティングプロパティをTextとして公開し、しばしば、ある多用途性を犠牲にして性能を高めるのに使用することができる。
・StyleSelector − StyleSelectorを用いると、アプリケーション作成者がカスタムスタイル選択ロジックを提供できるようになる。たとえば、ContentとしてクラスBugを用いて、Pri1バッグに特定のスタイル、Pri2バッグに異なるスタイルを使用する。アプリケーション作成者は、派生セレクタクラスでSelectStyleメソッドをオーバーライドし、このクラスのインスタンスにContentPresenterクラスのStyleSelectorプロパティを割り当てることができる。
・Text − Textの複数のフォーマットをレンダリングできるTextコントロールを表す。Textは、アプリケーションUI内で最もよく使用される。より高度なテキストシナリオは、TextPanelの追加の機能セットから利益を得る。比較的単純なテキストサポートが必要である場合のほとんどで、Textは、軽量の性質および機能の範囲のゆえに、好ましい要素である。
・TextBox − テキスト入力を受け入れる編集可能な領域を提供するコントロールを表す。
・TextChangedEventArgs − TextChangedEventArgsクラスは、TextRange.SetText()によって送出されるイベントに関連するRoutedEventArgsの型を表す。
・TextPanel − テキストをフォーマットし、サイズを変更し、描画する。TextPanelは、複数の行のテキストおよび複数のテキストフォーマットをサポートする。
・ToolTip − ユーザがコントロールの上でホバリングするときに情報を表示するコントロール。
・ToolTipEventArgs − ToolTipEvent時に送られるデータ。
・TransformDecorator − TransformDecoratorは、子を含み、指定された変換をその子に適用する。TransformDecoratorは、変換後に子がデコレータの空間にぴたりとおさまり、最大限の領域を使用するように、そのローカル(変換前)座標で子を測定し、配置するロジックを実装する。したがって、子は、それに適用される変換の知識を有する必要がない。
・UIElementCollection − UIElementCollectionは、UIElementの順序付きコレクションである。
・ValueChangedEventArgs − このValueChangedEventArgsクラスには、ValueChangedEventイベントに関する追加情報が含まれる。
・VerticalScrollBar − 垂直スクロールバークラス。
・VerticalSlider − 垂直スライダクラス。
・Video − 現在のユーザ座標系内の指定された長方形でストリーミングビデオファイルまたはストリーミングオーディオファイルを再生する。
・VisibleChangedEventArgs − VisibleChangedEventArgsクラスには、VisibleChangedEventイベントに関する追加情報が含まれる。
【0047】
System.Windows.Controls名前空間には、さまざまな列挙も含まれる。下のリストに、System.Windows.Controls名前空間に関連する列挙例が含まれる。
・CharacterCase − テキストがタイプされるときにTextBoxコントロール内の文字の大文字小文字を指定する。
・CheckState − チェックボックスなど、チェック付き、チェックなし、または中間状態とすることができるコントロールの状態を指定する。
・ClickMode − Clickイベントを発生させなければならないときを指定する。
・ContactControlPropertyPosition − 連絡先のプロパティの位置およびディスプレイを制御する。
・ContactPickerDialogLayout − ContactPickerDialogが選択されたプロパティをどのように表示すべきかを指定する。
・ContactPropertyCategory − プロパティが、ユーザが選択できる複数の値を有する場合に、どの値をデフォルトとして扱うかを指定する。たとえば、ContactPickerDialogから電話番号プロパティを要求するときに「Work」が好ましいカテゴリとして指定され、ユーザが、仕事場と家庭の両方の電話番号を有する連絡先を選択する場合に、仕事場の電話番号がデフォルト選択として示される。ユーザは、UIを使用して、その代わりに家庭の電話番号を選択することができる。
・ContactPropertyType − ContactPickerDialogがユーザに要求できる連絡先のプロパティを指定する。
・ContactType − どの連絡先型をContactPickerDialogに表示するかを指定する。
・Direction − この列挙は、ジェネレータがUIを作る方向を指定するためにGeneratorFactoryおよびGeneratorによって使用される。
・Dock − DockPanel内の子要素のDock位置を指定する。
・GeneratorStatus − この列挙は、GeneratorFactoryによって、その状況を示すのに使用される。
・KeyNavigationMode − TabNavigationプロパティの型によって、Tabナビゲーションが生じるときにコンテナがフォーカスを移動する方法が指定される。
・MenuItemBehavior − MenuItemが有することができる異なる挙動を定義する。
・MenuItemType − MenuItemsの異なる配置型を定義する。
・Orientation − スライダオリエンテーション型。
・PageViewerFit − ページをPageViewerのクライアント領域にどのように適合させるかを選択する。
・PageViewerMode − モードドロップダウンに反映される現在のPageViewerモードを選択する。
・ScrollerVisibility − ScrollerVisibiltyは、スクロールバーの可視性挙動を定義する。
・SelectionMode − ListBoxの選択挙動を指定する。
【0048】
「Position」が、System.Windows.Controls名前空間に関連する構造体の例である。Generatorのユーザは、この構造体を使用して位置を記述する。たとえば、アイテムリストの先頭から前への生成を開始するには、位置(−1、0)および方向Forwardを指定する。リストの末尾から後ろへの生成を開始するには、位置(−1、0)および方向Backwardを指定する。インデックスkの要素の後のアイテムを生成するには、位置(k、0)および方向Forwardを指定する。
【0049】
下のリストに、System.Windows.Controls名前空間に関連する例の委任が含まれる。
・CheckedChangedEventHandler − この委任は、CheckedChangedEventイベントのハンドラによって使用される。
・CheckStateChangedEventHandler − この委任は、CheckStateChangedEventイベントのハンドラによって使用される。
・ClickEventHandler − Clickイベントを処理するメソッドを表す。
・ContactTextBoxSelectionChangedEventHandler − ContactTextBoxSelectionChangedイベントの委任ハンドラ。
・ContactTextBoxTextChangedEventHandler − ContactTextBoxTextChangedイベントの委任ハンドラ。
・ContactTextBoxTextResolvedEventHandler − TextResolvedToContactイベントの委任ハンドラ。
・ContentChangedDelegate − ContentChangedEventに関する委任。
・ContextMenuEventHandler − ContextMenuEventを処理するコールバック型。
・DragDeltaEventHandler − この委任は、DragDeltaEventイベントのハンドラによって使用される。
・IncludeContactEventHandler − ContactPickerDialog.IncludeContactイベントのハンドラ。
・ItemsChangedEventHandler − ItemsChangedEventArgsを受け取るハンドラに使用される委任。
・OpenedEventHandler − ContactPickerDialog.Openedイベントのハンドラ。
・PaginationCompleteDelegate − PaginationCompleteEventに関する委任。
・PaginationProgressDelegate − PaginationProgressEventに関する委任。
・ScrollChangeEventHandler − この委任は、ScrollChangeEventイベントのハンドラによって使用される。
・SelectionChangedEventHandler − 選択変更イベントの処理に関する委任型。
・TextChangedEventHandler − TextChangedEventArgsを受け取るハンドラに使用される委任。
・ToolTipEventHandler − ToolTipEventの処理に関するコールバック型。
・ValueChangedEventHandler − この委任は、ValueChangedEventイベントのハンドラによって使用される。
・VisibleChangedEventHandler − この委任は、VisibleChangedEventイベントのハンドラによって使用される。
【0050】
もう1つの名前空間、System.Windows.Controls.Atomsは、System.Windows.Controls名前空間のサブ名前空間である。System.Windows.Controls.Atomsには、関連するコントロール、イベント引数、およびイベントハンドラが含まれる。下のリストに、System.Windows.Controls.Atoms名前空間に関連する例のクラスが含まれる。
・PageBar − スクロール可能自動ページ付けコントロールを表す。
・PageElement − 自動ページ付けされたコンテンツの特定のページをレンダリングする。レンダリングされるページは、PageSourceプロパティによって指定される。
・PageHoveredEventArgs − PageHoveredEventArgsは、マウスポインタがホバリングしている場所に関する情報を提供する。
・PageScrolledEventArgs − PageScrolledEventArgsには、PageScrolledEventに関する情報が含まれる。
・PageSelectedEventArgs − PageSelectedEventは、新しい行/列範囲選択が行われるときに発せられる。
・PageSelector − PageSelector:ページのうちで表示される行/列の範囲をユーザが選択できるようにする。
・PageSource − 自動ページ付けされるコンテンツのソースを識別する。自動ページ付けされるコンテンツをフォーマットするプロパティおよびメソッドも提供する。
【0051】
下のリストに、System.Windows.Controls.Atoms名前空間に関連する例の委任が含まれる。
・PageHoveredEventHandler − この委任は、PageHoveredEventイベントのハンドラによって使用される。
・PageScrolledEventHandler − この委任は、PageHoveredイベントのハンドラによって使用される。
・PageSelectedEventHandler − この委任は、PageSelectedEventイベントのハンドラによって使用される。
【0052】
System.Windows.Controls.Primitives名前空間は、System.Windows.Controls名前空間のもう1つのサブ名前空間である。上で述べたように、Primitivesサブ名前空間には、他のより複雑なコントロールによってプリミティブとして使用されることを意図されたコントロールが含まれる。下のリストに、System.Windows.Controls.Primitives名前空間に関連する例のクラスが含まれる。
・ButtonBase − 派生クラスにおいてオーバーライドされるときに、関連するイベントおよびプロパティを定義し、関連する入力イベントのハンドラを提供する。
・Popup − コンテンツを含むフライアウトウィンドウを作成するコントロール。
・RangeBase − 指定された範囲を有する要素の基本クラスを表す。そのような要素の例が、スクロールバーおよびプログレスバーである。このクラスは、関連するイベントおよびプロパティを定義し、そのイベントのハンドラを提供する。
・RepeatButton − RepeatButtonコントロールは、Clickイベントが発生するときの反復セマンティックスを追加する。
・ScrollArea − ScrollAreaは、スクロールに関する有効な要素である。これは、これがクリッピングするコンテンツを含み、そのコンテンツのオフセットおよび範囲を公開するプロパティを提供する。プログラムによってあるいはキーボードまたはマウスホイールを介してスクロールを駆動できるように、デフォルト入力処理も提供する。
・ScrollBar − スクロールバークラス。
・Selector − 子の間からアイテムを選択するコントロールの基本クラス。
・Slider − スライダクラス。
・Thumb − サムコントロールは、スクロールバーの基本的なドラッグ移動機能性およびウィジェットのウィンドウサイズ変更を可能にする。
【0053】
「IEnsureVisible」が、System.Windows.Controls.Primitives名前空間に関連するインターフェースの例である。IEnsureVisibleは、子ビジュアルをスクロールする/ビューに移動するためにビジュアルに対して実施される。
【0054】
下のリストに、System.Windows.Controls.Primitives名前空間に関連する例の列挙が含まれる。
・ArrowButtonStates −
・CloseModeType − さまざまなマウスイベントに対してポップアップがどのように振る舞うべきかを記述する。
・Part − Part列挙は、スクロールバーを構成するコントロールのセマンティック使用を示すのに使用される。
・PartStates − スクロールバー部品状態。
・PlacementType − ポップアップがスクリーンに置かれるべき場所を記述する。
・SizeBoxStates −
【0055】
Documents名前空間312は、リッチフォーマットであり意味論的に豊富な文書の作成に使用されるセマンティック要素およびフォーマッティング要素のコレクションである。一実施形態で、「要素」は、主に要素の階層(「ツリー」と称する)と共に使用されるクラスである。これらの要素は、対話型(たとえば、キーボード、マウス、または他の入力デバイスを介するユーザ入力を受け取る)とすることができ、イメージまたはオブジェクトをレンダリングすることができ、他の要素の配置を支援することができる。要素例に、一般的なブロックを実装する「Block」要素、テーブルの本体を含むコンテンツを表す「Body」要素、テーブル内の表データを含む「Cell」要素、テーブルのヘッダに含まれるコンテンツを表す「Header」要素、およびコンテンツを複数のページにまたがって分割するのに使用される「PageBreak」要素が含まれる。
【0056】
下のリストに、System.Windows.Documents名前空間によって公開される例のクラスが含まれる。
・AdaptiveMetricsContext − AdaptiveMetricsContextは、適応フローフォーマット(adaptive−flow−format)文書のルート要素を提供する。子パネルが、AdaptiveMetricsContext要素でカプセル化されたならば、親パネルのコンテンツは、RME(Reading Metrics Engine)によって処理される。子パネルのサイズは、任意の列の数およびサイズならびに最適のフォントサイズおよび行高さを計算するのに使用される。
・Block − デフォルトレンダリング挙動を誘導しない一般的なブロック要素を実装する。
・BlockElement − すべてのBlock要素の基本クラスを実装する。
・Body − Table要素の本体を含むコンテンツを表す。
・Bold − Inlineから導出されるBold要素を実装する。
・BreakRecord − 改ページにまたがって自動ページ付けされたコンテンツのフォーマッティングを継続するのに必要な情報を保管する。自動ページ付けサポートを提供するためには、このクラスから継承する。これは、抽象クラスである。
・Cell − Cellには、あるTable内の表データが含まれる。Cell要素は、Rowに含まれる。
・CellCollection − テーブルセルの順序付きコレクション。
・Column − Column要素は、GridPanelまたはTableのコンテンツを配分するのに使用される。
・ColumnCollection − ColumnCollectionは、Columnの順序付きコレクションである。
・ColumnResult − 列のビュー関連情報を表す。
・ContainerParagraphResult − 他のParagraphオブジェクトだけを含むParagraphオブジェクトの計算されたレイアウトパラメータへのアクセスを提供する。
・ContentPosition − 段落内のコンテンツの位置を表す。関連するコンテンツの位置を記述するには、このクラスから継承する。これは、抽象クラスである。
・Document − Documentクラスの目的は、文書のコンテンツを、それを囲むUI「chrome」から分離することである。「分離」は、そのUIについて考慮せずに(およびコミットせずに)文書を作成できることを意味する。Documentクラスは、文書コンテンツ、通常はTextPanelまたはFixedPanelと、その子を保持する。ビジュアルツリー(デフォルトでPageViewer)が、WPPコントロールスタイリング機構を介してこの要素に関連付けられる。
・DocumentPage − 自動ページ付けの対象である文書のページに関連するコントロールのレイアウト情報を表す。これらのコントロールのレイアウト情報を記述するには、このクラスから継承する。これは、抽象クラスである。
・DocumentPageParagraphResult − 自動ページ付けによって影響を受けるオブジェクトの計算されたレイアウトパラメータへのアクセスを提供する。
・FindEngine − 検索アルゴリズムの基本クラス。
・FindEngineFactory − 検索アルゴリズムファクトリ。
・FixedPage − 固定フォーマットレイアウト文書内のコンテンツの単一ページへのアクセスを提供する。
・Footer − Table要素のフッタを含むコンテンツを表す。
・Header − Table要素のヘッダを含むコンテンツを表す。
・Heading − ヘディングとしてテキストをレンダリングするブロックレベル要素を実装する。
・HyphenationDictionary − HyphenationDictionaryは、アプリケーション内のハイフネーションサポートを提供するための辞書を表す。これには、インライン辞書と外部辞書への参照との両方を含めることができる。インライン辞書は、より高い優先順位を有し、外部辞書のエントリの前に適用される。
・Hyphenator − Hyphenatorオブジェクトは、HyphenationDictionary内のハイフネーションデータへの参照を維持し、ハイフネーションも実行する。
・Inline − デフォルトレンダリング挙動を全く誘導しない一般的なInline要素を実装する。
・InlineElement − すべてのインライン要素の基本クラスとして、一般的なインライン要素を実装する。
・Italic − Inlineから導出されるItalic要素を実装する。
・LineBreak − 改行を課すマークアップ要素を表す。
・LineResult − テキストの行の計算された情報へのアクセスを提供する。
・List − List要素を実装する。Listは、中黒または番号付けなどのマーカーを用いてフォーマットされるように設計されたブロックレベル要素である。
・ListElementItem − 中黒または番号付けなどのマーカーをサポートする、ListElementItemを実装する。
・Note − HTMLのnote要素に類似する、Note要素を実装する。
・PageBreak − さまざまなページにまたがってコンテンツを分割するのに使用されるマークアップ要素を表す。
・PageDescriptor − 自動ページ付けされたレイアウトを作成するのに必要な情報を保管する、PageDescriptorを実装する。
・Paragraph − 段落のテキストをレンダリングするのに使用されるブロックレベル要素を実装する。レンダリング挙動は、HTMLのparagraph要素のレンダリング挙動に類似する。
・ParagraphResult − Paragraphオブジェクトの計算されたレイアウトパラメータへのアクセスを提供する。
・Row − GridPanel要素またはTable要素内の行を定義する。
・RowCollection − RowCollectionは、Rowの順序付きコレクションを表す。
・RowGroup − TableまたはGridPanel内の行のグループのプロパティデフォルトを指定する。
・Section − 一般的なコンテナ要素を実装する。レンダリング挙動は、HTMLのdiv要素に類似する。
・SmallCaps − インラインSmallCaps要素を実装する。SmallCapsは、タイトルなどで、強調のために文字の小さい大文字版としてレンダリングされる、印刷形態である。
・Subscript − インラインSubscript要素を表す。Subscript文字は、他の文字の真下、左下、または右下に書き込まれる。
・Superscript − インラインSuperscript要素を表す。Superscript文字は、通常は文字または数字であり、他の文字の真上、左上、または右上にレンダリングされる。
・Table − Tableは、マークアップ言語(たとえば「XAML」)を使用して表形式で複雑なデータを表示するのに使用される。
・TextArray − テキストのアクセスおよび操作に関する基本API。
・TextChangedEventArgs − TextChangedEventArgsは、TextArrayが変更されるときに送られるイベント引数を定義する。
・TextElement − TextElementは、TextTreeのTextRange機能を提供する。これは、固定されたエンドポイントを有する不変の、連続的なTextRangeである。これは、ContentElement Input、FocusおよびEventingのサポートを提供する。DependencyObjectプロパティのサポートも提供する。
・TextNavigator − これによって、テキストコンテンツを列挙することができる。移動可能なTextPositionを実装する。テキストラン(text run)によって移動するか、テキスト内の既知のロケーションで位置決めすることができる。
・TextParagraphResult − フローティングオブジェクトおよび図を含む、テキストに関する計算されたレイアウトパラメータへのアクセスを提供する。
・TextPosition − これは、TextArray内のある位置を表すオブジェクトである。テキスト内の位置を表すコンパクトなオブジェクトによって、テキストが変更されるときに位置が自動的に維持される。比較動作は、同一のTextArray(同一のContext)内の位置だけに適用可能である。TextPositionは、スタティックまたは移動可能とすることができる。IsChangeableプロパティによって、位置の種類がわかる。
・TextRange − TextRangeは、プロパティへの0個以上のサブレンジの一般的関連付けを提供する抽象クラスである。サブレンジ操作は、派生クラスで定義される。
・TextRangeMovable − TextRangeMovableは、移動可能なTextRangeの抽象クラスである。このクラスでは、TextUnitsに基づく始点および終点への移動の能力が追加される。
・TextTreeChangedEventArgs − TextChangedEventArgsでは、TextArrayが変更されるときに送られるイベント引数が定義される。
・TextTreeDumper − TreeDumperは、パッケージング問題に起因してパブリックであるツリーテストクラスである。
・TextTreeNavigator − これは、TextTree内のある移動可能位置を表すオブジェクトである。これは、TextTree内のみでの使用されるTextNavigatorの特定の実装である。
・TextTreePosition − これは、TextTree内のある不変の位置を表すオブジェクトである。これは、TextTree内でのみ使用されるTextPositionの特定の実装である。
・TextTreeRange − TextTreeのTextRange機能を提供する。これは、移動可能なエンドポイントを有する、不変の、連続的なTextRangeである。
・TextTreeRangeContentEnumerator − TextTreeRangeの真下のオブジェクト子に対する列挙子。
・TextUnit − テキストナビゲーションの拡張可能な単位。
・TextUnits − TextPositionおよびTextRangeに一般に使用されるテキスト単位。
・Typography − OpenTypeタイポグラフィプロパティの豊富なセットへのアクセスを提供する。
・UIElementParagraphResult − 完全にUIElementから構成される段落のParagraphResult。Floaters、Figures、および組み込みブロックレベルUIElementsに使用される。
・Underline − InlineElementから派生したUnderline要素を実装する。
【0057】
下のリストに、System.Windows.Documents名前空間に関連する例のインターフェースが含まれる。
・IDocumentContentHost − コンテンツホストの子が、コンテンツが変更されるときにホストに通知するようにするために、コンテンツホストでこのインターフェースを実装する。
・IDocumentFormatter − 自動ページ付けなどの文書機能のサポートを提供するには、要素においてこのインターフェースを実装する。
・ITextDocumentResult − 文書の列情報を維持するには、このインターフェースを実装する。
・ITextParagraphResult − テキスト段落に関するテキスト情報および位置情報を提供するには、このインターフェースを実装する。
【0058】
下のリストにSystem.Windows.Documents名前空間に関連する例の列挙が含まれる。
・ElementEdge − これは、TextPositionが配置されるオブジェクトのエッジを識別する。
・FindAdvancedOptions − FindAlgorithm(検索初期化)クラスおよびTextRangeMovable/TextSelection(単純化された検索実行)クラスによって使用される高度な検索オプション。
・FindOptions − TextBox.Findメソッドによって使用される単純化された検索オプション。
・LogicalDirection − LogicalDirectionは、テキスト内の移動の論理方向を定義する。これは、コンテンツがTextPositionに挿入されるときにTextPositionを移動する先を決定するのにも使用される。
・TextArrayRunType − これは、LogicalDiretionを考慮に入れて、TextPositionが配置される実行(run)を識別する。
・TextChangeOptions − CanChangeTextの可能なテキスト変更。
・TextMoveOptions − ナビゲーションを停止する条件を指定することによって、TextNavigatorの移動を制御する。
【0059】
下のリストに、System.Windows.Documents名前空間に関連する例の委任が含まれる。
・ObjectCloneDelegate − TextArrayの一部がコピーまたは移動されるときにDependencyObjectのクローンまたはコピーを提供するコールバックメソッド。
・TextChangedEventHandler − TextChangedEventHandler委任は、コンテンツがTextTreeに追加されるか除去されるたびに、TextChangedEventArgsを用いて呼び出される。
【0060】
Shapes名前空間314は、イメージおよびオブジェクトの作成に使用されるベクトルグラフィックス要素のコレクションである。ベクトルグラフィックス要素の使用によって、要素のサイズを簡単に変更して、特定のインターフェースまたはディスプレイ装置の要件に合わせることができるようになる。下のリストに、System.Windows.Shapes名前空間によって公開される例のクラスが含まれる。
・Ellipse − 楕円を描く。
・Glyphs − 「XAML」などのマークアップ言語のグリフ形状を表す。グリフは、フォントを表すのに使用される。
・Line − 2点間に直線を描く。
・Path − 一連の接続された直線および曲線を描く。
・Polygon − 多角形(閉じた形状を形成する接続された一連の線)を描く。
・Polyline − 一連の接続された直線を描く。
・Rectangle − 長方形を描く。
・Shape − 楕円、多角形、および長方形などの形状要素の基礎的機能性を提供する抽象クラス。
【0061】
System.Windows.Controls名前空間、System.Windows.Documents名前空間、およびSystem.Windows.Shapes名前空間は、アプリケーションおよび関連コンポーネントを開発する統合システムを提供する。この統合システムは、3つのすべての名前空間に共通のプログラミングモデルを提供し、これによって、アプリケーションプログラムの開発を単純にする。3つのすべての名前空間の間のこのインターオペラビリティによって、開発者が、3つの名前空間によって提供される機能のどれにでも適用される単一のプログラミングアーキテクチャを習得できるようになる。たとえば、共通のマークアップ言語が、3つの名前空間のすべてにまたがって使用される。この共通マークアップ言語は、XMLマークアップにおいて指定されるクラスおよびプロパティの、オブジェクトのインスタンス化されたツリーへのマッピングを提供する。
【0062】
さらに、一貫性のあるプログラミングモデルおよび一貫性のあるサービスが、3つの名前空間にまたがって使用される。たとえば、一貫性のあるイベントシステムが、さまざまなイベントの開始および処理に使用される。共通のプロパティシステムが、プロパティが「Controls」名前空間、「Documents」名前空間、または「Shapes」名前空間のどれに関連するかにかかわらず、さまざまなプロパティのスタイル指定、プロパティへのデータのバインディング、またはプロパティのアニメーション表示に使用される。さらに、同一の入力パラダイムおよびレイアウト処理が、3つのすべての名前空間にまたがって共通する。たとえば、System.Windows.Controls名前空間からのさまざまなコントロールを、System.Windows.Documents名前空間を使用して定義される文書のコンテンツの途中にネストすることができる。
【0063】
ソースファイルの例には、「Controls」、「Documents」、および「Shapes」を使用して宣言的に定義されるウィンドウおよびペイン(「ページ」とも称する)のセットが含まれる。対話ロジックも、ウィンドウおよびペインについて提供される。対話ロジックでは、特定のユーザアクションに応答してあるいはイベントまたはアクティビティの発生に応答して実行されるプログラムコードが識別される。対話ロジックは、たとえば、コモンランゲージランタイム(CLR)言語を使用して定義される。CLRは、プログラムコード(たとえば.NETプログラムコード)の実行を処理し、セキュリティ関連サービスおよびメモリ関連サービスなどのさまざまなサービスを提供するランタイム環境である。CLR言語の例に、C#およびVisual Basicが含まれる。ソースファイルに、C#およびVisual Basic言語ファイルなどの他の独立型のプログラミング言語ファイルも含めることができる。
【0064】
この議論では、「Controls」名前空間、「Documents」名前空間、および「Shapes」名前空間の統合に言及するが、この統合は、本明細書に記載の名前空間およびサブ名前空間のいずれか、またはすべてに適用することができる。
【0065】
Data名前空間316には、要素のプロパティをデータソース、データソースクラス、ならびにデータコレクションおよびビューのデータ固有実装に束縛するのに使用されるクラスおよびインターフェースが含まれる。これらのクラスおよびインターフェースは、データ入力の例外を処理するのにも使用され、これらのクラスおよびインターフェースを用いると、さまざまなデータソース内の情報に基づいてユーザインターフェースをランタイムに作成できるようになる。データは、テキスト形式で表示することができ、あるいは、負である場合に金額を赤で表示するなど、ディスプレイのフォーマッティングを変更するのに使用することができる。クラスの例に、ダイナミックプロパティユーザインターフェースとソースデータとの間のバインディングを管理するバインディング宣言オブジェクトを表す「Bind」クラスと、XMLコンテンツノードへのデータバインディングのデータソースとして働く「XmlDataSource」クラスが含まれる。
【0066】
media名前空間318は、さまざまな媒体クラスを提供する。アプリケーション設計者ならびにコンポーネント開発者は、このクラスを使用して、さまざまなプレゼンテーション機能性を開発することができる。media名前空間318のクラス例に、あるイメージングエフェクト(たとえば、ブラーおよびグレイスケール)を可能にする「ImageEffect」クラス、および単色、グラディエント、イメージ、ビデオ、および類似物を使用する領域の塗潰しの機構を提供する「Brush」クラスが含まれる。
【0067】
media名前空間318には、開発者がプロパティをアニメーション表示にし、アニメーションのセットをタイムラインのセットと整合させることを可能にするサービスを含むサブ名前空間System.Windows.Media.Animationが含まれる。アニメーションは、期間にわたって値を変更するオブジェクトである。アニメーションエフェクトに、ディスプレイ上のオブジェクトの移動、およびオブジェクトのサイズ、形状、または色の変更が含まれる。複数のアニメーションクラスが、さまざまなアニメーションエフェクトを実装するために提供される。エフェクトは、アニメーションを要素のプロパティ値に関連付けることによって達成される。たとえば、ビューにフェードインし、およびフェードアウトする長方形を作成するために、1つまたは複数のアニメーションが、長方形の不透明度プロパティに関連付けられる。
【0068】
Media名前空間318には、さまざまなテキストサービスを提供するサブ名前空間System.Windows.Media.TextFormattingも含まれる。たとえば、「TextFormatter」テキストエンジンは、テキスト行を改行し、ディスプレイに提示されるテキストをフォーマットするサービスを提供する。「TextFormatter」は、異なるテキスト文字フォーマットおよび段落スタイルを処理でき、国際テキストレイアウトを処理することができる。
【0069】
design名前空間320は、フォームおよびテキストの編集、データのフォーマット、およびクロスプロセスデータ共有を可能にするクラスを提供する。これらのクラスは、文書、アプリケーション、および他のコンテンツの編集に関する拡張可能なフレームワークを提供する。
【0070】
input名前空間322には、システムによって受け取られる入力を調整する入力マネージャが含まれる。input名前空間322には、キーボードまたはマウスなどの異なる入力デバイスを管理し、その制御を提供するのを助けるクラスも含まれる。
【0071】
navigation名前空間324は、ブラウザアプリケーションなど、ナビゲーションパラダイムを有するアプリケーションの作成を可能にするクラスおよびサービスのセットを提供する。これらのクラスおよびサービスによって、カスタマイズされたナビゲーション経験を有するアプリケーションの開発が可能になる。たとえば、オンライン商人から製品またはサービスを購入するときに、「戻る」ボタンをクリックすると、アプリケーションが異なるページを表示するようになり、そのページで、ユーザに、注文を取り消すか変更することを望むかどうかを尋ねる。別の例では、「更新」ボタンによって、アプリケーションが、まずアプリケーションを再ロードした後に新しいデータを検索するのではなく、新しいデータを検索するようになる。Navigation名前空間324には、ユーザに提示される質問の階層を生成する機構を提供するページ機能も含まれる。
【0072】
automation名前空間326は、アクセシビリティおよびユーザインターフェースオートメーションをサポートするクラスのセットを提供する。
【0073】
serialization名前空間328は、XMLファイルまたは2進表現を有するファイルから、またはこれらにオブジェクトの階層(たとえば要素)をロードまたは保管できるパーサを提供する。このプロセスでは、オブジェクトに関連するプロパティも設定され、イベントハンドラに関連付けられる。
【0074】
interop名前空間330は、他のオペレーティングシステムまたはコンピューティングプラットフォームとのインターオペラティブを可能にするクラスのセットを提供する。
【0075】
forms.Interop名前空間332は、アプリケーションがフォーム制御動作をホスティングできるようにする要素を提供する。
【0076】
別の名前空間System.IO.CompoundFile(図3に図示せず)は、さまざまな文書配布可能ファイルが保管される複合ファイルを使用するサービスを提供する。これらのサービスを用いると、内容の暗号化および圧縮が可能になる。これらのサービスは、リフロー可能な文書および固定フォーマット文書など、同一の内容の複数の翻訳のストレージもサポートする。
【0077】
(例示的なコンピューティングシステムおよび環境)
図4に、プログラミングフレームワーク132を(完全にまたは部分的にのいずれかで)実施できる、適するコンピューティング環境400の例を示す。コンピューティング環境400は、本明細書に記載のコンピュータアーキテクチャおよびネットワークアーキテクチャで使用することができる。
【0078】
例示的なコンピューティング環境400は、コンピューティング環境の一例にすぎず、コンピュータおよびネットワークアーキテクチャの使用の範囲または機能性に関する制限を示唆することを意図されたものではない。また、コンピューティング環境400を、例示的なコンピューティング環境400に示された、構成要素のいずれかまたはその組合せに関する依存性または要件を有するものと解釈してもならない。
【0079】
フレームワーク132を、多数の他の汎用または専用コンピューティングシステム環境または構成と共に実施することができる。使用に適する可能性がある衆知のコンピューティングシステム、コンピューティング環境、および/または構成の例に、パーソナルコンピュータ、サーバコンピュータ、マルチプロセッサシステム、マイクロプロセッサベースのシステム、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたは装置のいずれかを含む分散コンピューティング環境などが含まれるが、これに制限されない。このフレームワークのコンパクト版またはサブセット版を、携帯電話、携帯情報端末、ハンドヘルドコンピュータ、または他の通信/コンピューティング装置などの限られたリソースのクライアントで実施することもできる。
【0080】
フレームワーク132を、1つまたは複数のコンピュータまたは他の装置によって実行される、プログラムモジュールなどのコンピュータ実行可能命令の全般的な文脈で説明することができる。一般に、プログラムモジュールには、特定のタスクを実行するか特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。フレームワーク132は、通信ネットワークを介してリンクされたリモート処理装置によってタスクが実行される分散コンピューティング環境で実践することもできる。分散コンピューティング環境では、プログラムモジュールを、メモリストレージ装置を含むローカルおよびリモートの両方のコンピュータストレージ媒体に配置することができる。
【0081】
コンピューティング環境400に、コンピュータ402の形の汎用コンピューティング装置が含まれる。コンピュータ402のコンポーネントには、1つまたは複数のプロセッサまたは処理装置404、システムメモリ406、および処理装置404を含むさまざまなシステムコンポーネントをシステムメモリ406に接続するシステムバス408を含めることができるが、これに制限はされない。
【0082】
システムバス408は、メモリバスまたはメモリコントローラ、周辺バス、AGP(Accelerated Graphics Port)、およびさまざまなバスアーキテクチャのいずれかを使用するプロセッサバスまたはローカルバスを含む、複数の可能なタイプのバス構造の1つまたは複数を表す。たとえば、そのようなアーキテクチャに、ISA(Industry Standard Architecture)バス、MCA(Micro Channel Architecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Association)ローカルバス、およびメザニンバスとも称するPCI(Peripheral Component Interconnects)バスを含めることができる。
【0083】
コンピュータ402に、通常は、さまざまなコンピュータ可読媒体が含まれる。そのような媒体は、揮発性媒体および不揮発性媒体、リムーバブル媒体および固定の媒体の両方を含む、コンピュータ402によってアクセス可能である任意の使用可能な媒体とすることができる。
【0084】
システムメモリ406には、ランダムアクセスメモリ(RAM)410などの揮発性メモリおよび/または読取専用メモリ(ROM)412などの不揮発性メモリの形のコンピュータ可読媒体が含まれる。起動中などにコンピュータ402内の要素の間での情報の転送を助ける基本ルーチンを含む基本入出力システム(BIOS)414が、ROM412に保管される。RAM410には、通常は、処理装置404によって即座にアクセス可能および/または処理装置404によって現在操作されているデータおよび/またはプログラムモジュールが含まれる。
【0085】
コンピュータ402に、他のリムーバブル/固定の、揮発性/不揮発性コンピュータストレージを含めることもできる。たとえば、図4に、固定の不揮発性磁気媒体(図示せず)から読み取り、これに書き込むハードディスクドライブ416、リムーバブル不揮発性磁気ディスク420(たとえば「フロッピ(登録商標)ディスク」)から読み取り、これに書き込む磁気ディスクドライブ418、およびCD−ROM、DVD−ROM、または他の光媒体などのリムーバブル不揮発性光ディスク424から読み取り、かつ/またはこれに書き込む光ディスクドライブ422が含まれる。ハードディスクドライブ416、磁気ディスクドライブ418、および光ディスクドライブ422は、それぞれ、1つまたは複数のデータメディアインターフェース423によってシステムバス408に接続される。その代わりに、ハードディスクドライブ416、磁気ディスクドライブ418、および光ディスクドライブ422を、1つまたは複数のインターフェース(図示せず)によってシステムバス408に接続することができる。
【0086】
ディスクドライブおよびそれに関連するコンピュータ可読媒体は、コンピュータ402のコンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性ストレージを提供する。この例では、ハードディスク416、リムーバブル磁気ディスク420、およびリムーバブル光ディスク424が示されているが、磁気カセットまたは他の磁気記憶装置、フラッシュメモリカード、CD−ROM、デジタル多用途ディスク(DVD)、または他の光ストレージ、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、電気的消去可能プログラマブル読取専用メモリ(EEPROM)、および類似物などのコンピュータによってアクセス可能なデータを保管できる他のタイプのコンピュータ可読媒体を使用して、例示的なコンピューティングシステムおよび環境を実施することもできることを理解されたい。
【0087】
たとえば、オペレーティングシステム426、1つまたは複数のアプリケーションプログラム428、他のプログラムモジュール430、およびプログラムデータ432を含む、任意の個数のプログラムモジュールを、ハードディスク416、磁気ディスク420、光ディスク424、ROM412、および/またはRAM410に保管することができる。オペレーティングシステム426、1つまたは複数のアプリケーションプログラム428、他のプログラムモジュール430、およびプログラムデータ432(またはその組合せ)に、プログラミングフレームワーク132の要素を含めることができる。
【0088】
ユーザは、キーボード434およびポインティング装置436(たとえば「マウス」)などの入力装置を介してコンピュータ402にコマンドおよび情報を入力することができる。他の入力装置438(具体的には図示せず)に、マイクロホン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、シリアルポート、スキャナ、および/または類似物を含めることができる。上記および他の入力装置は、システムバス408に接続された入出力インターフェース440を介して処理装置404に接続されるが、パラレルポート、ゲームポート、またはUSB(Universal Serial Bus)などの他のインターフェースおよびバス構造によって接続することができる。
【0089】
モニタ442または他のタイプの表示装置を、ビデオアダプタ444などのインターフェースを介してシステムバス408に接続することもできる。モニタ442のほかに、他の出力周辺装置に、スピーカ(図示せず)およびプリンタ446など、入出力インターフェース440を介してコンピュータ402に接続できるコンポーネントを含めることができる。
【0090】
コンピュータ402は、リモートコンピューティング装置448などの1つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク化された環境で動作することができる。たとえば、リモートコンピューティング装置448を、パーソナルコンピュータ、ポータブルコンピュータ、サーバ、ルータ、ネットワークコンピュータ、ピアデバイス、または他の一般的なネットワークノード、などとすることができる。リモートコンピューティング装置448は、コンピュータ402に関して本明細書で説明した要素および特徴の多くまたはすべてを含めることができるポータブルコンピュータとして図示されている。
【0091】
コンピュータ402とリモートコンピュータ448の間の論理接続は、ローカルエリアネットワーク(LAN)450および一般的な広域ネットワーク(WAN)452として図示されている。そのようなネットワーキング環境は、オフィス、会社規模のコンピュータネットワーク、イントラネット、およびインターネットでありふれたものである。
【0092】
LANネットワーキング環境において実施されるときに、コンピュータ402は、ネットワークインターフェースまたはネットワークアダプタ454を介してローカルネットワーク450に接続される。WANネットワーキング環境において実施されるときに、コンピュータ402に、通常は、広域ネットワーク452を介する通信を確立する、モデム456または他の手段が含まれる。モデム456は、コンピュータ402の内蔵または外付けとすることができるが、入出力インターフェース440または他の適当な機構を介してシステムバス408に接続することができる。図示のネットワーク接続が、例示的であり、コンピュータ402と448の間の通信リンクを確立する他の手段を使用できることを理解されたい。
【0093】
コンピューティング環境400と共に図示されたものなどのネットワーク化された環境において、コンピュータ402に関して示したプログラムモジュールまたはその一部を、リモートメモリ記憶装置に保管することができる。たとえば、リモートアプリケーションプログラム458が、リモートコンピュータ448の記憶装置に常駐している。例示のために、アプリケーションプログラムおよびオペレーティングシステムなどの他の実行可能なプログラムコンポーネントが、本明細書では別個のブロックに図示されているが、そのようなプログラムおよびコンポーネントが、さまざまなときにコンピューティング装置402の異なるストレージコンポーネントに常駐することができ、コンピュータのデータプロセッサによって実行されることを理解されたい。
【0094】
フレームワーク132、具体的にはAPI142またはAPI142に対して行われる呼出しの実装を、ある形のコンピュータ可読媒体を介して保管または伝送することができる。コンピュータ可読媒体は、コンピュータによってアクセスできる任意の使用可能な媒体とすることができる。制限ではなく例として、コンピュータ可読媒体に、「コンピュータストレージ媒体」および「通信媒体」を含めることができる。「コンピュータストレージ媒体」には、揮発性および不揮発性、取外し可能および取外し不能の、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報のストレージに関する方法またはテクノロジで実施される媒体が含まれる。コンピュータストレージ媒体には、RAM、ROM、EEPROM、フラッシュメモリ、または他のメモリテクノロジ、CD−ROM、デジタル多用途ディスク(DVD)、または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、または他の磁気記憶装置、あるいは、所望の情報を保管するのに使用でき、コンピュータによってアクセスできる他のすべての媒体が含まれるが、これに制限はされない。
【0095】
「通信媒体」によって、通常は、搬送波または他のトランスポート機構などの変調されたデータ信号内でコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータが実施される。通信媒体には、すべての情報配信媒体も含まれる。用語「変調されたデータ信号」は、信号内で情報をエンコードする形で、その特性の1つまたは複数を設定または変更された信号を意味する。制限ではなく例として、通信媒体に、有線ネットワークまたは直接配線接続などの有線媒体と、音響、RF、赤外線、および他の無線媒体などの無線媒体が含まれる。上記のいずれかの組合せも、コンピュータ可読媒体の範囲に含まれる。
【0096】
その代わりに、フレームワークの諸部分を、ハードウェアで、あるいはハードウェア、ソフトウェア、および/またはファームウェアの組合せで実施することができる。たとえば、1つまたは複数の特定用途向け集積回路(ASIC)またはプログラマブルロジックデバイス(PLD)を設計またはプログラムして、本フレームワークの1つまたは複数の部分を実施することができる。
【0097】
プログラミングインターフェース(または単にインターフェース)は、コードの1つまたは複数のセグメントが、コードの1つまたは複数の他のセグメントと通信するかそのセグメントによって提供される機能性にアクセスできるようにする機構、処理、プロトコルとみなすことができる。その代わりに、プログラミングインターフェースを、他のコンポーネントの1つまたは複数の機構、メソッド、関数呼出し、モジュールなどとの通信接続が可能なシステムのコンポーネントの1つまたは複数の機構、メソッド、関数呼出し、モジュール、オブジェクトなどとみなすことができる。前の文の用語「コードのセグメント」は、コードの1つまたは複数の命令または行を含むことが意図されており、これには、使用される用語、コードセグメントが別々にコンパイルされるかどうか、コードセグメントがソースコード、中間コード、またはオブジェクトコードのどれとして提供されるか、コードセグメントがランタイムシステム内またはプロセス内で使用されるかどうか、コードセグメントが同一のマシンまたは異なるマシンに配置されるか、あるいはマシンにまたがって分散されるかどうか、コードのセグメントによって表される機能性が、完全にソフトウェアで、完全にハードウェアで、あるいはハードウェアとソフトウェアの組合せのどれで実施されるかに無関係に、たとえば、コードモジュール、オブジェクト、サブルーチン、関数などが含まれる。
【0098】
概念上、プログラミングインターフェースは、一般的に、図5または図6に示されているように見ることができる。図5に、第1コードセグメントと第2コードセグメントがそれを介して通信する導管としてのインターフェースInterface1を示す。図6に、システムの第1コードセグメントおよび第2コードセグメントが媒体Mを介して通信できるようにする、インターフェースオブジェクトI1およびI2(第1および第2コードセグメントの一部とすることも、そうしないこともできる)を含むものとしてインターフェースを示す。図6に鑑みて、インターフェースオブジェクトI1およびI2を、同一のシステムの別々のインターフェースと考えることができ、オブジェクトI1およびI2と媒体Mにインターフェースが含まれると考えることもできる。図5および7に、両方向のフローおよびフローの両側のインターフェースを示したが、ある実施形態では、一方向の情報フローだけを有する(または、下で示すように情報フローなし)ことができ、あるいは、片側だけにインターフェースオブジェクトを有することができる。制限ではなく例として、アプリケーションプログラミングまたはプログラムインターフェース(API)、エントリポイント、メソッド、関数、サブルーチン、リモートプロシージャコール、およびコンポーネントオブジェクトモデル(COM)インターフェースなどの用語が、プログラミングインターフェースの定義に含まれる。
【0099】
そのようなプログラミングインターフェースの態様に、第1コードセグメントが情報(ここで、「情報」は、その最も広い意味で使用され、「情報」には、データ、コマンド、要求などが含まれる)を第2コードセグメントに送る方法と、第2コードセグメントがその情報を受け取る方法と、情報の構造、シーケンス、構文、編成、スキーマ、タイミング、および内容とを含めることができる。これに関して、基礎になるトランスポート媒体自体は、媒体が有線、無線またはその両方の組合せのどれであれ、インターフェースによって定義される形で情報がトランスポートされる限り、インターフェースの動作に重要でない可能性がある。ある状況では、情報転送が別の機構を介する(たとえば、情報が、コードセグメントの間で流れる情報と別に、バッファ、ファイルなどに置かれる)ので、従来の意味で一方向または両方向に渡されないか、あるコードセグメントが第2コードセグメントによって実行される機能性に単純にアクセスするので情報が存在しない場合がある。 これらの態様のいずれかまたはすべてが、所与の状況で、たとえば、コードセグメントが疎結合された構成または密結合された構成のどちらの一部であるかに応じて、重要になる可能性があり、したがって、このリストは、例示的であり、非限定的とみなされなければならない。
【0100】
プログラミングインターフェースのこの概念は、当業者に既知であり、本発明の前述の詳細な説明から明白である。しかし、プログラミングインターフェースを実施する他の形があり、明示的に除外されない限り、これらも、本明細書に記載の請求項に含まれることが意図されている。そのような他の形は、図5および7の極度に単純化された図よりも洗練されて見える、または複雑に見える可能性があるが、それでも、そのような他の形によって、同一の全体的な結果を達成する類似する機能が実行される。これから、プログラミングインターフェースの例示的な代替実施形態を短く説明する。
【0101】
A.因数分解
あるコードセグメントから別のコードセグメントへの通信は、通信を複数の個別の通信に分解することによって、間接的に達成することができる。これを、図7および9に概略的に示す。図からわかるように、いくつかのインターフェースを、機能性の分割可能なセットとして記述することができる。したがって、数学的に24または2×2×3×2を提供するように、図5および7のインターフェースの機能性を因数分解して、同一の結果を達成することができる。したがって、図7からわかるように、インターフェースInterface1によって提供される機能を再分割して、このインターフェースの通信を複数のインターフェース、Interface1A、Interface1B、Interface1Cなどに変換し、同一の結果を達成することができる。図8からわかるように、インターフェースI1によって提供される機能性を、複数のインターフェースI1a、I1b、I1cなどに再分割し、それと同時に同一の結果を達成することができる。同様に、第1コードセグメントから情報を受け取る第2コードセグメントのインターフェースI2を、複数のインターフェースI2a、I2b、I2cなどに因数分解することができる。因数分解するときに、第1コードセグメントに含まれるインターフェースの数が、第2コードセグメントに含まれるインターフェースの数と一致する必要はない。図7および9のどちらの場合でも、インターフェースInterface1およびI1の機能的趣旨は、それぞれ図5および7と同一のままである。インターフェースの因数分解は、関連するプロパティ、累算的プロパティ、および他の数学的プロパティに従う場合もあり、因数分解の理解が困難な場合がある。たとえば、動作の順序付けは、重要でない場合があり、その結果、あるインターフェースによって実行される機能を、別のコードまたはインターフェースによって、インターフェースに達するよりかなり前に実行することができ、あるいは、システムの別々の構成要素によって実行することができる。さらに、プログラミング技術の当業者は、同一の結果を達成する異なる関数呼出しを行うさまざまな形があることを理解することができる。
【0102】
B.再定義
いくつかの場合に、初期の結果を達成しながら、プログラミングインターフェースのある態様(たとえばパラメータ)を無視し、追加し、または再定義することが可能である場合がある。これを、図9および11に示す。たとえば、図5のインターフェースInterface1に、関数呼出しSquare(input、precision、output)すなわち、3つのパラメータinput、precision、およびoutputを含む呼出しであって、第1コードセグメントから第2コードセグメントに発行される関数呼出しが含まれると仮定する。真ん中のパラメータprecisionが、図9に示されているように、所与のシナリオで関係がない場合に、無視することができ、意味のない(この状況)パラメータと置換することができる。関係のない追加のパラメータを追加することもできる。どちらの場合でも、inputが第2コードセグメントによって二乗された後にoutputが返される限り、square(二乗)の機能性を達成することができる。precision(精度)は、コンピューティングシステムの下流または他の部分に意味のあるパラメータとすることもできるが、二乗計算の狭い目的について精度が必要でないことが理解されたならば、置換するか無視することができる。たとえば、結果に悪影響を及ぼさずに、有効な精度値を渡すのではなく、誕生日などの意味のある値を渡すことができる。同様に、図10に示されているように、インターフェースI1が、インターフェースへのパラメータを無視するか追加するために再定義されたインターフェースI1’に置換される。インターフェースI2は、同様に、不要なパラメータを無視するか、ほかで処理できるパラメータについて再定義されたインターフェースI2’として再定義することができる。ここでのポイントは、いくつかの場合に、プログラミングインターフェースに、パラメータなど、ある目的に不要な態様が含まれる場合があり、したがって、それらを無視するか再定義することができ、あるいは、他の目的のために他の形で処理できるということである。
【0103】
C.インラインコーディング
2つの別々のコードモジュールの機能性の一部またはすべてをマージし、これらの間の「インターフェース」の形を変えることが実行可能である場合もある。たとえば、図5および7の機能性を、それぞれ図11および13の機能性に変換することができる。図11では、図5の前の第1コードセグメントおよび第2コードセグメントが、その両方を含む1つのモジュールにマージされている。この場合に、コードセグメントは、まだ互いに通信することができるが、インターフェースは、単一モジュールにより適する形に適合させることができる。したがって、たとえば、前のCallステートメントおよびReturnステートメントは、もはや不要とすることができるが、インターフェースInterface1に準ずる類似する処理または応答を、まだ有効とすることができる。同様に、図12では、図6のインターフェースI2の一部(またはすべて)を、インターフェースI1にインラインで記述して、インターフェースI1”を形成することができる。図からわかるように、インターフェースI2は、I2aおよびI2bに分割され、インターフェース部分I2aは、インターフェースI1とインラインにコーディングされて、インターフェースI1”を形成する。具体的な例として、図6のインターフェースI1が、関数呼出しsquare(input、output)を実行し、これがインターフェースI2によって受け取られ、インターフェースI2は、第2コードセグメントによるinputを用いて渡された値の処理(二乗)の後に、二乗された結果にoutputを用いて返すことを検討されたい。その場合に、第2コードセグメントによって実行される処理(inputの二乗)を、インターフェースへの呼出しなしで、第1コードセグメントによって実行することができる。
【0104】
D.分離(divorce)
あるコードセグメントから別のコードセグメントへの通信は、通信を複数の個別の通信に分解することによって、間接的に達成することができる。これを、図13および15に示す。図13からわかるように、1または複数のミドルウェア(機能性および/またはインターフェース機能を元のインターフェースから分離するので、分離インターフェース)を設けて、第1インターフェースInterface1の通信を、異なるインターフェース、この例ではインターフェースInterface2A、Interface2B、およびInterface2Cに従うように変換する。たとえば、これは、たとえばInterface1プロトコルに従ってオペレーティングシステムと通信するように設計されたアプリケーションのインストールベースがあるが、そのオペレーティングシステムが、異なるインターフェース、この例ではインターフェースInterface2A、Interface2B、およびInterface2Cを使用するように変更される場合に行うことができる。ポイントは、第2コードセグメントによって使用された元のインターフェースが、もはや第1コードセグメントによって使用されるインターフェースと互換でなくなるように変更され、したがって、古いインターフェースと新しいインターフェースとに互換性を持たせるため、仲介物が使用されることである。同様に、図14からわかるように、インターフェースI1からの通信を受け取る分離インターフェースDI1を有し、インターフェース機能性を、たとえば、DI2と共に働くが同一の機能的結果を提供するように再設計されているインターフェースI2aおよびI2bに送る、分離インターフェースDI2を有する第3コードセグメントを導入することができる。同様に、DI1およびDI2は、同一のまたは類似する機能的結果を提供しながら、図6のインターフェースI1およびI2の機能性を変換するように一緒に働くことができる。
【0105】
E.再記述
もう1つの可能な変形形態が、コードを動的に再記述して、インターフェース機能性を、同一の総合的な結果を達成する別のものに置換することである。たとえば、中間言語(たとえば、Microsoft(登録商標) IL、Java(登録商標) ByteCodeなど)で提示されるコードセグメントを、実行環境(.NET framework(登録商標)、Java(登録商標)ランタイム環境、または類似するランタイムタイプ環境によって提供されるものなど)内のジャストインタイム(JIT)コンパイラまたはインタープリタに供給するシステムがある。JITコンパイラは、第1コードセグメントから第2コードセグメントへの通信を動的に変換する、すなわち、それらを、第2コードセグメント(元のまたは異なる第2コードセグメント)が必要とする可能性がある異なるインターフェースに合わせることができる。これを、図15および17に示す。図15からわかるように、この手法は、上で説明した分離シナリオに似ている。これは、たとえば、アプリケーションのインストールベースが、Interface1プロトコルに従ってオペレーティングシステムと通信するように設計されているが、オペレーティングシステムが、異なるインターフェースを使用するように変更される場合に行うことができる。 JITコンパイラを使用して、通信を、オンザフライでインストールベースアプリケーションからオペレーティングシステムの新しいインターフェースに合わせることができる。 図16からわかるように、インターフェースを動的に再記述するこの手法は、動的因数分解、または他の形のインターフェースの変更にも適用することができる。
【0106】
代替実施形態を介してインターフェースとして同一のまたは類似する結果を達成する、上で説明したシナリオを、さまざまな形で、順次および/または並列で、または他の介在コードと共に、組みわせることもできることにも留意されたい。したがって、上で提示した代替実施形態は、相互に排他的ではなく、混合され、マッチングされ、かつ組み合わされて、図5および7で提示された一般的なシナリオと同一のまたは同等のシナリオを作ることができる。また、ほとんどのプログラミング構造と同様に、本明細書に記載されていないが、それでも本発明の趣旨および範囲によって表されるインターフェースの同一のまたは類似する機能性を達成する他の類似する形があることに留意されたい、すなわち、インターフェースの価値の基礎になるのは、少なくとも部分的に、インターフェースによって表される機能性と、インターフェースによって使用可能にされる有益な結果である。
【0107】
(結論)
本発明を、構造的特徴および/または方法論的動作に固有の言葉で説明したが、請求項で定義される本発明は、説明した特定の特徴または動作に必ずしも制限されないことを理解されたい。そうではなく、特定の特徴および動作は、請求される発明を実施する例示的な形として開示されたものである。
【符号の説明】
【0108】
100 ネットワーク環境
104 ネットワーク
106,112,114,122〜129 通信リンク
132 プログラミングフレームワーク
142 APIレイヤ
372 名前空間
400 コンピューティング環境
416 ハードディスクドライブ
418 磁気ディスクドライブ
422 光ディスクドライブ
420 リムーバブル不揮発性磁気ディスク
424 リムーバブル不揮発性光ディスク
438 入力装置
【特許請求の範囲】
【請求項1】
コンピュータに、複数のグラフィカルオブジェクトを含むユーザインターフェースを生成させるためのプログラムであって、
グラフィカルオブジェクトの外見および挙動を定義する型情報を含むリソースにアクセスして、グラフィカルオブジェクトを生成するステップと、
前記グラフィカルオブジェクトが有するアドレス可能コンポーネントを操作することにより、前記グラフィカルオブジェクトの外見および挙動をカスタマイズして、前記グラフィカルオブジェクトのスタイルおよび/またはテーマを特定のスタイルおよび/またはテーマに合わせる、ステップと、
幾何学的形状の外見および挙動を定義する型情報を含むリソースにアクセスして、前記ユーザインターフェースに幾何学的形状を描くステップと
を含み、前記グラフィカルオブジェクトは、複数のグラフィカルオブジェクトからなるグラフィカルオブジェクトを含むことを特徴とするプログラム。
【請求項2】
前記生成されたグラフィカルオブジェクトおよび前記描かれた幾何学的形状は、共通のマークアップ言語で記述されることを特徴とする請求項1に記載のプログラム。
【請求項3】
前記生成されたグラフィカルオブジェクトおよび前記描かれた幾何学的形状は、共通のイベントを有することを特徴とする請求項1に記載のプログラム。
【請求項4】
前記生成されたグラフィカルオブジェクトおよび前記描かれた幾何学的形状は、外見または挙動を定義する共通のプロパティを有することを特徴とする請求項1に記載のプログラム。
【請求項5】
グラフィカルオブジェクト内に幾何学的形状を描くこと、または幾何学的形状内にグラフィカルオブジェクトを生成することを特徴とする請求項1に記載のプログラム。
【請求項6】
前記グラフィカルオブジェクトの型情報は、前記グラフィカルオブジェクトの配置を定義することを特徴とする請求項1に記載のプログラム。
【請求項1】
コンピュータに、複数のグラフィカルオブジェクトを含むユーザインターフェースを生成させるためのプログラムであって、
グラフィカルオブジェクトの外見および挙動を定義する型情報を含むリソースにアクセスして、グラフィカルオブジェクトを生成するステップと、
前記グラフィカルオブジェクトが有するアドレス可能コンポーネントを操作することにより、前記グラフィカルオブジェクトの外見および挙動をカスタマイズして、前記グラフィカルオブジェクトのスタイルおよび/またはテーマを特定のスタイルおよび/またはテーマに合わせる、ステップと、
幾何学的形状の外見および挙動を定義する型情報を含むリソースにアクセスして、前記ユーザインターフェースに幾何学的形状を描くステップと
を含み、前記グラフィカルオブジェクトは、複数のグラフィカルオブジェクトからなるグラフィカルオブジェクトを含むことを特徴とするプログラム。
【請求項2】
前記生成されたグラフィカルオブジェクトおよび前記描かれた幾何学的形状は、共通のマークアップ言語で記述されることを特徴とする請求項1に記載のプログラム。
【請求項3】
前記生成されたグラフィカルオブジェクトおよび前記描かれた幾何学的形状は、共通のイベントを有することを特徴とする請求項1に記載のプログラム。
【請求項4】
前記生成されたグラフィカルオブジェクトおよび前記描かれた幾何学的形状は、外見または挙動を定義する共通のプロパティを有することを特徴とする請求項1に記載のプログラム。
【請求項5】
グラフィカルオブジェクト内に幾何学的形状を描くこと、または幾何学的形状内にグラフィカルオブジェクトを生成することを特徴とする請求項1に記載のプログラム。
【請求項6】
前記グラフィカルオブジェクトの型情報は、前記グラフィカルオブジェクトの配置を定義することを特徴とする請求項1に記載のプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【公開番号】特開2012−84165(P2012−84165A)
【公開日】平成24年4月26日(2012.4.26)
【国際特許分類】
【出願番号】特願2011−263823(P2011−263823)
【出願日】平成23年12月1日(2011.12.1)
【分割の表示】特願2004−264629(P2004−264629)の分割
【原出願日】平成16年9月10日(2004.9.10)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】
【公開日】平成24年4月26日(2012.4.26)
【国際特許分類】
【出願日】平成23年12月1日(2011.12.1)
【分割の表示】特願2004−264629(P2004−264629)の分割
【原出願日】平成16年9月10日(2004.9.10)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】
[ Back to top ]