JP5189986B2 - オブジェクト合成に対する拡張可能メカニズム - Google Patents

オブジェクト合成に対する拡張可能メカニズム Download PDF

Info

Publication number
JP5189986B2
JP5189986B2 JP2008534547A JP2008534547A JP5189986B2 JP 5189986 B2 JP5189986 B2 JP 5189986B2 JP 2008534547 A JP2008534547 A JP 2008534547A JP 2008534547 A JP2008534547 A JP 2008534547A JP 5189986 B2 JP5189986 B2 JP 5189986B2
Authority
JP
Japan
Prior art keywords
target object
context
application
strategy
strategies
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2008534547A
Other languages
English (en)
Other versions
JP2009512014A (ja
Inventor
エー.イェジエルスキ エドゥアルド
ジー.プロヴォー ピーター
ジェイ.ウィルソン ブラッドリー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2009512014A publication Critical patent/JP2009512014A/ja
Application granted granted Critical
Publication of JP5189986B2 publication Critical patent/JP5189986B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Description

この発明は、オブジェクト合成に対する拡張可能メカニズムに関する。
コンピューティング技術の進歩によりコンピュータは、基本的な数学的計算に利用可能な高コストで低機能性の装置から、ワードプロセッシング、友人間および家族間の即時通信、支払い、エンターテイメント、等に利用可能な低コストで高機能性の装置へと変化することができた。この機能性における急激な変化を相対的に短期間で可能とするため、トランジスタのサイズが大幅に縮小され、それにより(単一の集積回路上に配置可能な相当数のトランジスタのため)集積回路に大量のメモリ、高速な処理速度を与えることが可能となった。これらの進歩により、コンピュータプログラマが使用してアプリケーションを生成および/または既存アプリケーションを改善するための、より堅牢で柔軟なプログラミング環境が作成された。より詳細には、今日では複数のプログラミング言語が存在し、プログラマは選択した言語に関連する熟知度および/または機能性に基づいて特定の言語を選択することができる。
より詳細には、プログラミング言語は、特に命令をコンピュータまたはマイクロプロセッサに伝達してタスクを実行するために使用される形式言語である。長年の間、オブジェクト指向プログラミングが、設計者およびプログラマがコンピュータシステム内部の機能性の実装に利用する多数の良く知られた有名なモデルの1つとなっている。オブジェクト指向プログラミングは、他のプログラミング言語と比べて独特である。なぜならば、オブジェクト指向プログラミングは他のモデルのようにアクションではなく、オブジェクトまたは物の観点からプログラミングを見ることを前提とするからである。
オブジェクト技術の利点は3つの基本的原理、即ちカプセル化、多相性および継承から生じる。オブジェクトは、そのデータおよび関連方法の内部構造を隠蔽またはカプセル化する。実装の詳細を公開する代わりに、オブジェクトはインタフェースを提示し、余分な情報無しにその抽象化を綺麗に表現する。多相性は、カプセル化を1段階さらに勧める。多相性により、同じコードを異なるデータ型に対して使用すること、即ち多数の形態を1つのインタフェースで表すというアイデアが可能となる。従って、ソフトウェアコンポーネントは、別のコンポーネントを、そのコンポーネントが何であるかを正確に知らずに要求することができる。要求を受信したコンポーネントはその要求を解釈して、その変数およびデータに従って前記要求の実行方法を見つけ出す。第3の原理は継承であり、継承により開発者は既存の設計およびコードを再利用することができる。この能力により、開発者はスクラッチから全てのソフトウェアを生成することを回避することができる。寧ろ、継承を通して、開発者は他のクラスの状態および反応の両方を継承および修正するサブクラスを導出することができる。
オブジェクト指向プログラミングモデルは、クラスベースのアプローチを通して定義されることがよくある。本システムでは、オブジェクトは状態と反応の両方を含むエンティティである。オブジェクトの状態と反応の両方はクラスにより定義され、クラスは特定の型のオブジェクトを識別する。クラス定義に基づいて生成されたオブジェクトは、動的な型で反映されたクラスのインスタンスと見なされる。従って、クラスは、オブジェクトが含みうるデータ(例えば、状態)、および前記オブジェクトが実施可能な方法、関数、または反応を指定する。方法は、関連オブジェクトの内部状態を、その中に含まれるデータを変更することで修正するように動作する。オブジェクト内のデータおよび方法の組み合わせは、オブジェクト指向プログラミングではカプセル化と称されることがよくある。カプセル化は、オブジェクトに関連付けた良く定義された方法によってのみ変更されるオブジェクトの状態を与える。オブジェクトの反応は上記の良く定義されたロケーションおよびインタフェースに制限するとき、オブジェクト内の変更(例えば、コードの修正)がシステム内の他のオブジェクトおよび要素に対して及ぼす影響は最小である。
オブジェクト指向プログラミングに関する現在の欠点は、既存のオブジェクト、アプリケーションコンテキスト、等に基づいて新規のオブジェクトを自動的に生成することが困難であること、および既存のオブジェクトの修正(例えば、既存オブジェクト間の関係の修正)がさらに困難であることである。それどころか、熟練プログラマは複数の追加オブジェクトを生成しなければならず、この場合、それぞれのオブジェクトは別々のコンテキストに利用される。オブジェクト指向プログラミングの既存のフレームワークでは、カスタマイズした戦略をオブジェクトの合成に関連して実装することができない。
以下で簡単な要約を与え、クレーム主題のいくつかの態様の基本的な理解を与える。本要約は広範的な概要ではなく、本要約はクレーム主題の主要な要素/本質的な要素を特定すること、またはクレーム主題の範囲を表すことは意図していない。本要約の唯一の目的は、本発明のいくつかの簡略化された概念を、後述するより詳細な説明に対する前置きとして提示することである。
本明細書で説明するものは、アプリケーションに関連付けた1つまたは複数のオブジェクトを合成することに関連して使用しうる拡張可能なフレームワークであり、オブジェクトは、オブジェクト指向プログラミングに従う。従来のフレームワークとは対照的に、以下で説明する主張したフレームワークにより、様々な合成戦略をユーザが生成および実装することができる。本明細書で使用する合成という用語は、新規オブジェクトの生成、新規オブジェクトに関連する関係の定義、既存オブジェクトに関連する関係の定義、等を指す。オブジェクトの合成はいくつかの具体的な例を含むことができ、その例としては、適切なオブジェクトイニシャライザを起動することで新規のオブジェクトインスタンスをメモリ内に生成すること、オブジェクトと他の新規または既存のオブジェクトとの間の関係を確立すること、内部オブジェクト状態を修正することまたは内部状態に対して方法を起動すること、等がある。合成は、概念的にはターゲットオブジェクトとコンテキストを含み、コンテキストとはアプリケーション内の既存エンティティを表すために利用する用語である。例えば、これらのエンティティは、既存のオブジェクトインスタンス、ポリシーおよび型定義、アプリケーション構成、等を含むことができる。コンテキストに基づいて、様々な戦略を実装して特に1つまたは複数のオブジェクトを合成することができる。
より詳細には、合成戦略は或る特定の合成スタイルまたは合成部分に関与することができる。合成戦略は(合成戦略がそのタスクを完了できるようにするため)、上記戦略の実行の前、最中、または後に、異なる合成戦略または一連の別々の合成戦略の実行に依存してもよい。従って、合成戦略の反応はその実装によってのみ定義されることが理解できる。さらに、合成戦略は、外部エンティティがその反応を(一時的または永続的に)、プログラム的、宣言的、または構成ベースの手段により与えうる1つまたは複数のポリシーを通して修正可能とすることができる(が、そのように要求はされない)。これらの合成戦略を1つまたは複数のプログラマにより生成し、アプリケーションに実行時に適用することができる。この場合、決定したコンテキストに基づいて合成戦略を実行する。さらに、決定したコンテキストに基づいて合成戦略を特定の順序で実行することができる。例えば、段階に分類した一連の逐次的な合成戦略として合成戦略を実行することができ、従って複数の戦略が同一のオブジェクトおよびコンテキストに作用することができる。さらに、コンテキストおよびアプリケーションが必要とする場合、戦略を並行に実行することができる。
特定の例では、アプリケーションを展開することができ、アプリケーションはオブジェクト指向プログラミングにより書かれる。アプリケーションを書いた後、特定のオブジェクトを上記アプリケーション内部で合成することが望ましいであろう。従って、合成戦略を上記合成に関連して生成することができる。この場合、合成戦略はアプリケーションまたはコンテキストに影響しない。アプリケーションの実行時に、合成戦略および決定したコンテキストに従って合成戦略を実行し、オブジェクトを合成することができる。
前述および関連する目標を達成するため、或る例示的な態様を以下の説明および添付図面に関連して説明する。しかしながら、これらの態様はクレーム主題の原理を使用可能な少数の様々な方法を示すに過ぎず、クレーム主題は全ての上記態様およびそれらの等価物を含むよう意図している。他の利点および新規特徴は、図面と関連して考慮すると、以下の詳細な説明から明らかであろう。
図面を参照してクレーム主題を説明する。図面を通して、同様な参照番号を用いて同様な要素を指す。説明の目的のため、以下の記述では多数の具体的な詳細を説明してクレーム主題の徹底的な理解を与える。しかしながら、クレーム主題をこれらの具体的な詳細なしに実践できることは明らかであろう。他の事例では、公知の構造および装置をブロック図の形で示して、本発明の説明を容易にする。
本出願で使用する際、用語「コンポーネント」および「システム」は、コンピュータ関連の実体を指すよう意図している。コンピュータ関連の実体は、ハードウェア、ハードウェアおよびソフトウェアの組み合わせ、ソフトウェア、または実行中のソフトウェアのいずれかである。例えば、コンポーネントは、プロセッサ上で実行中のプロセス、プロセッサ、オブジェクト、実行可能ファイル、実行スレッド、プログラム、およびコンピュータであることができるがこれらに限らない。例示として、サーバ上で実行中のアプリケーションおよびサーバの両方はコンポーネントであることができる。1つまたは複数のコンポーネントは、プロセスおよび/または実行スレッド内に存在すること、コンポーネントを或るコンピュータ上に局所化すること、および/またはコンポーネントを2つ以上のコンピュータ間で分散させることができる。「例示的な」という単語は、本明細書では、例、事例、または実例を意味するよう用いる。「例示的」として本明細書で説明する任意の態様または設計は、他の態様または設計に対して好適または有利であるとは必ずしも解釈されない。
さらに、クレーム主題の態様を、コンピュータを制御するソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せを製造するための標準的なプログラミングおよび/またはエンジニアリング技術を用いた方法、装置、または製品として実装して、本発明の様々な態様を実装することができる。本明細書で用いる「製品」という用語は、任意のコンピュータ読取可能装置、キャリア、または媒体からアクセス可能なコンピュータプログラムを含むよう意図している。例えば、コンピュータ読取可能媒体は磁気記憶装置(例えば、ハードディスク、フロッピー(登録商標)ディスク、磁気ストリップ...)、光ディスク(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)...)、スマートカード、およびフラッシュメモリ装置(例えば、カード、スティック、キードライブ...)を含むことができるがこれらに限らない。さらに、搬送波を使用して、電子メールの送受信あるいはインターネットまたはローカルエリアネットワーク(LAN)のようなネットワークのアクセスで用いられるようなコンピュータ読取可能な電子データを運搬できることは当然理解されるであろう。勿論、当業界の技術者は、本発明で説明したものの範囲または精神から逸脱することなく多数の修正を本構成に加えうることを理解するであろう。
図面を参照してクレーム主題を説明する。図面を通して、同様な番号は同様な要素を表す。図1を参照する。拡張可能なオブジェクト合成システム100を示してある。オブジェクトの合成は概念的には、ターゲットオブジェクトに対して、前記ターゲットオブジェクトに関連するコンテキストに少なくとも部分的に基づいて作用することを含む。コンテキストを特定のアプリケーション内の既存エンティティおよび上記エンティティ間の関係として定義することができ、ターゲットオブジェクトを上記コンテキスト内で合成されているオブジェクトとして定義することができる。本明細書で用いる合成は、オブジェクト(例えば、ターゲットオブジェクト)の生成、および上記オブジェクトに関する関係の生成、既存オブジェクト(ターゲットオブジェクト)の受信、および既存オブジェクトと他のオブジェクトとの間の関係の生成、ターゲットオブジェクトに関連する既存関係の削除、ターゲットオブジェクトに関連する関係の変更、等を含むことができる。ターゲットオブジェクトに関する合成を、1つまたは複数のカスタマイズした合成戦略の利用を通して行うことができる。この場合、合成戦略の実装に関連するフレームワークにより、新規の合成戦略を追加することおよび上記戦略の使用を定義することが可能である。
さらにより詳細には、システム100には受信コンポーネント102が含まれる。受信コンポーネント102は、カスタマイズした合成戦略を受信し、合成戦略をユーザ、プログラムから受信し、メモリ、ハードディスク、または任意の他の適切なロケーションから受信することができる。カスタマイズした合成戦略は、受信コンポーネント102により受信したいくつかの戦略の1つであることができ、オブジェクトを合成することに関連して行うことが可能な任意の適切なアクションを含むことができる。例えば、カスタマイズした合成戦略は特に、適切なオブジェクトイニシャライザを起動することでメモリ内に新規オブジェクトインスタンスを生成すること、オブジェクトと特定のコンテキスト内部における他の新規または既存オブジェクトとの間の関係を確立すること、内部オブジェクト状態を修正すること、オブジェクト上で方法を起動すること、ターゲットオブジェクト自体に作用せずにコンテキスト内部の他のオブジェクトに作用すること、に関連することができる。カスタマイズした合成戦略に関連しうるこのアクションリストは本質的に例であって限定的ではないことは当然理解されるはずである。受信した合成戦略は或る特定の合成スタイルに関与することができ、カスタマイズした合成戦略の前、カスタマイズした合成戦略の後、および/またはカスタマイズした合成戦略の最中に実行される他の関連合成戦略に依存して、受信したカスタマイズされた合成戦略の正確な実行を可能とすることができる。従って、合成戦略の反応を実装によってのみ決定することができ、合成戦略の反応により外部エンティティはその反応をポリシーとして一時的または永続的に変更することができる(が、そのように要求はされない)。これらポリシーを、プログラム的、宣言的、または構成ベースの手段により与えることができる。
カスタマイズした合成戦略は、受信コンポーネント102から実装コンポーネント104に中継させることができ、実装コンポーネント104は、上記合成戦略を、オブジェクト106を合成することに関連して利用する。例えば、実装コンポーネント104は、実行時にアプリケーションにより呼び出されることができ、アプリケーションは特定のカスタマイズされた合成戦略を要求し、それに関連するデフォルトのポリシーを指定することができる。受信コンポーネント102は、その後、上記の合成戦略を受け取ることができる。(上述の)コンテキストを次いで確認し、実装コンポーネント104に与えることができる。この場合、コンテキストにはアプリケーション内の一連のエンティティ、例えば既存のオブジェクトインスタンス、ポリシーおよび型定義、アプリケーション構成、等が含まれる。コンテキストおよびアプリケーション呼び出しに少なくとも部分的に基づいて、実装コンポーネント104は、オブジェクト106を合成することができる。従って、システム100は、合成に関する拡張性を可能とすることが分かる。なぜならば、合成の実装に利用する合成戦略を、消費アプリケーションまたは他の合成戦略に対する変更を必要とせずに、独立に構築および利用できるからである。換言すれば、特定のコンテキスト内部にいくつかのルールが存在し、上記ルールオブジェクトを利用することを1回の呼び出しで生成および紐付けることができる。この場合、ルールは拡張可能かつポリシーにより決定されている。システム100に類似したものとしてはファクトリラインがある。この場合、システム100は、ユーザの意思でラインに追加の部分を与えることができる。これらの部分(戦略)を次いで実行時にアプリケーションにより消費および使用することができ、この場合、アプリケーションに関連するコンテキストは、使用すべき合成戦略、使用すべきポリシー、合成戦略の順序、等を決定することができる。
システム100の利点を示すさらにより詳細な例では、アプリケーションに関連するいくつかのオブジェクトを十分に同様に紐付けることが望ましいであろう。この場合、上記の紐付けはカスタマイズされることが望ましい。静的なシステムと対照的に、システム100により、1つまたは複数のカスタマイズされた合成戦略を生成すること、およびアプリケーションの変更または他の合成戦略の変更を必要とせずに上記の合成戦略を実装することが可能である。より詳細には、個人は、アプリケーションに関連するいくつかのオブジェクトに関して前記の紐付けが完全であることを望むであろう。従来のシステムでは、合成戦略がシステムに与えられないならば、それぞれのオブジェクトに対して紐付けを手動で行う必要があるであろう。しかしながら、システム100により、所望の紐付けを実施し、(コンテキストにより決定可能な)適切なオブジェクト上での紐付けを自動的に実施するカスタマイズされた戦略を与えることができる。例えば、適切なカスタマイズされた戦略を、プログラマにより生成し、アプリケーションの実行時に受信コンポーネント102に与え、次いでコンテキストに基づいて実装コンポーネント104により実装することができる。
図2を参照し、拡張可能フレームワークを通して与えた合成戦略によりオブジェクト合成を促進するシステム200を示す。システム200には、受信コンポーネント102が含まれる。受信コンポーネント102は、複数のカスタマイズされた合成戦略を受け取り、この場合、上記合成戦略は、少なくともターゲットオブジェクト106を合成することに関する。上述のように、合成は様々な特定のアクションに関することができ、メモリ内にオブジェクトインスタンスを生成すること、オブジェクト間の関係を確立すること、内部オブジェクトの状態を修正すること、コンテキスト内の様々なオブジェクトに作用すること、等が含まれる。受信コンポーネント102をポリシーコンポーネント202に関連付けることができ、ポリシーコンポーネント202は、複数のカスタマイズされた合成戦略の各々に関してポリシーを定義および実装する。例えば、ポリシーは、永続的または一時的であることができる。永続的なポリシーは、複数の合成実行の間で一定のままであり、一時的なポリシーは、システム200の単一の実行に対してのみ存在する。ポリシーコンポーネント202によりアプリケーションは、必要な合成戦略を指定し、デフォルトのポリシーを指定することができる。さらに、ポリシーコンポーネント202は、プログラム的、宣言的、または構成ベースの命令に少なくとも部分的に基づいて、カスタマイズされた合成戦略に関してポリシーを定義することができる。さらに、一時的なポリシーを使用して、カスタマイズされた合成戦略に特に関連付けたポリシーを上書きすること、または拡張することのいずれかが可能である。さらに、ポリシーコンポーネント202は、ターゲットオブジェクト106に関連する呼び出し間の戦略に関連付けたポリシーを変更することができる。この柔軟性は、従来のシステムでは実現不可能である。
受信コンポーネント102を順序付けコンポーネント204とさらに関連付けることができ、順序付けコンポーネント204は、複数のカスタマイズされた合成戦略の実装順序を記述する。さらに、順序付けコンポーネント204をコンテキストコンポーネント206と関連付けることができ、コンテキストコンポーネント206は順序付けコンポーネント204に、オブジェクト106に関連するコンテキストを与える。上述のように、コンテキストは、既存のオブジェクトインスタンス、ポリシーおよび型定義、アプリケーション構成等のようなターゲットオブジェクト106を含むアプリケーション内のエンティティを含むことができる。さらに、既存のオブジェクトインスタンスは、ローカルまたはリモートであることができ、この場合、用語「リモート」は別のコンピュータ、ネットワーク、プロセス、等におけるオブジェクトを示す。コンテキストコンポーネント206は、コンテキストを決定し、それを順序付けコンポーネント204に与えることができ、ターゲットオブジェクト106の構成を達成するため、順序付けコンポーネント204は、コンテキストを利用して合成戦略の適用順序を決定することが採用される。順序付けコンポーネント204は、順序に関連する宣言的またはプログラム的な文を受信することもできる。さらに、順序付けコンポーネント204は、望むならば合成戦略を並行に動作させることができる。
合成戦略の決定したコンテキストおよび順序を次いで実装コンポーネント104に与えることができる。実装コンポーネント104は、アプリケーションの実行時に戦略を特定の順序で実行させることができる。従って、柔軟かつ堅牢なオブジェクト合成システムが上記図面で説明したコンポーネントを通して可能となると決定することができる。
図3を参照し、ターゲットオブジェクト106を合成することに関連して上述した1つまたは複数の態様を利用する例示的システム300を示してある。システム300には受信コンポーネント102が含まれ、受信コンポーネント102は、1つまたは複数のカスタマイズされた合成戦略を受け取る。例示的システム300では、受信コンポーネント102が受信した合成戦略はターゲットオブジェクト106を構築することに関連することができる。受信コンポーネント102を実装コンポーネント104に関連付け、実装コンポーネント104は、ターゲットオブジェクト106に関連して受信した戦略を実装することができる。実装コンポーネント104は、オブジェクトビルダコンポーネント302を含むこと、および/またはオブジェクトビルダコンポーネント302と関連付けることができ、オブジェクトビルダコンポーネント302は、コード304をプログラマおよびクラス定義306から受信することができる。コード304と定義306を与えると、受信した戦略に従ってターゲットオブジェクト106をオブジェクトビルダコンポーネント302により構築することができる。上記の合成戦略の使用により、オブジェクト指向プログラマは、従来のフレームワークと比較して大幅に効率的な方法で、高度に複雑かつ困難なタスクを完了することができる。
システム300は、さらにポリシーインターロゲータコンポーネント308を含むことができ、ポリシーインターロゲータコンポーネント308はユーザ定義のポリシーを受信および問い合わせることができる。例えば、ポリシーは戦略を1回使用するかまたはいくつかのインスタンスに対して使用するかを指定することができる。実装コンポーネント104は、さらにターゲットオブジェクト106に関連付けたコンテキストを定義および/または受信することができ、ここで、コンテキストは既存のオブジェクトインスタンス、ポリシーおよび型定義、アプリケーション構成、等のようなアプリケーション内の一連のエンティティを示す。システム300は、実際の合成作業を1つまたは複数の合成戦略に委譲することにより複数の合成スタイルおよび要件を可能とする。例えば、それぞれの戦略は特定の合成スタイルに関与することができる。受信した戦略により、外部エンティティはその反応をポリシーとして変更することができる。この場合、ポリシーをプログラム的、宣言的、または構成ベースの手段により与えることができる。ポリシーインターロゲータコンポーネント308は、上記ポリシーを問い合わせて、上記ポリシーが永続的なポリシーおよび/または一時的なポリシーであるかどうかを決定することができる。永続的なポリシーは、複数の合成実行の間で一定のままであり、一時的なポリシーはビルダの単一の実行に対してのみ存在する。一時的なポリシーは、合成戦略に与えたポリシーを上書きまたは拡張することができる。
システム300により実装された合成戦略を拡張することができ、この場合、拡張を独立に構築および使用することができる。さらに、拡張は独立または相互依存であることができる。システム300の特定の例示的な使用では、ファクトリパターン、ビルダ、および責任の連鎖が良く理解され、既存の依存性注入コンテナおよびプロキシファクトリで示した合成問題を解決するために適用されている。システム300は、合成の生じ方における拡張性を可能とする。なぜならば、消費アプリケーションまたは他の戦略の変更を必要とせずに、合成を実装する戦略を独立に構築および使用できるからである。
特別な例では、システム300を.NETのイベントに対してサポートすることができ、それによりクラスの作成者はイベントのトピックを指定するイベントをパブリッシャ属性で修飾することができる。別のクラスの作成者は、イベントハンドラを、同一のトピックを指定するサブスクライバ属性で修飾することができる。実行時に、本明細書で説明したフレームワークを使用して、呼び出しコードからの干渉を受けずにこれらクラスのインスタンスを生成および紐付けることができる。換言すれば、オブジェクトビルダコンポーネント302がクラスのインスタンスを生成および紐付けることができる。例えば、

public class PublisherClass
{
[EventPublisher(“MyTopic”)]
public event EventHandler MyTopicEvent;

//イベントを発生させる事を行う。
}

public class SubscriberClass
{
[EventSubscriber(“MyTopic”)]
public void HandleMyTopicEvent(object sender, EventArgs e)
{
//イベントを処理
}
}
上記は、オブジェクト生成時に、システム300により利用され、イベントのハンドラへの紐付けを実施可能な例示的戦略を示す。
別の例では、定義306は以下のC#のクラス定義を含むことができる。

public class ParentClass
{
public ChildClass child;
public ParentClass(ChildClass child)
{
this.child = child;
}
public ChildClass Child
{
get{ return child;}
}
}
public class ChildClass
{
}
受信した戦略を使用してクラスを与えることができ、前記クラスにより以下の例示的コード304は、ChildClassのインスタンスで埋めたParentClassの新規インスタンスを自動的に生成することができる。
より詳細には、以下のテストケースは、ObjectBuilderContainerと称するクラスを利用した上述の新規インスタンスの生成を示し、ObjectBuilderContainerはクレーム主題の実装を与える。前記の実装に、単純なコンストラクタベースの依存性注入を与える一連の戦略を与えることができる。

[Test]
public void ConstructorDependencyInjectionTest()
{
ObjectBuilder builder = new ObjectBuilder();
ParentClass parent = builder.Build<ParentClass>();
Assert.IsNotNull(parent.Child);
}
この例を拡張すると、上記コード(ビルディングコード)を、更なる戦略を追加することで拡張することができ、前記戦略は反映を使用して、属性付き方法を発見し、その方法を実行する。

public class SomeClass
{
Public bool MethodInvoked = false;
[InvokeMethod]
Public void DoSomething()
{
MethodInvoked = true;
}
}

[Test]
public void MethodInvocationStrategyTest()
{
ObjectBuilder builder = new ObjectBuilder();
Builder.AddStrategy(new MethodInvocationStrategy());

SomeClass result = builder.Build<SomeClass>();

Assert.IsTrue(result.MethodInvoked);
}
上記ビルダの使用前に戦略をビルダに追加することによりビルダの反応を迅速かつ容易に修正したことが分かる。
前述の例から、システム300は、戦略を実装してタスクを実施できることを決定することができる。前記タスクには例えば、コンストラクタ依存性注入、セッタ注入、コンテナへの登録および格納、コンテナからの検索、型マッピング、属性の反映、プロキシの返却、および他の適切なタスクがある。上で示した単純な戦略に加え、いくつかの戦略は構成すべきポリシーを使用することができる。例えば、特定のインスタンスにおけるユーザはポリシーを使用していくつかの戦略を構成することができる。例えば、ユーザは特定のプロパティにセッタ導入を実施したいかもしれない。この場合、ユーザは(ポリシーインターロゲータコンポーネント308により分析される)ポリシーを与え、戦略を実装コンポーネント104によりどのように実装すべきかを示すことができる。例えば、

public class Person
{
private string name;

public string Name
{
get{ return name;}
set{ name = value;}
}
}

[Test]
public void PropertyPolicyTest()
{
ObjectBuilder builder = new ObjectBuilder();
builder.AddStrategy(new PropertySetterStrategy());
builder.AddStrategy(new PropertyPolicy(“Name”,”John Doe”));

Person result = builder.Build<Person>();

Assert.AreEqual(“John Doe”, result.Name);
}
このポリシーは、ビルダの全ての実行に対して、「Name」という名前の文字列プロパティを有するクラスが「John Doe」に設定されるという点で、永続的なポリシーである。しかしながら、システム300(および本明細書で説明した他のシステム)はビルダの単一の実行に対して利用されるポリシーをサポートできることが分かる。例えば、

[Test]
public void TransientPolicyTest()
{
ObjectBuilder builder = new ObjectBuilder();
builder.AddStrategy(new PropertySetterStrategy());

PropertyPolicy johnPolicy = new PropertyPolicy(“Name”,”John Doe”);
Person john = builder.Build<person>(johnPolicy);
PropertyPolicy samPolicy = new PropertyPolicy(“Name”,”Sam Smith”);
Person sam = builder.Build<person>(samPolicy);

Assert.AreEqual(“John Doe”, john.Name);
Assert.AreEqual(“Sam Smith”, sam.Name);
}
図4を参照し、オブジェクト指向プログラミングで生ずる共通パターンの集約およびカプセル化を促進するシステム400を示してある。システム400には、戦略を受信する受信コンポーネント102と、上記戦略をアプリケーションの実行時に実装する実装コンポーネント104とが含まれる。システム400の1つの利用において、戦略は、コンストラクタ依存性注入に関連することができ、コンストラクタ依存性注入は、クラスのコンストラクタの要求を実行時に発見すること、これらの要求を解決して、抽出または生成する必要があるオブジェクトを決定すること、およびオブジェクト自身の生成時にそれらをオブジェクトのコンストラクタに渡すことに関連付けられる。オブジェクト指向プログラミングにおけるコンストラクタは、オブジェクトの新規インスタンスの生成に利用される方法であり、特定のパラメータを要求することができる。コンストラクタ依存性注入の意図は、コンストラクタが必要とする方法を推論でき、その結果、クラスを消費する開発者が上記方法を明示的に定義する必要がないということである。従って要件は、オブジェクトの生成時に、推論したパラメータリストに基づいてコンストラクタ方法呼び出しに注入され、この場合、実装コンポーネント104に関連付けた機械学習コンポーネント402が推論結果を生成することができる。
本明細書で使用するとき、用語「推論」は、一般に、システム、環境、および/またはユーザの状態をイベントおよび/またはデータを通して取得した一連の観測から理由付けし推論するプロセスを示す。例えば、推論を使用して特定のコンテキストまたはアクションを識別でき、または状態の確率分布を生成することができる。推論は確率的であることができ、即ち推論はデータおよび事象を考慮した、着目する状態の確率分布の計算結果であることができる。推論は、高レベルな事象を一連の事象および/またはデータから構成するために用いる技術を指すこともできる。上記の推論の結果、事象が時間的に密接に相関するか否かに関わらず、ならびに事象およびデータが1つまたはいくつかの事象およびデータ源から来るか否かに関わらず、新規の事象またはアクションが一連の観測した事象および/または格納した事象データから構築される。様々な分類の枠組みおよび/またはシステム(例えば、サポートベクトルマシン、ニューラルネットワーク、エキスパートシステム、ペイジアンネットワーク、ファジーロジック、データフュージョンエンジン、...)を、自動的なアクションおよび/または推論したアクションの実施に関連して使用することができる。
或る特定の例では、推論は戦略およびポリシーを通して制御可能である。従って、推論は、コンストラクタのパラメータに適用可能な属性の宣言を分析することに達成される。別の例では、機械学習コンポーネント402により、(コンテキストの分析において)オブジェクトの型を簡単に検査することで推論を行うことができる。さらに、メタデータを(戦略に対するアドバイスと理解できる)戦略に与えることができ、それにより機械学習コンポーネント402は、上記決定に関してより良い意思決定を行うことができる。例えば、メタデータを外部ファイル404(例えば、外部XML構成ファイル)の形で与えることができる。別の例では、メタデータは、プログラマによりコード内部に与えたアドバイスの形であることができる。さらに別の例では、メタデータを.NETのような属性言語から取得することができる。このように、メタデータの受信および/または提供に適した適切な方法を考慮しており、それらが添付請求項の範囲にあるとして意図してある。さらに、システム400をコンストラクタ依存性注入に関して説明するが、紐付け、セッタ注入、コンテナへの登録および格納、コンテナからの検索、型マッピング、属性の反映、プロキシオブジェクトの返却、等に関して推論を行うことができることは理解される。
図5−13を参照し、クレーム主題に従う方法を一連の動作として説明する。いくつかの動作は、本明細書で図示および説明した他の動作と異なる順序および/または並列に行うことができるので、クレーム主題は動作順序により限定されないことは理解されるべきである。例えば、当業者は、方法を状態図のような一連の相関する状態または事象として代替的に表現できることを当然理解するであろう。さらに、クレーム主題に従い方法を実装するために、示した動作の全てが必要なわけではない。さらに、以降および本出願に渡って開示する方法を製品に記憶することができ、コンピュータへの上記方法の移植および転送を促進できることは、さらに理解されるべきである。本明細書で用いる製品という用語は、任意のコンピュータ読取可能装置、キャリア、または媒体からアクセス可能なコンピュータプログラムを含むよう意図している。
とりわけ図5を参照し、オブジェクト指向プログラミングに従う1つまたは複数のオブジェクトを合成する方法500を示してある。方法500は、502で始まり、504で複数の合成戦略を受け取る。これらの戦略をユーザによりカスタマイズすることができ、他の戦略に依存または相互依存させることができる。506で、ターゲットオブジェクトを合成する命令を受信する。例えば、アプリケーションの初期化により、合成を上記アプリケーションの実行時に行う要求が生ずる。508で、ターゲットオブジェクトに関連付けたコンテキストを分析することができ、この場合、コンテキストは、アプリケーションに関連付けた既存のエンティティ、関係、インスタンス、クラス、等に関連する。510で、複数の合成戦略の少なくとも1つを、コンテキストに少なくとも部分的に基づいて実行する。例えば、合成戦略は、オブジェクトの生成、参照の修正、関係の生成、または任意の他の適切なアクションに関連することができる。さらに、合成戦略は独立であるか、あるいは1つまたは複数の別の戦略に依存することができ、コンテキストおよび/またはポリシーに依存して特定の順序で実行することができる。次いで、方法500は512で完了する。
図6を参照し、拡張可能フレームワークを通してオブジェクトを合成する方法600を示してある。方法600は、602で開始し、604で複数の合成戦略を受け取る。実際の合成作業を複数の戦略のサブセットに委譲することで複数の合成スタイルおよび要件をもたらすことができる。さらに、戦略の各々は、特定の合成スタイルに関連することができ、その作業の完了前後に実行する他の合成戦略に依存できるかまたは依存できない。606でアプリケーションを実行し、608でターゲットオブジェクトを合成する命令を受信する。例えば、命令をアプリケーションの実行時に自動的に生成することができる。さらに、ターゲットオブジェクトが現在存在しないが合成戦略を複数のオブジェクト上で実行するという点で、命令は汎用的であることができる(従って、戦略は汎用的に実行され、命令は最初特定のオブジェクトに関連しない)。610で、アプリケーションに関連するコンテキストを決定し、この場合コンテキストには上記アプリケーション内部のエンティティまたは上記アプリケーションに関連するエンティティと、アプリケーション構成が含まれる。612で、複数の合成戦略のうち少なくとも2つをコンテキストに少なくとも部分的に基づいて実行し、この場合、上記戦略を並列または逐次(特定の順序)に実行することができる。例えば、コンテキストに依存して、第1の合成戦略は第2の合成戦略が上記の第1の戦略に先行することを要求することができる。従って、第2の合成戦略は、第1の合成戦略の前に実装されるべきである。同様に、第1の合成戦略は、第2の合成戦略が並列に実行されることを要求することができる。方法600は次いで614で完了する。
図7−13をまとめて参照し、戦略を通して実施する様々なタスクを説明する。別々に示してあるが、当業者はこれらの図面で説明する任意または全ての方法の組合せに関連する多数の戦略を与えうることを当然理解するであろう。特に図7を参照し、1つまたは複数の戦略を利用することでコンストラクタ依存性注入を行う方法700を示す。方法700は702で開始し、704で合成戦略を受け取り、この場合、戦略はコンストラクタ依存性注入と関連して利用するよう意図している。706で、ターゲットオブジェクトに関連するコンテキストを分析する。方法700では、ターゲットオブジェクトは、生成することが望ましいオブジェクトインスタンスであることができる。708で、コンストラクタ依存性注入を1つまたは複数の受信した戦略に従って実施する。上述のように、コンストラクタ依存性注入は、クラスのコンストラクタの要求を実行時に発見すること、上記要求を解決して抽出または生成すべきオブジェクトを決定すること、および次いで上記オブジェクトの生成時に上記オブジェクトをターゲットオブジェクトのコンストラクタに渡すことに関連する。オブジェクト指向プログラミングにおけるコンストラクタは、オブジェクトの新規インスタンスの生成に利用される方法であり、パラメータを受け取ることができる。戦略を、コンストラクタに渡されるものを自動的に推論できるように設計することができ、この場合、推論は戦略およびポリシーを通して制御可能である。方法700は710で完了する。
図8を参照し、戦略を利用することでセッタ注入を行う方法800を示す。方法800は802で開始し、804で合成戦略を受け取り、この場合、上記戦略をセッタ注入と関連して使用することができる。セッタ注入は、プロパティを設定することおよび生成したオブジェクト上で方法を呼び出すことに自動的に関連する。セッタ注入は、セッタ注入に関して未解決のオブジェクトが既に存在することを除いて、コンストラクタ依存性注入と同様である。しかしながら、設定すべきプロパティおよび呼び出すべき方法を推測することは、推論を通して達成することができる。上述のように、上記推論はコンテキストにおけるオブジェクトの型の分析、(例えば、XML構成ファイル、開発者が与えたコード、...における)前記オブジェクトに関連付けたメタデータの分析に基づくことができる。806で、ターゲットオブジェクトに関連付けたコンテキストを分析する。例えば、コンテキストの分析により、上述の推論に関連して利用されるメタデータを与えることができる。808で、セッタ注入をターゲットオブジェクト上で実施する。方法800は次いで810で完了する。
図9を参照し、戦略に基づいてコンテナにオブジェクトを登録し、それを格納する方法900を示す。方法900は902で開始し、904で戦略を受け取る。戦略はターゲットオブジェクトを登録することに関連することができ、この場合、上記オブジェクトは新規に作成され、および/または既存(オブジェクトはターゲットオブジェクトである)であることができる。906で、上記オブジェクトに関連付けたコンテキストを分析して、ターゲットオブジェクトに関連するメタデータを取得する。メタデータを次いで戦略に関連して使用することができる。908で、ターゲットオブジェクトの登録および格納を戦略に従って実施する。コンテナへのオブジェクトの登録および格納は、将来の利用のためオブジェクトを覚えておくべきであるとシステムに通知することを示す。従って、検証によりオブジェクトへの要求を解決するとき、コンテナを解析して、既存のオブジェクトが特定のニーズに対して適切であるかどうか、または新規オブジェクトを生成することが望ましいかどうかを決定することができる。上述のように、戦略を1つまたは複数の推論と関連付けること、分析したメタデータに従って実行すること、および/または特定の命令に従って操作することが可能である。例えば、オブジェクトを登録および格納すべきとプログラマが明示的に記述する場合、戦略をそれに従って実行することができる。方法900は次いで910で完了する。
図10を参照し、受信した戦略に基づいてコンテナ内部のオブジェクトを検索する方法1000を示す。方法1000は1002で開始し、1004でコンテナ内部のオブジェクト(例えば、ターゲットオブジェクト)の検索に関連する戦略を受信する。1006で、ターゲットオブジェクトに関連付けたコンテキストを分析し、1008でコンテナからのオブジェクト検索を戦略に従って実施する。コンテナからオブジェクトを抽出することは、推論、メタデータ、明示的な命令、またはそれらの組合せを通して、オブジェクトをコンテナから抽出すべきかどうか、または新規オブジェクトを生成すべきかどうかを決定することに関連する。方法1000は1010で完了する。
図11を参照し、或る戦略を与えた型マッピングを実施する方法1100を示す。方法1100は1102で開始し、1104で型マッピングに関連する合成戦略を受け取る。型マッピングはインタフェースおよび具象クラスに関連し、ここで、インタフェースは特定のクラスに関連するパブリック方法の定義である。多相性により、別のクラスは、与えられているオブジェクトがインタフェースに従うことを知るだけでよい。より詳細には、オブジェクトの型は、上記オブジェクトが特定の方法に関連付けられる限り無関係であることができる。さらに、型マッピングは、要求された型をより具体的な具象型に変換することに関連することができる。1106で、コンテキストをターゲットオブジェクトに関して分析し、1108で型マッピングを戦略に従って実施する。方法1100は次いで1110で完了する。
図12を参照し、受け取った合成戦略に従って属性反映を実施する方法1200を示す。方法1200は1202で開始し、1204で属性反映に関連するカスタマイズされた合成戦略を受け取る。属性反映は、構築されているクラス上で反映することにより、1つまたは複数の戦略の自動的な発見および構成を可能とする。これは.NETのような、属性をサポートする任意の言語を利用して行うことができる。1206で、ターゲットオブジェクトに関連付けたコンテキストを分析する。本例では、コンテキストはターゲットオブジェクトに関連付けた特別なクラスであることができる。1208で、受信した戦略に従って属性反映を実施し、方法1200は次いで1210で完了する。
図13を参照し、プロキシオブジェクトを返す方法1300を示す。プロキシオブジェクトを、ターゲットオブジェクトで宣言した方法の異なる実装を与えるオブジェクトとして返すことができる。プロキシは当業界で公知であるが、従来は戦略の利用を通してプロキシを行うことはできなかった。方法1300は1302で開始し、1304でオブジェクトのプロキシを与えることに関する合成戦略を受け取る。1306でオブジェクト(ターゲットオブジェクト)に関連付けたコンテキストを分析し、1308でプロキシオブジェクトを戦略に従って与える。方法1300は次いで1310で完了する。
主題の本発明の様々な態様に対して更なるコンテキストを与えるため、図14および以下の議論は、本発明の様々な態様の実装に適した動作環境1410の簡潔で、一般的な説明を与えることを意図している。本発明を、1つまたは複数のコンピュータあるいは他の装置により実行されるプログラムモジュールといったコンピュータ実行可能命令の一般的なコンテキストで説明するが、当業界の技術者は本発明を他のプログラムモジュールと組み合わせて、ならびに/またはハードウェアおよびソフトウェアの組合せとして実装することもできることを認識するであろう。
しかしながら一般に、プログラムモジュールには、特定のタスクを実施するかまたは特定のデータ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造、等が含まれる。動作環境1410は、適切な動作環境の1つの例に過ぎず、本発明の使用範囲または機能範囲に関する任意の限定を示唆するようには意図していない。本発明との併用に適した他の良く知られたコンピュータシステム、環境、および/または構成は、パーソナルコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、プログラム可能消費家電、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記システムまたはデバイスを含む分散コンピューティング環境、等を含むがこれらに限らない。
図14を参照し、本発明の様々な態様を実装する例示的な環境1410には、コンピュータ1412が含まれる。コンピュータ1412には、演算装置1414、システムメモリ1416、およびシステムバス1418が含まれる。システムバス1418は、システムコンポーネントを演算装置1414に接続するのに、システムメモリ1416を含むがこれに限らない。演算装置1414は、様々な利用可能なプロセッサのうち任意のものであることができる。デュアルマイクロプロセッサおよび他のマルチプロセッサアーキテクチャを演算装置1414として使用することもできる。
システムバス1418は、数種のバス構造(複数)のうち任意のものであることができ、バス構造には、メモリバスまたはメモリコントローラ、周辺バスまたは外部バス、および/または様々な利用可能なバスアーキテクチャのうち任意のものを用いるローカルバスが含まれる。バスアーキテクチャは、8ビットバス、業界標準アーキテクチャ(ISA)、マイクロチャネルアーキテクチャ(MSA)、拡張ISA(EISA)、統合ドライブエレクトロニクス(IDE)、VESAローカルバス(VLB)、周辺機器相互接続(PCI)、ユニバーサルシリアルバス(USB)、アドバンストグラフィックポート(AGP)、パーソナルコンピュータメモリカード国際協会バス(PCMCIA)、および小型コンピュータシステムインタフェース(SCSI)を含むがこれらに限らない。システムメモリ1416には、揮発性メモリ1420および不揮発性メモリ1422が含まれる。基本入出力システム(BIOS)は、例えば起動時にコンピュータ1412内の要素間での情報を転送する基本ルーチンを含み、不揮発性メモリ1422に記憶される。限定ではなく例として、不揮発性メモリ1422は、読取専用メモリ(ROM)、プログラム可能ROM(PROM)、電気的プログラム可能ROM(EPROM)、電気的消去可能ROM(EEPROM)、またはフラッシュメモリを含むことができる。揮発性メモリ1420には、外部キャッシュメモリとして動作するランダムアクセスメモリ(RAM)が含まれる。限定ではなく実例として、RAMは、同期RAM(SRAM)、ダイナミックRAM(DRAM)、同期DRAM(SDRAM)、ダブルデータレートSDRAM(DDR SDRAM)、拡張SDRAM(ESDRAM)、シンクリンクDRAM(SLDRAM)、およびダイレクトラムバスRAM(DRRAM)のような多数の形態で利用可能である。
コンピュータ1412には取り外し可能/取り外し不能、揮発性/不揮発性コンピュータ記憶媒体も含まれる。図14は例えばディスク記憶1424を示す。ディスク記憶1424は、磁気ディスクドライブ、フロッピー(登録商標)ディスクドライブ、テープドライブ、ジャズドライブ、ジップドライブ、LS−100ドライブ、フラッシュメモリカード、またはメモリスティックのような装置を含むがこれらに限らない。加えて、ディスク記憶1424は、他の記憶媒体と独立な記憶媒体または他の記憶媒体と組み合わせた記憶媒体を含むことができる。記憶媒体は、コンパクトディスクROM装置(CD−ROM)のような光ディスクドライブ、CD記録可能ドライブ(CD−Rドライブ)、CD書き換え可能ドライブ(CD−RWドライブ)またはデジタル多用途ディスクROMドライブ(DVD−ROM)を含むがこれらに限らない。ディスク記憶装置1424のシステムバス1418への接続を促進するため、インタフェース1426のような取り外し可能または取り外し不能インタフェースを一般に使用する。
図14で、ユーザと適切な動作環境1410で説明した基本的なコンピュータリソースとの間の中間物として動作するソフトウェアを説明することは理解されるべきである。上記ソフトウェアには、オペレーティングシステム1428が含まれる。オペレーティングシステム1428は、ディスク記憶1424に記憶することができ、コンピュータシステム1412のリソースを制御および割り当てるよう動作する。システムアプリケーション1430は、システムメモリ1416内またはディスク記憶1424上のいずれかに記憶したプログラムモジュール1432およびプログラムデータ1434を通して、オペレーティングシステム1428によるリソース管理を利用する。本発明を様々なオペレーティングシステムまたはオペレーティングシステムの組合せで実装できることは理解されるべきである。
ユーザは入力装置(複数)1436を通してコンピュータ1412に命令または情報を入力する。入力装置1436は、マウスのようなポインティングデバイス、トラックボール、スタイラスペン、タッチパッド、キーボード、マイクロフォン、ジョイスティック、ゲームパッド、パラボラアンテナ、スキャナ、TVチューナカード、デジタルカメラ、デジタルビデオカメラ、ウェブカメラ、等を含むがこれらに限らない。これらおよび他の入力装置は、インタフェースポート(複数)1438経由でシステムバス1418を通して演算装置1414に接続する。インタフェースポート(複数)1438には例えば、シリアルポート、パラレルポート、ゲームポート、およびユニバーサルシリアルバス(USB)が含まれる。出力装置(複数)1440は、入力装置(複数)1436と同種のポートのいくつかを使用する。従って、例えば、USBポートを使用してコンピュータ1412への入力を与え、コンピュータ1412からの情報を出力装置1440に出力することができる。出力アダプタ1442を与えて、他の出力装置1440の中にモニタ、スピーカ、およびプリンタのような特殊なアダプタを要するいくつかの出力装置1440があることを示す。出力装置1442には、限定ではなく例示として、出力装置1440とシステムバス1418との間の接続手段を与えるビデオおよびサウンドカードが含まれる。他の装置および/または装置のシステムは、リモートコンピュータ(複数)1444のような入力および出力ケイパビリティの両方を与えることに留意すべきである。
コンピュータ1412は、リモートコンピュータ(複数)1444のような1つまたは複数のリモートコンピュータに対する論理接続を用いてネットワーク環境で動作することができる。リモートコンピュータ(複数)1444はパーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ワークステーション、マイクロプロセッサベースの機器、ピアデバイスまたは他の共通ネットワークノード、等であることができ、一般にコンピュータ1412に関連して説明した要素の多数または全てが含まれる。簡単のため、メモリ記憶装置1446のみをリモートコンピュータ(複数)1444とともに示してある。ネットワークインタフェース1448を通してリモートコンピュータ(複数)1444をコンピュータ1412に論理的に接続し、次いで通信接続1450経由で物理的に接続する。ネットワークインタフェース1448は、ローカルエリアネットワーク(LAN)および広域ネットワーク(WAN)のような通信ネットワークを含む。LAN技術には光ファイバ分散データインタフェース(FDDI)、銅分散データインタフェース(CDDI)、イーサネット(登録商標)/IEEE 802.3、トークンリング/IEEE 802.5、等が含まれる。WAN技術は、ポイントツーポイントリンク、統合サービスデジタルネットワーク(ISDN)およびその上の変形のような回線交換ネットワーク、パケット交換ネットワーク、ならびにデジタル加入者線(DSL)を含むがこれらに限らない。
通信接続(複数)1450は、ネットワークインタフェース1448をバス1418に接続するために使用するハードウェア/ソフトウェアを指す。通信接続1450を説明の明確さのためコンピュータ1412内部に示してあるが、コンピュータ1412の外部にあってもよい。ネットワークインタフェース1448への接続に必要なハードウェア/ソフトウェアには、例示のみの目的で、通常の電話モデム、ケーブルモデムおよびDSLモデム、ISDNアダプタ、ならびにイーサネット(登録商標)カードのような内部および外部技術が含まれる。
図15は、本発明が相互作用可能なサンプルコンピューティング環境1500の略ブロック図である。システム1500には、1つまたは複数のクライアント(複数)1510が含まれる。クライアント(複数)1510は、ハードウェアおよび/またはソフトウェア(例えば、スレッド、プロセス、コンピューティングデバイス)であることができる。システム1500には、1つまたは複数のサーバ(複数)1530も含まれる。サーバ(複数)1530は、ハードウェアおよび/またはソフトウェア(例えば、スレッド、プロセス、コンピューティングデバイス)であることができる。サーバ1530は、例えば、本発明を使用することで変換を実施するスレッドを収容することができる。クライアント1510とサーバ1530の間の可能な通信の1つは、2つ以上のコンピュータプロセス間で送信するよう適応させたデータパケットの形であることができる。システム1500には通信フレームワーク1550が含まれる。通信フレームワーク1550を使用して、クライアント(複数)1510とサーバ(複数)1530との間の通信を促進することができる。クライアント(複数)1510に1つまたは複数のクライアントデータストア(複数)1560を動作可能に接続する。クライアントデータストア(複数)1560を使用して、クライアント(複数)1510に局所的に情報を記憶することができる。同様に、サーバ(複数)1530に1つまたは複数のサーバデータストア(複数)1540を動作可能に接続する。サーバデータストア(複数)1540を使用して、サーバ(複数)1530に局所的に情報を記憶することができる。
上述したことには、クレーム主題の例が含まれる。勿論、上記の主題を説明する目的で全ての考えうる構成要素または方法の組合せを記述することは不可能であるが、当業者は、多数の更なる組合せおよび並び替えが可能であることを理解するであろう。従って、クレーム主題は、添付請求項の精神および範囲にある全ての上記変更、修正、および変形を含むと意図している。さらに、用語「〜を含む」を詳細説明または請求項のいずれかで使用する限り、上記用語は「〜を備える」が請求項において移行語として使用されるときに解釈されるように、用語「〜を備える」と同様に包括的であると意図している。
特定のカスタマイズした戦略を与えたオブジェクトの合成を促進する、システムの高レベルなブロック図である。 複数の戦略を使用してターゲットオブジェクトの合成を促進するシステムのブロック図であり、戦略の順序は決定したコンテキストに少なくとも部分的に基づく。 拡張可能プログラミングフレームワークのブロック図である。 推論の生成を促進するシステムのブロック図である。 アプリケーション内のオブジェクトを合成する方法の代表的なフロー図である。 1つまたは複数のオブジェクトを合成することに関連して戦略の順序を決定する方法の代表的なフロー図である。 合成戦略に従ってコンストラクタ依存性注入を実施する方法を示す代表的なフロー図である。 合成戦略に従ってセッタ注入を実施する方法を示す代表的なフロー図である。 合成戦略に従ってターゲットオブジェクトをコンテナ内に登録および格納する方法を示す代表的なフロー図である。 合成戦略に従ってターゲットオブジェクトをコンテナ内から発見する方法を示す代表的なフロー図である。 合成戦略に従ってターゲットオブジェクトに関連する型マッピングを実施する方法を示す代表的なフロー図である。 合成戦略に従って属性反映をターゲットオブジェクトに関して実施する方法を示す代表的なフロー図である。 合成戦略に従ってプロキシオブジェクトを与える方法を示す代表的なフロー図である。 適切な動作環境を示す略ブロック図である。 サンプルコンピューティング環境の略ブロック図である。

Claims (15)

  1. オブジェクトを使用するアプリケーションの実行中のコンテキストに基づき、自動的にオブジェクトを構築し、オブジェクト間の関係を自動的に定義するためのシステムであって、
    前記システムは、
    1つまたは複数のコンピュータ記録媒体と、
    プロセッサと
    を備え、
    前記1つまたは複数のコンピュータ記録媒体上に、
    プロセッサに実行されたときに、ターゲットオブジェクトに関連付けられたコンテキスト内で与えられたカスタマイズされた合成戦略を受信する受信コンポーネントであって、前記受信されカスタマイズされた合成戦略は、消費アプリケーションに変更を要求することなく、複数のカスタマイズされた合成戦略の他の戦略に変更を要求することなく、個別に構築され、使用される、受信コンポーネントと、
    前記ターゲットオブジェクトに関連付けられたコンテキストに少なくとも部分的に基づいて、前記ターゲットオブジェクトを作成するために、前記カスタマイズされた合成戦略を自動的に実装する実装コンポーネントであって、
    前記ターゲットオブジェクトに関連付けられた前記コンテキストは、前記ターゲットオブジェクトを使用する前記受信コンポーネント、及び、前記実装コンポーネントとは別の、前記消費アプリケーションの現在のコンテキストに基づくものであり、前記消費アプリケーションは、前記現在のコンテキストが前記消費アプリケーションの実行中のコンテキストに対応するように、実行され、
    前記カスタマイズされた合成戦略の実施に関連付けられたフレームワークは、新しくカスタマイズされた合成戦略の追加を許容し、それらの戦略の使用を定義し、その結果、前記ターゲットオブジェクトの作成が、前記消費アプリケーションの実行中に実行される、実装コンポーネントと、
    前記カスタマイズされた合成戦略を、前記ターゲットオブジェクトに関連付けられた前記コンテキストにより決定された順序で実行することを促進し、その結果前記カスタマイズされた合成戦略が、前記複数のカスタマイズされた合成戦略の他の戦略に関する異なる順序で実行するために、順序付けられる順序付けコンポーネントと、
    前記ターゲットオブジェクトに関連付けられた前記コンテキストを判定するコンテキストコンポーネントであって、前記ターゲットオブジェクトに関連付けられた前記コンテキストが、前記ターゲットオブジェクトに関連付けられた前記アプリケーションのコンテキストと、前記ターゲットオブジェクトに関連付けられた既存のオブジェクトと、前記既存のオブジェクト間の関係と、を含み、前記コンテキストは、前記アプリケーション、及び、前記消費アプリケーションの実行中のターゲットオブジェクトに関連するコンポーネントのセットであり、前記少なくとも1つの既存のオブジェクトは、リモートオブジェクトである、コンテキストコンポーネントと
    を備えることを特徴とするシステム。
  2. 前記受信コンポーネントは、前記複数のカスタマイズされた合成戦略を受信することを特徴とする請求項1に記載のシステム。
  3. 前記順序付けコンポーネントは、前記複数のカスタマイズされた合成戦略を、前記ターゲットオブジェクトに関連付けられたコンテキストに基づき実行することを促進することを特徴とする請求項2に記載のシステム。
  4. 前記カスタマイズされた合成戦略は、永続的なポリシー、または一時的なポリシーであることを特徴とする請求項1に記載のシステム。
  5. 前記ターゲットオブジェクトを合成することに関連して推論を使用するよう構成したことを特徴とする請求項1に記載のシステム。
  6. 前記推論が、1つまたは複数の分析したメタデータおよび明示的な命令に少なくとも部分的に基づいて生成されたことを特徴とする請求項5に記載のシステム。
  7. 前記推論を生成することに関連して使用される外部構成ファイルをさらに備えることを特徴とする請求項5に記載のシステム。
  8. 実行アプリケーションの現在のコンテキストに基づき、オブジェクトを合成するためにプロセッサにより以下のコンピュータ実行可能動作を実行する拡張可能方法であって、
    アプリケーションの実行中に、前記アプリケーションからの呼び出しを受け取るステップであって、前記呼び出しは、少なくとも1つの合成戦略のための要求と、前記合成戦略に関連づけられたデフォルトのポリシーの指定とを含む、受け取るステップと、
    複数の合成戦略を受け取るステップと、
    前記実行アプリケーションのためにターゲットオブジェクトを合成する命令を受信するステップと、
    前記ターゲットオブジェクトに関連付けられたコンテキストを判定するステップであって、前記ターゲットオブジェクトに関連付けられたコンテキストは、前記アプリケーション内に存在し、前記アプリケーションに関連するエンティティのセットと、前記呼び出しが受信されたときに、実行中のアプリケーションとを含み、前記ターゲットオブジェクトに関連付けられたコンテキストは、前記ターゲットオブジェクトが合成される前記アプリケーションの少なくとも1つのコンテキストと、前記ターゲットオブジェクトに関連付けられた既存のオブジェクトと、前記既存のオブジェクト間の関係とを含み、前記少なくとも1つの既存のオブジェクトは、リモートオブジェクトである、判定するステップと
    を備えることを特徴とする方法。
  9. 少なくとも2つの前記合成戦略を並列に実行するステップをさらに備えることを特徴とする請求項8に記載の方法。
  10. 少なくとも2つの前記合成戦略を指定した順序で逐次的に実行するステップをさらに備えることを特徴とする請求項8に記載の方法。
  11. 前記少なくとも1つの戦略を実行する際に、1つまたは複数のコンストラクタ依存性注入およびセッタ注入を実施するステップをさらに備えることを特徴とする請求項8に記載の方法。
  12. 前記少なくとも1つの戦略を実行する際に、前記ターゲットオブジェクトをコンテナに登録するステップ、前記ターゲットオブジェクトをコンテナに格納するステップ、およびコンテナから前記ターゲットオブジェクトを抽出するステップ、のうち1つまたは複数を実施するステップをさらに備えることを特徴とする請求項8に記載の方法。
  13. 前記少なくとも1つの戦略を実行する際に、前記ターゲットオブジェクトに関する型マッピングを行うステップ、および前記少なくとも1つの戦略を実行する際に、前記ターゲットオブジェクトに対してプロキシオブジェクトを与えるステップ、のうち少なくとも1つを実施するステップをさらに備えることを特徴とする請求項8に記載の方法。
  14. 前記少なくとも1つの戦略を実行する際に、属性反映を実施するステップをさらに備える請求項8に記載の方法。
  15. オブジェクトの合成を要求するアプリケーションの実行の間に、前記アプリケーションの現在のコンテキストに基づき、オブジェクト合成のための拡張可能なシステムであって、
    前記システムは、1つまたは複数のプロセッサと、
    前記1つまたは複数のプロセッサにより実行されたときに、前記拡張可能なシステムに、以下の方法を実行させるコンピュータ実行可能命令を記憶する1つまたは複数のコンピュータ記録媒体とを備え、前記方法は、
    アプリケーションの実行中に、前記アプリケーションからの呼び出しを受け取るステップであって、前記呼び出しは、少なくとも1つのターゲットオブジェクトの作成のための要求を開始する、受け取るステップと、
    一連の逐次的な合成戦略を受け取るステップであって、前記一連の合成戦略は、前記少なくとも1つのターゲットオブジェクトを構築することに関連する受け取るステップと、
    前記少なくとも1つのターゲットオブジェクトに関して、前記一連の合成戦略を実施するステップと、
    前記少なくとも1つのターゲットオブジェクトに関連付けられたコンテキストを判定するステップであって、前記少なくとも1つのターゲットオブジェクトに関連付けられた前記判定されたコンテキストは、前記ターゲットオブジェクトに関連付けられた前記アプリケーションの実行時の、前記アプリケーションの現在のコンテキストを含み、前記少なくとも1つのターゲットオブジェクトに関連付けられた前記判定されたコンテキストは、前記ターゲットオブジェクトに関連付けられた既存のオブジェクトと、前記既存のオブジェクト間の関係と、前記アプリケーション内で実行するオブジェクトインスタンスの識別子とを含み、前記コンテキストは、前記アプリケーションの実行時の、前記アプリケーション、及び、前記ターゲットオブジェクトに関連するコンポーネントのセットであり、前記少なくとも1つの既存のオブジェクトは、リモートオブジェクトである、判定するステップと、
    ポリシーを問い合わせるステップであって、前記ポリシーは、前記一連の合成戦略を実施するためのルールを指定し、その結果前記一連の逐次的な合成戦略が使用される順序を変更する、問い合わせるステップと、
    前記アプリケーションの実行中のコンテキストを考慮して、前記ポリシーの問い合わせにより判定された順序で、前記受け取られた一連の合成戦略に少なくとも一部は基づいて、前記少なくとも1つのターゲットオブジェクトを作成するステップであって、前記少なくとも1つのターゲットオブジェクトを作成するステップは、前記実行中の前記アプリケーションの前記コンテキストに基づき、同じ前記一連の合成戦略が前記実行中のアプリケーションの少なくとも2つの異なるコンテキストのために、異なる順序で順序付けられるように、前記一連の合成戦略を順序付けるステップを含む、作成するステップと
    を含むことを特徴とするシステム。
JP2008534547A 2005-10-06 2006-09-12 オブジェクト合成に対する拡張可能メカニズム Expired - Fee Related JP5189986B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US72432405P 2005-10-06 2005-10-06
US60/724,324 2005-10-06
US11/321,209 2005-12-29
US11/321,209 US7779043B2 (en) 2005-10-06 2005-12-29 Extensible mechanism for object composition
PCT/US2006/035390 WO2007044170A1 (en) 2005-10-06 2006-09-12 Extensible mechanism for object composition

Publications (2)

Publication Number Publication Date
JP2009512014A JP2009512014A (ja) 2009-03-19
JP5189986B2 true JP5189986B2 (ja) 2013-04-24

Family

ID=37912042

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008534547A Expired - Fee Related JP5189986B2 (ja) 2005-10-06 2006-09-12 オブジェクト合成に対する拡張可能メカニズム

Country Status (8)

Country Link
US (1) US7779043B2 (ja)
EP (1) EP1934815A4 (ja)
JP (1) JP5189986B2 (ja)
KR (1) KR20080059561A (ja)
CN (1) CN101283345B (ja)
BR (1) BRPI0616943A2 (ja)
CA (1) CA2621810A1 (ja)
WO (1) WO2007044170A1 (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8191052B2 (en) * 2006-12-01 2012-05-29 Murex S.A.S. Producer graph oriented programming and execution
US8745584B2 (en) * 2007-05-03 2014-06-03 International Business Machines Corporation Dependency injection by static code generation
US20100023798A1 (en) * 2008-07-25 2010-01-28 Microsoft Corporation Error recovery and diagnosis for pushdown automata
US20100287525A1 (en) * 2009-05-07 2010-11-11 Microsoft Corporation Extension through visual reflection
CN101923461A (zh) * 2009-06-12 2010-12-22 徐晓松 一种数据处理方法及其系统
WO2011108193A1 (ja) * 2010-03-05 2011-09-09 日本電気株式会社 プログラム作成支援装置、プログラム、および、情報システム
US8819026B2 (en) * 2010-08-27 2014-08-26 SCR Technologies, Inc. Sequential chain registry
US9799005B2 (en) * 2013-03-07 2017-10-24 Samsung Electronics Co., Ltd. Computing system with contextual interaction mechanism and method of operation thereof
US9639335B2 (en) * 2013-03-13 2017-05-02 Microsoft Technology Licensing, Llc. Contextual typing
US9696974B2 (en) 2013-03-13 2017-07-04 Microsoft Technology Licensing, Llc. Graph-based model for type systems
US9652207B2 (en) 2013-03-13 2017-05-16 Microsoft Technology Licensing, Llc. Static type checking across module universes
US9563412B2 (en) 2013-03-13 2017-02-07 Microsoft Technology Licensing, Llc. Statically extensible types
US10860186B2 (en) * 2014-09-26 2020-12-08 Oracle International Corporation User interface component wiring for a web portal
CN104991452A (zh) * 2015-05-12 2015-10-21 广东瑞德智能科技股份有限公司 一种在面向对象编程中用于家电控制框架的设计方法
CN105808255B (zh) * 2016-03-07 2019-06-25 上海斐讯数据通信技术有限公司 一种基于编织的类图模型合成方法及系统
CN108279890B (zh) * 2017-01-06 2021-12-24 阿里巴巴集团控股有限公司 组件发布方法、组件构建方法及图形化机器学习算法平台

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5875333A (en) 1996-06-07 1999-02-23 Electronic Data Systems Corporation Automatically generating source code for relating a dialog interface with a business object in a computing application
US6104874A (en) * 1996-10-15 2000-08-15 International Business Machines Corporation Object oriented framework mechanism for order processing including pre-defined extensible classes for defining an order processing environment
US5937189A (en) * 1996-11-12 1999-08-10 International Business Machines Corporation Object oriented framework mechanism for determining configuration relations
US5890158A (en) 1997-03-31 1999-03-30 International Business Machines Corporation Method, apparatus, and program storage device for sharing objects with a network server and a database server using a common object model
US6763376B1 (en) * 1997-09-26 2004-07-13 Mci Communications Corporation Integrated customer interface system for communications network management
JPH11119987A (ja) * 1997-10-20 1999-04-30 Fujitsu Ltd 業務オブジェクトの自動生成装置及び方法並びに業務オブジェクト生成プログラムを記録したコンピュータ読み取り可能な記録媒体
US6574736B1 (en) 1998-11-30 2003-06-03 Microsoft Corporation Composable roles
US6366921B1 (en) * 1999-02-09 2002-04-02 International Business Machines Corporation System and method for data manipulation in a dynamic object-based format
US6199195B1 (en) * 1999-07-08 2001-03-06 Science Application International Corporation Automatically generated objects within extensible object frameworks and links to enterprise resources
US7152228B2 (en) * 1999-07-08 2006-12-19 Science Applications International Corporation Automatically generated objects within extensible object frameworks and links to enterprise resources
JP2001147812A (ja) * 1999-11-22 2001-05-29 Toshiba Corp クラス生成方法、オブジェクト生成方法、インタフェースオブジェクト生成方法及びオブジェクト実行システム
US7546226B1 (en) * 2003-03-12 2009-06-09 Microsoft Corporation Architecture for automating analytical view of business applications

Also Published As

Publication number Publication date
EP1934815A1 (en) 2008-06-25
EP1934815A4 (en) 2009-01-07
CA2621810A1 (en) 2007-04-19
BRPI0616943A2 (pt) 2011-07-05
WO2007044170A1 (en) 2007-04-19
CN101283345B (zh) 2011-03-09
US7779043B2 (en) 2010-08-17
CN101283345A (zh) 2008-10-08
JP2009512014A (ja) 2009-03-19
US20070083551A1 (en) 2007-04-12
KR20080059561A (ko) 2008-06-30

Similar Documents

Publication Publication Date Title
JP5189986B2 (ja) オブジェクト合成に対する拡張可能メカニズム
US7904416B2 (en) Provisioning of software components via workflow management systems
US7277827B2 (en) Device testing framework for creating device-centric scenario-based automated tests
US20090150854A1 (en) Computer Method and Apparatus for Providing Model to Model Transformation Using an MDA Approach
CN108628635A (zh) 获取参数名和局部变量名的方法、装置、设备及存储介质
García-Domínguez et al. EUnit: a unit testing framework for model management tasks
CN101387956A (zh) 可扩展地实现非功能逻辑的方法和设备及其系统
Izquierdo et al. API2MoL: Automating the building of bridges between APIs and Model-Driven Engineering
US8250528B2 (en) Static inheritance systems and methods
US9311111B2 (en) Programming environment with support for handle and non-handle user-created classes
US7711740B2 (en) Data access layer design and code generation
JPH0950370A (ja) 高機能作成者クラス・パターン、マシン実行手続きおよびオブジェクト指向プログラミング・システム
Bergmayr et al. fREX: fUML-based reverse engineering of executable behavior for software dynamic analysis
US20100058305A1 (en) Automatic Generation of Language Bindings for Libraries Using Data from Compiler Generated Debug Information
Lazăr et al. Tool support for fUML models
US8924924B2 (en) Representing the structure of a data format using a class-based representation
Jouve et al. High-level programming support for robust pervasive computing applications
US7779430B2 (en) Method, system, and article of manufacture for providing service components
Cheng Exploring Java 9: Build Modularized Applications in Java
Yu et al. The verification of rCOS using Spin
Hammer et al. PSCS4CPP: A Generative PSCS Implementation for C++
Cheng Exploring Java 9
Starr et al. A Simple Executable Model
CN116701017A (zh) 安卓系统内非公开api的调用方法、装置、设备及介质
Moreno-Garcia et al. Model-Driven Design, Development, Execution and Management of Service-Based Applications

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090914

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120131

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120203

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120502

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120525

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120821

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20120913

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120921

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120913

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121022

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20121023

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20121023

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20121221

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130122

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130125

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160201

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees