(57)【要約】【課題】  カスタムオブジェクトタイプおよびシリアライゼーション形式を有するユーザインタフェースオブジェクトをシリアライズする方法等を提供する。【解決手段】  標準オブジェクトタイプまたはシリアライゼーション形式用の標準シリアライザを識別するために、標準シリアライゼーションプロバイダを調整する。標準シリアライゼーションプロバイダではカバーできないカスタムオブジェクトタイプまたはシリアライゼーション形式用のカスタムシリアライザを識別するために、必要に応じて、カスタムシリアライゼーションプロバイダをロードして、シリアライゼーションマネージャを拡張できる。利用可能なシリアライゼーションプロバイダに基づいて、ある特定のシリアライゼーション形式およびオブジェクトタイプ用のシリアライザを識別する。カスタムまたは標準オブジェクトは、識別されたシリアライザを使用して、カスタムまたは標準形式にシリアライズされる。【選択図】  図２
2005011362.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクトについてのソースコードを生成することが可能なシリアライゼーションエンジンをサポートするコンピュータシステムにおいて、１つ以上のオブジェクトを、初期表現から、１つ以上の標準オブジェクトタイプおよびシリアライゼーション形式のための１つ以上の後続の表現であって、１つ以上のカスタムオブジェクトタイプおよびシリアライゼーション形式をカバーするように拡張できる後続の表現のいずれかにシリアライズする方法であって、
シリアライゼーションマネージャを提供して、（ｉ）１つ以上の標準シリアライゼーションプロバイダであって、その各々が、標準オブジェクトタイプまたはシリアライゼーション形式のための１つ以上の標準シリアライザを識別する標準シリアライゼーションプロバイダを調整し、（ｉｉ）１つ以上のカスタムシリアライゼーションプロバイダであって、その各々が、前記１つ以上の標準シリアライゼーションプロバイダによってはカバーされない、１つ以上のカスタムオブジェクトタイプまたはシリアライゼーション形式のための１つ以上のカスタムシリアライザを識別するカスタムシリアライゼーションプロバイダを必要に応じてロードする動作と、
特定のオブジェクトタイプのオブジェクトを備えるオブジェクトグラフのために、および特定のシリアライゼーション形式のために、前記シリアライゼーションマネージャにシリアライザを要求する動作と、
前記シリアライザを呼び出して、前記オブジェクトグラフをシリアライズする動作とを備えることを特徴とする方法。
【請求項２】
請求項１に記載の方法であって、前記シリアライザは、カスタムシリアライザであることを特徴とする方法。
【請求項３】
請求項２に記載の方法であって、前記シリアライゼーションマネージャは、前記要求に応答して、前記１つ以上のカスタムシリアライゼーションプロバイダを自動的にロードすることを特徴とする方法。
【請求項４】
請求項１に記載の方法であって、前記コンピュータシステムは、ビジュアルユーザインタフェースデザイナをもサポートし、前記シリアライゼーションエンジンは、前記ビジュアルユーザインタフェースデザイナ内で生成される１つ以上のユーザインタフェースオブジェクトのためのソースコードを生成可能であり、前記オブジェクトグラフは、前記１つ以上のユーザインタフェースオブジェクトを備えることを特徴とする方法。
【請求項５】
請求項１に記載の方法であって、前記シリアライゼーションマネージャは、前記１つ以上の標準シリアライゼーションプロバイダ、および前記シリアライゼーションマネージャによってロードされる任意のカスタムシリアライゼーションプロバイダの間で共用することができるコンテキスト情報を維持することを特徴とする方法。
【請求項６】
請求項１に記載の方法であって、前記初期表現は、前記１つ以上のユーザインタフェースオブジェクトを維持するのに用いられる表現を備え、前記１つ以上の後続の表現は、前記ビジュアルユーザインタフェースデザイナ内で前記１つ以上のユーザインタフェースオブジェクトを表すのに用いられる表現を備えることを特徴とする方法。
【請求項７】
請求項１に記載の方法であって、前記オブジェクトグラフは、複数の関連オブジェクトを備えることを特徴とする方法。
【請求項８】
請求項１に記載の方法であって、前記シリアライザを要求する動作は、アンドゥ操作またはリドゥ操作の一部であり、前記シリアライザは、前記オブジェクトグラフのクラス表現を生成することなく、前記ビジュアルユーザインタフェースデザイナ内で作成された前記オブジェクトグラフに対する変更をアンドゥし、またはリドゥするのに十分なコード断片を生成することを特徴とする方法。
【請求項９】
請求項１に記載の方法であって、前記１つ以上の標準シリアライゼーションプロバイダは、複数のシリアライザを識別することが可能であり、前記複数のシリアライザのうちの少なくとも２つは、異なるシリアライゼーション形式でオブジェクトグラフをシリアライズするためのものであることを特徴とする方法。
【請求項１０】
請求項１に記載の方法であって、前記シリアライザは、前記オブジェクトグラフの拡張可能マーク付け言語表現を生成することを特徴とする方法。
【請求項１１】
ビジュアルユーザインタフェースデザイナ、および前記ビジュアルユーザインタフェースデザイナ内で生成されたユーザインタフェースオブジェクトについてのソースコードを生成することが可能なシリアライゼーションエンジンをサポートするコンピュータシステムのためのコンピュータプログラムであり、１つ以上のユーザインタフェースオブジェクトを、初期表現から、１つ以上の標準オブジェクトタイプおよびシリアライゼーション形式のための１つ以上の後続の表現であって、１つ以上のカスタムオブジェクトタイプおよびシリアライゼーション形式をカバーするように拡張できる後続の表現のいずれかにシリアライズする方法を前記コンピュータシステムに実行させるコンピュータプログラムであって、前記方法は、
シリアライゼーションマネージャを提供して、（ｉ）１つ以上の標準シリアライゼーションプロバイダであって、その各々が、標準オブジェクトタイプまたはシリアライゼーション形式のための１つ以上の標準シリアライザを識別する標準シリアライゼーションプロバイダを調整し、（ｉｉ）１つ以上のカスタムシリアライゼーションプロバイダであって、その各々が、１つ以上のカスタムオブジェクトタイプまたはシリアライゼーション形式のための１つ以上のカスタムシリアライザを識別するカスタムシリアライゼーションプロバイダを必要に応じてロードする動作と、
特定のオブジェクトタイプのオブジェクトを備えるオブジェクトグラフのために、および特定のシリアライゼーション形式のために、前記シリアライゼーションマネージャにシリアライザを要求する動作と、
前記シリアライザを呼び出して、前記オブジェクトグラフをシリアライズする動作とを備えることを特徴とするコンピュータプログラム。
【請求項１２】
請求項１１に記載のコンピュータプログラムであって、前記１つ以上のカスタムオブジェクトタイプまたはシリアライゼーション形式は、前記１つ以上の標準シリアライゼーションプロバイダによってはカバーされないことを特徴とするコンピュータプログラム。
【請求項１３】
請求項１１に記載のコンピュータプログラムであって、前記シリアライザは、カスタムシリアライザであることを特徴とするコンピュータプログラム。
【請求項１４】
請求項１３に記載のコンピュータプログラムであって、前記シリアライゼーションマネージャは、前記要求に応答して、前記カスタムシリアライザをロードすることを特徴とするコンピュータプログラム。
【請求項１５】
請求項１１に記載のコンピュータプログラムであって、前記シリアライゼーションマネージャは、前記１つ以上の標準シリアライゼーションプロバイダ、および前記シリアライゼーションマネージャによってロードされる任意のカスタムシリアライゼーションプロバイダの間で共用することができるコンテキスト情報を維持することを特徴とするコンピュータプログラム。
【請求項１６】
請求項１１に記載のコンピュータプログラムであって、前記初期表現は、前記ビジュアルユーザインタフェースデザイナ内で前記１つ以上のユーザインタフェースオブジェクトを表すのに用いられるライブ表現を備え、前記１つ以上の後続の表現は、前記１つ以上のユーザインタフェースオブジェクトを維持するのに用いられるターゲット表現を備えることを特徴とするコンピュータプログラム。
【請求項１７】
請求項１１に記載のコンピュータプログラムであって、前記シリアライザを要求する動作は、カット操作、コピー操作またはペースト操作の一部であり、前記シリアライザは、前記オブジェクトグラフのクラス表現を生成することなく、前記ビジュアルユーザインタフェースデザイナ内で作成された前記オブジェクトグラフに対する変更をアンドゥし、またはリドゥするのに十分なコード断片を生成することを特徴とするコンピュータプログラム。
【請求項１８】
請求項１１に記載のコンピュータプログラムであって、前記１つ以上のカスタムシリアライゼーションプロバイダは、複数のシリアライザを識別することが可能であり、前記複数のシリアライザのうちの少なくとも２つは、異なるシリアライゼーション形式で前記オブジェクトグラフをシリアライズするためのものであることを特徴とするコンピュータプログラム。
【請求項１９】
請求項１１に記載のコンピュータプログラムであって、前記シリアライザは、前記オブジェクトグラフのソースコード表現を生成することを特徴とするコンピュータプログラム。
【請求項２０】
ビジュアルユーザインタフェースデザイナ、および前記ビジュアルユーザインタフェースデザイナ内で生成されたユーザインタフェースオブジェクトについてのソースコードを生成することが可能なシリアライゼーションエンジンをサポートするコンピュータシステムにおいて、１つ以上のユーザインタフェースオブジェクトを、初期表現から、１つ以上のカスタムオブジェクトタイプおよびシリアライゼーション形式をカバーするように拡張できる１つ以上の拡張可能な後続の表現のいずれかにシリアライズする方法であって、
１つ以上の標準シリアライゼーションプロバイダであって、その各々が、標準オブジェクトタイプまたはシリアライゼーション形式のための１つ以上の標準シリアライザを識別する標準シリアライゼーションプロバイダを調整するステップと、
１つ以上のカスタムシリアライゼーションプロバイダであって、その各々が、前記１つ以上の標準シリアライゼーションプロバイダによってはカバーされない、１つ以上のカスタムオブジェクトタイプまたはシリアライゼーション形式のための１つ以上のカスタムシリアライザを識別するカスタムシリアライゼーションプロバイダを必要に応じてロードするステップと、
特定のシリアライゼーション形式のために、および特定のオブジェクトタイプのオブジェクトを備えるオブジェクトグラフのために、シリアライザを識別するステップと、
前記シリアライザを用いて、前記オブジェクトグラフをシリアライズするステップとを備えることを特徴とする方法。
【請求項２１】
請求項２０に記載の方法であって、前記特定のオブジェクトタイプは、カスタムオブジェクトタイプを備えることを特徴とする方法。
【請求項２２】
請求項２０に記載の方法であって、前記特定のシリアライゼーション形式は、カスタムシリアライゼーション形式であることを特徴とする方法。
【請求項２３】
請求項２０に記載の方法であって、前記１つ以上の標準シリアライゼーションプロバイダ、および前記シリアライゼーションマネージャによってロードされる任意のカスタムシリアライゼーションプロバイダの間で共用することができるコンテキスト情報を維持するステップをさらに備えることを特徴とする方法。
【請求項２４】
請求項２０に記載の方法であって、前記初期表現は、前記ビジュアルユーザインタフェースデザイナ内で前記１つ以上のユーザインタフェースオブジェクトを表すのに用いられるライブ表現を備え、前記１つ以上の後続の表現は、前記１つ以上のユーザインタフェースオブジェクトを維持するのに用いられるターゲット表現を備えることを特徴とする方法。
【請求項２５】
請求項２０に記載の方法であって、前記オブジェクトグラフのためのシリアライザを識別する際にロードされたカスタムシリアライゼーションプロバイダからのカスタムシリアライザによって、標準シリアライザを置き換えるステップをさらに備えることを特徴とする方法。
【請求項２６】
請求項２０に記載の方法であって、前記オブジェクトグラフは、複数の関連オブジェクトを備えることを特徴とする方法。
【請求項２７】
請求項２０に記載の方法であって、前記シリアライザを識別する動作は、カット操作、コピー操作またはペースト操作の一部であり、前記シリアライザは、前記オブジェクトグラフのクラス表現を生成することなく、前記オブジェクトグラフのためのコード断片を生成することを特徴とする方法。
【請求項２８】
請求項２０に記載の方法であって、前記シリアライザは、前記オブジェクトグラフのソースコード表現または拡張可能マーク付け言語表現のいずれかを生成することを特徴とする方法。
【請求項２９】
ビジュアルユーザインタフェースデザイナ、および前記ビジュアルユーザインタフェースデザイナ内で生成されたユーザインタフェースオブジェクトについてのソースコードを生成することが可能なシリアライゼーションエンジンをサポートするコンピュータシステムのためのコンピュータプログラムであり、１つ以上のユーザインタフェースオブジェクトを、初期表現から、１つ以上のカスタムオブジェクトタイプおよびシリアライゼーション形式をカバーするように拡張できる１つ以上の拡張可能な後続の表現のいずれかにシリアライズする方法を前記コンピュータシステムに実行させるコンピュータプログラムであって、前記方法は、
１つ以上の標準シリアライゼーションプロバイダであって、その各々が、標準オブジェクトタイプまたはシリアライゼーション形式のための１つ以上の標準シリアライザを識別する標準シリアライゼーションプロバイダを調整するステップと、
１つ以上のカスタムシリアライゼーションプロバイダであって、その各々が、前記１つ以上の標準シリアライゼーションプロバイダによってはカバーされない、１つ以上のカスタムオブジェクトタイプまたはシリアライゼーション形式のための１つ以上のカスタムシリアライザを識別するカスタムシリアライゼーションプロバイダを必要に応じてロードするステップと、
特定のシリアライゼーション形式のために、および特定のオブジェクトタイプのオブジェクトを備えるオブジェクトグラフのために、シリアライザを識別するステップと、
前記シリアライザを用いて、前記オブジェクトグラフをシリアライズするステップとを備えることを特徴とするコンピュータプログラム。
【請求項３０】
請求項２９に記載のコンピュータプログラムであって、１つ以上のカスタムシリアライゼーションプロバイダは、前記オブジェクトグラフのためのシリアライザを識別する際にロードされることを特徴とするコンピュータプログラム。
【請求項３１】
請求項２９に記載のコンピュータプログラムであって、前記方法は、前記１つ以上の標準シリアライゼーションプロバイダ、および前記シリアライゼーションマネージャによってロードされる任意のカスタムシリアライゼーションプロバイダの間で共用することができるコンテキスト情報を維持するステップをさらに備えることを特徴とするコンピュータプログラム。
【請求項３２】
請求項２９に記載のコンピュータプログラムであって、前記初期表現は、前記１つ以上のユーザインタフェースオブジェクトを維持するのに用いられる表現を備え、前記１つ以上の後続の表現は、前記ビジュアルユーザインタフェースデザイナ内で前記１つ以上のユーザインタフェースオブジェクトを表すのに用いられる表現を備えることを特徴とするコンピュータプログラム。
【請求項３３】
請求項２９に記載のコンピュータプログラムであって、前記方法は、前記オブジェクトグラフのためのシリアライザを識別する際にロードされたカスタムシリアライゼーションプロバイダからのカスタムシリアライザによって、標準シリアライザを置き換えるステップをさらに備えることを特徴とするコンピュータプログラム。
【請求項３４】
請求項２９に記載のコンピュータプログラムであって、前記シリアライザを識別するステップは、アンドゥ操作またはリドゥ操作の一部であり、前記シリアライザは、前記オブジェクトグラフのクラス表現を生成することなく、前記オブジェクトグラフのためのコード断片を生成することを特徴とするコンピュータプログラム。
【請求項３５】
請求項２９に記載のコンピュータプログラムであって、前記シリアライザは、前記オブジェクトグラフのソースコード表現または拡張可能マーク付け言語表現のいずれかを生成することを特徴とするコンピュータプログラム。
【請求項３６】
ビジュアルユーザインタフェースデザイナ、および前記ビジュアルユーザインタフェースデザイナ内で生成されたユーザインタフェースオブジェクトについてのソースコードを生成することが可能なシリアライゼーションエンジンをサポートするコンピュータシステムのためのコンピュータプログラムであり、１つ以上のユーザインタフェースオブジェクト上で視覚的操作を実行する際に、前記１つ以上のユーザインタフェースオブジェクトをより効率的にシリアライズする方法を前記コンピュータシステムに実行させるコンピュータプログラムであって、前記方法は、
１つ以上のシリアライゼーションプロバイダであって、その各々が、与えられたオブジェクトタイプおよびシリアライゼーション形式のための１つ以上のシリアライザを識別するシリアライゼーションプロバイダをロードするステップと、
ユーザインタフェースオブジェクトを、当該ユーザインタフェースオブジェクト上で実行される要求された視覚的操作に対応するシリアライゼーション形式でシリアライズすることが可能なシリアライザを、前記１つ以上のシリアライゼーションプロバイダに基づいて識別するステップと、
前記要求された操作をより効率的に実行するために、前記ユーザインタフェースオブジェクトのクラス表現を生成することなく、前記識別されたシリアライザを用いて前記ユーザインタフェースオブジェクトをシリアライズしてコード断片を生成するステップとを備えることを特徴とするコンピュータプログラム。
【請求項３７】
請求項３６に記載のコンピュータプログラムであって、前記１つ以上のシリアライゼーションプロバイダを調整するステップをさらに備えることを特徴とするコンピュータプログラム。
【請求項３８】
請求項３６に記載のコンピュータプログラムであって、前記１つ以上のシリアライゼーションプロバイダは、１つ以上の標準シリアライゼーションプロバイダであって、その各々が、標準オブジェクトタイプおよびシリアライゼーション形式のための１つ以上の標準シリアライザを識別する標準シリアライゼーションプロバイダを備えることを特徴とするコンピュータプログラム。
【請求項３９】
請求項３８に記載のコンピュータプログラムであって、前記１つ以上のシリアライゼーションプロバイダは、１つ以上のカスタムシリアライゼーションプロバイダであって、その各々が、前記１つ以上の標準シリアライゼーションプロバイダによってはカバーされない、１つ以上のカスタムオブジェクトタイプまたはシリアライゼーション形式のための１つ以上のカスタムシリアライザを識別するカスタムシリアライゼーションプロバイダを備えることを特徴とするコンピュータプログラム。
【請求項４０】
請求項３９に記載のコンピュータプログラムであって、１つ以上のカスタムシリアライゼーションプロバイダは、前記シリアライザを識別する際にロードされることを特徴とするコンピュータプログラム。
【請求項４１】
請求項３６に記載のコンピュータプログラムであって、前記シリアライザは、カスタムシリアライザであることを特徴とするコンピュータプログラム。
【請求項４２】
請求項３６に記載のコンピュータプログラムであって、前記方法は、前記１つ以上のシリアライゼーションプロバイダの間で共用されるコンテキスト情報を維持するステップをさらに備えることを特徴とするコンピュータプログラム。
【請求項４３】
請求項３６に記載のコンピュータプログラムであって、前記要求された視覚的操作は、アンドゥ操作またはリドゥ操作を備えることを特徴とするコンピュータプログラム。
【請求項４４】
請求項３６に記載のコンピュータプログラムであって、前記要求された視覚的操作は、カット操作、コピー操作またはペースト操作を備えることを特徴とするコンピュータプログラム。
【請求項４５】
請求項３６に記載のコンピュータプログラムであって、前記方法は、
ユーザインタフェースオブジェクトを、当該ユーザインタフェースオブジェクトのソースコード表現に対応するシリアライゼーション形式でシリアライズすることが可能なコードシリアライザを、前記１つ以上のシリアライゼーションプロバイダに基づいて識別するステップと、
前記識別されたコードシリアライザを用いて前記ユーザインタフェースオブジェクトをシリアライズして、前記ユーザインタフェースオブジェクトのクラス表現を生成するステップとをさらに備えることを特徴とするコンピュータプログラム。
【請求項４６】
請求項３６に記載のコンピュータプログラムであって、前記方法は、
ユーザインタフェースオブジェクトを、当該ユーザインタフェースオブジェクトの拡張可能マーク付け言語（ＸＭＬ）表現に対応するシリアライゼーション形式でシリアライズすることが可能なＸＭＬシリアライザを、前記１つ以上のシリアライゼーションプロバイダに基づいて識別するステップと、
前記識別されたＸＭＬシリアライザを用いて前記ユーザインタフェースオブジェクトをシリアライズして、前記ユーザインタフェースオブジェクトのＸＭＬ表現を生成するステップとをさらに備えることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オブジェクトのシリアライゼーション（serialization）に関する。より詳細には、本発明は、カスタムユーザインタフェースオブジェクト（custom user interface object）をカスタムシリアライゼーション形式でシリアライズ（serialize）するための方法、システムおよびコンピュータプログラム製品に関する。
【背景技術】
【０００２】
広い意味で、シリアライゼーションとは、１つの表現または形式から別の表現または形式へのオブジェクトの変換のことである。シリアライゼーションは一般に、双方向の処理、すなわち、初期表現から他の何らかの表現へのオブジェクトの変換と、当該他の表現から初期表現への逆変換とを含意する。時々、初期表現への逆変換のことを、デシリアライゼーション（deserialization）と呼ぶこともあるが、シリアライゼーションという用語は、初期表現の初期変換と、その後の初期表現への逆変換の両方を包含する包括的な用語である。
【０００３】
例えば、インメモリ（in-memory）オブジェクト、またはライブ（live）オブジェクトを、永続的保存、またはネットワークを介した伝送に適した、永続的な、または一時的なオブジェクトにシリアライズすることができる。現在、保存およびデータ伝送のためのシリアライゼーション形式として、拡張可能マーク付け言語（ＸＭＬ：eXtensible Markup Language）を使用することが、一般に行われている。保存または伝送の後、オブジェクトのＸＭＬ表現を、ＸＭＬ表現から、インメモリオブジェクト、またはライブオブジェクトにシリアライズ（またはデシリアライズ）することができる。シリアライゼーションを実行するソフトウェアは一般に、シリアライザ（serializer）と呼ばれる。
【０００４】
シリアライゼーションの別の例に、コード生成がある。図１には、インメモリまたはライブユーザインタフェースオブジェクト１１０を含んだ、ビジュアルユーザインタフェースデザイナ（visual user interface designer）１００の一例が示されている。ユーザは、ビジュアルユーザインタフェースデザイナ１００を使用して、ユーザインタフェースオブジェクトの外観を定義し、その後、ユーザインタフェースオブジェクトのソースコード表現を生成することができる。ソースコード表現は、コンパイルし、プログラム内に含めることができる。この例では、ユーザインタフェースオブジェクト１１０は、単純なＡｂｏｕｔボックスであり、オブジェクトをＡｂｏｕｔボックスとして識別するタイトル１１２と、Ａｂｏｕｔボックスを最小化し、最大化し、クローズするウィンドウコントロール１１４と、テキスト１１６と、Ａｂｏｕｔボックスを消去するＯＫボタン１１８を含んでいる。標準的なビジュアルユーザインタフェースデザイナは、表Ｉに示す疑似コードに類似したコードを生成する。
【０００５】
【表１】
2005011362.tif 000003
【発明の開示】
【発明が解決しようとする課題】
【０００６】
表Ｉの疑似コードは、ビジュアルユーザインタフェースデザイナ内で行われる従来のシリアライゼーションに伴う、複数の問題を例示している。第１に、ビジュアルユーザインタフェースデザイナ内で行われる従来のシリアライゼーションは一般に、コード生成などの、単一のシリアライゼーション形式に限定される。ビジュアルユーザインタフェースデザイナにとって、コード生成は確かに重要な目的であるが、その他のタイプのシリアライゼーションが望ましいこともある。例えば、１つのビジュアルユーザインタフェースデザイナで作成されたユーザインタフェースオブジェクトを、別のビジュアルユーザインタフェースデザイナにインポートできるようにする汎用形式としては、おそらく、ＡｂｏｕｔボックスのＸＭＬ表現が望ましいかもしれない。しかし、ビジュアルユーザインタフェースデザイナ内で行われる従来のシリアライゼーションは、単一の形式に緊密に結び付けられており、異なるシリアライゼーション形式を許容することができない。
【０００７】
表Ｉの疑似コードによって例示される第２の問題は、ビジュアルユーザインタフェースデザイナ内で行われる従来のシリアライゼーションが一般に、表Ｉに示す新しいＡｂｏｕｔクラスのような、新しいクラスを生成することである。こうすると、新クラスのメンバーオブジェクトとの直接対話が可能になるので、コード生成にとって、新クラスの生成は一般に、望ましい挙動である。しかし、多くの操作にとって、シリアライゼーションの際の新クラスの生成は、非効率なものとなる。例えば、デザイン時の多くは、オブジェクトの視覚表現が、もっぱらまたは最も関連し、ソースコードは、視覚表現をディスクにセーブする時に必要となるだけである。表ＩＩには、表Ｉに示す疑似コードと等価な表現が示されている。表Ｉでは、新しいタイプを生成しているのに、表ＩＩでは、既存のタイプを構成している点が相違している。この第２の表現は、最終的なソースコードとしては有用でないこともあるが、ビジュアルデザイナ内で、アンドゥまたはコピー／ペーストなどの機能に対してライブオブジェクトの状態を維持するための包括的な方法として、使用することができる。
【０００８】
【表２】
2005011362.tif 000004
【０００９】
第３の問題は、ビジュアルユーザインタフェースデザイナ内で行われる従来のシリアライゼーションが一般に、シリアライザを新しいタイプおよび／または新しいシリアライゼーション形式のために拡張する方法において、制約を受けることである。新しいタイプまたは形式のために、シリアライゼーションプロバイダ（serialization provider）を呼び出すことが可能であるが、従来のシリアライゼーションでは、メタデータ属性をコンパイルして、シリアライゼーションプロバイダが理解できるタイプにする必要がある。したがって、新しいシリアライゼーション形式を提供し、オブジェクト開発者が予想していなかった新しいオブジェクトタイプをシリアライズするには、再コンパイルが必要とされる。不便さはさて置き、サードパーティのオブジェクトをシリアライズする時など、ある環境では、再コンパイルができないこともある。
【００１０】
もちろん、ビジュアルユーザインタフェースデザイナが、オブジェクトのグラフ（a graph of objects）のためのコードを生成するソフトウェアの一例に過ぎないことに留意されたい。多くの環境では、コード生成は、オブジェクトのグラフを再生成するための、最速かつ最も効率的な方法であり得る。しかし、上述したように、従来のシリアライゼーションは、特にコード生成が関係する場面で、その有用性を制限する様々な短所を露呈する。
【課題を解決するための手段】
【００１１】
本発明は、カスタムオブジェクトタイプ（custom object type）およびシリアライゼーション形式を有するオブジェクトをシリアライズするための、方法、システム、およびコンピュータ製品に関する。本発明の例示的な実施形態によれば、シリアライゼーションマネージャ（serialization manager）は、標準オブジェクトタイプまたはシリアライゼーション形式用の標準シリアライザを識別するために、標準シリアライゼーションプロバイダを調整する。標準シリアライゼーションプロバイダではカバーできないカスタムオブジェクトタイプまたはシリアライゼーション形式用のカスタムシリアライザを識別するために、必要に応じて、カスタムシリアライゼーションプロバイダをロードして、シリアライゼーションマネージャを拡張することができる。利用可能なシリアライゼーションプロバイダに基づいて、シリアライゼーションマネージャは、ある特定のシリアライゼーション形式およびオブジェクトグラフ用のシリアライザを識別する。適切なシリアライザが識別されると、オブジェクトグラフは、そのシリアライザを使用して、シリアライズされる。
【００１２】
オブジェクトグラフは、カスタムオブジェクトタイプでも、標準オブジェクトタイプでもよい、複数の関連オブジェクトを含むことができ、シリアライゼーション形式は、標準形式でも、カスタム形式でもよい。シリアライゼーション形式の例として、ライブまたはインメモリ表現、ソースコード表現、ＸＭＬ（拡張可能マーク付け言語）表現などを挙げることができる。ある種のシリアライゼーション形式は、オブジェクトグラフのクラス表現を生成することなく、オブジェクトグラフ用のコード断片（a snippet of code）を生成する。これらのコード断片は、ビジュアルユーザインタフェースデザイナ内で行われる、カット／コピー／ペースト操作およびアンドゥ／リドゥ操作（undo/redo operation）にとって、特に有用である。ある実施形態においては、カスタムシリアライゼーションプロバイダからのシリアライザを使用して、標準シリアライザを置き換えることができる。シリアライザおよびそのプロバイダの間の調整およびモジュラリティの向上を助けるために、シリアライゼーションマネージャは、コンテキスト情報（context information）を維持し、共用することができる。
【００１３】
本発明のさらなる特徴および利点を、以下の説明に記載する。本発明の特徴および利点は、部分的にはその説明から明らかとなろう。または本発明を実施することにより会得されよう。本発明の特徴および利点は、添付の特許請求の範囲で具体的に示される装置およびその組み合わせによって実現させ、これを取得することができるであろう。本発明の上記およびその他の特徴は、以下の説明と添付の特許請求の範囲からより十分に明らかとなろう。または以下に記載するように本発明を実施することにより会得されよう。
【００１４】
本発明の上記およびその他の利点および特徴を取得できる方法を説明するために、上で簡単に行ったものより具体的な本発明の説明を、添付の図面に示された本発明の具体的な実施形態を参照しながら行う。それらの図面が、本発明の典型的な実施形態を示したものに過ぎず、したがって、本発明の範囲を限定するものと考えるべきではないという理解の下で、添付の図面を使用して、さらに具体的かつ詳細に、本発明を記述し、説明する。
【発明を実施するための最良の形態】
【００１５】
本発明は、カスタムオブジェクトタイプおよびシリアライゼーション形式を有する、ユーザインタフェースオブジェクトをシリアライズするための、方法、システム、およびコンピュータプログラム製品に関する。本発明の実施形態は、以下でより詳細に説明するように、様々なコンピュータハードウェアを含む、１つ以上の専用コンピュータ、および／または１つ以上の汎用コンピュータを含むことができる。
【００１６】
図２には、本発明による、例示的なシリアライゼーションマネージャ２００が示されている。シリアライゼーションマネージャ２００は、標準シリアライザ２２４を有する標準シリアライゼーションプロバイダ２２０と、カスタムシリアライザ２４４を有するカスタムシリアライゼーションプロバイダ２４０を含む。標準シリアライザ２２４またはカスタムシリアライザ２４４などのシリアライザは、特定のオブジェクトタイプまたはオブジェクトタイプ範囲を特定のシリアライゼーション形式にシリアライズする機能をもったオブジェクトである。一般に、１つのオブジェクトタイプを異なるシリアライゼーション形式にシリアライズするには、異なるシリアライザが使用され、いくつかの実施においては、異なるシリアライゼーション形式を提供するシリアライゼーションプロバイダ用に、別々のベースクラス（base class）が存在する。例えば、以下でより詳細に説明するように、XmlSerializerベースクラスを使用して、オブジェクトをＸＭＬ（拡張可能マーク付け言語）に変換することができる。異なるシリアライザおよびシリアライゼーションプロバイダを使用して、異なるオブジェクトタイプを１つのシリアライゼーション形式にシリアライズすることもできる。
【００１７】
標準シリアライゼーションプロバイダ２２０およびカスタムシリアライゼーションプロバイダ２４０などのシリアライゼーションプロバイダは、特定のオブジェクトタイプおよびシリアライゼーション形式のための、個々のシリアライザを識別する。例えば、標準シリアライゼーションプロバイダ２２０は、標準オブジェクトを標準シリアライゼーション形式にシリアライズするために、標準シリアライザ２２４を識別することができる。その他の標準シリアライザ２２６は、異なるオブジェクトタイプを同じ標準シリアライゼーション形式にシリアライズするために、または同じ標準オブジェクトタイプを異なる標準シリアライゼーション形式にシリアライズするために、使用することができる。同様に、カスタムシリアライゼーションプロバイダ２４０は、カスタムオブジェクトをカスタムシリアライゼーション形式にシリアライズするために、カスタムシリアライザ２２４を識別することができ、その他のカスタムシリアライザ２４６は、異なるオブジェクトタイプを同じカスタムシリアライゼーション形式にシリアライズするために、または同じカスタムオブジェクトタイプを異なるカスタムシリアライゼーション形式にシリアライズするために、使用することができる。もちろん、シリアライゼーションマネージャ２００は、その他の標準シリアライゼーションプロバイダ２３０、およびその他のカスタムシリアライゼーションプロバイダ２５０を含むことができる。
【００１８】
シリアライゼーションマネージャ２００はまた、様々なシリアライザがオブジェクトグラフをシリアライズする際に使用する情報記憶である、シリアライゼーションコンテキスト情報２１０も提供する。例えば、複数のオブジェクトを有するオブジェクトグラフは、それ独自の出力を生成する複数のシリアライザを必要とする場合がある。シリアライゼーションマネージャ２００は、必要に応じて、これらのシリアライザ間の情報交換を効率化する。
【００１９】
シリアライゼーションマネージャ２００内では、メタデータ属性を使用して、個々のオブジェクトタイプを特定のシリアライザに関係付けることができる。例えば、以下でより詳細に説明するように、デフォルトシリアライゼーションプロバイダ属性を使用して、シリアライザをもたないオブジェクトタイプのためのシリアライゼーションプロバイダをロードまたはインストールすることができ、または既存のシリアライザを置き換えることができる。標準シリアライゼーションプロバイダ２２０またはカスタムシリアライゼーションプロバイダ２４０などのシリアライゼーションプロバイダ内では、所与のオブジェクトタイプおよびシリアライゼーション形式にとって適切なシリアライザを識別する際に、やはりメタデータ属性を使用することができる。
【００２０】
一例として、表ＩＩＩに示すＸＭＬ形式について考察する。
【００２１】
【表３】
2005011362.tif 000005
【００２２】
このＸＭＬ形式は、表ＩＶに示す疑似コードクラスXmlSerializerを使用して、シリアライズされる。
【００２３】
【表４】
2005011362.tif 000006
【００２４】
XmlSerializerは、小さな断片から文字列を組み立てるモジュラクラスである。例えば、整数値５をもったＩｎｔ３２データタイプを渡された場合、XmlSerializerは「５」を返す。
【００２５】
表ＩＩＩのＸＭＬ形式は、シリアライズする２つの基本オブジェクトタイプ、すなわち、プロパティを有するオブジェクトおよびテキストに変換できるオブジェクトを示している。ほとんどの状況では、すべてのクラスに当該クラスをどのようにテキストまたはＸＭＬタグに変換すべきかを知っているカスタムシリアライザを装備しようとすると、非常な労力が必要となり、新しいシリアライゼーション形式を導入する際にはメンテナンス問題が発生する（既存クラスを新しいシリアライゼーション形式にシリアライズするには、新しい属性をクラスに導入するが、それには既存クラスの再コンパイルが必要となる）。シリアライゼーションプロバイダは、コールバック機構によってこの問題に対処し、プロバイダは、この機構の中で、与えられたタイプにシリアライザを提供する機会を与えられる。
【００２６】
現在の例では、タイプの利用可能な組は、以下のように限定されている。  
１．既存のIConvertibleインタフェースによって、そのタイプを文字列に変換できる場合、StringXmlSerializerが識別される。  
２．そのタイプは文字列に変換できないが、パブリック型であり、空コンストラクタを有する場合、ObjectXmlSerializerが識別される。  
３．上記のどちらにも当てはまらない場合、シリアライゼーションプロバイダは、当該オブジェクト用のシリアライザが存在しないことを示す空値を返す（このエラー状態の対処方法は、呼び出しシリアライザ側で決められる）。
【００２７】
上記の基準を実施する疑似コードを、以下の表Ｖに示す。
【００２８】
【表５】
2005011362.tif 000007
【００２９】
シリアライゼーションプロバイダは、定義してから、使用することができる。明示的addメソッドによって、このシリアライゼーションプロバイダを、シリアライゼーションマネージャ２００に与えることができるが、この手法では、誰かが明示的呼び出しを行う必要がある。代替的に、シリアライザベースクラスにDefaultSerializationProviderAttributeを追加することによって、シリアライゼーションプロバイダを自動的にシリアライゼーションマネージャ２００に追加することができる。この例では、シリアライゼーションプロバイダがパブリック型の空コンストラクタを有することを、属性は必要とする。したがって、表ＩＶの疑似コードは、以下の表ＶＩに示すように変更される。
【００３０】
【表６】
2005011362.tif 000008
【００３１】
シリアライゼーションマネージャ２００に何らかのタイプのXmlSerializerが要求された時、デフォルトシリアライゼーションプロバイダがまだ追加されていない場合、それを自動的にシリアライゼーションマネージャに追加する。この属性は、オブジェクトではなく、シリアライザに関係付けられているので、新しい属性を使用するためにクラスを再コンパイルしなくても、新しいシリアライゼーション形式を追加することができることに留意されたい。
【００３２】
先に指摘したように、例示的なXmlSerializerは、２つの明確なシリアライザクラス、StringXmlSerializerおよびObjectXmlSerializerを有する。表ＶＩＩには、StringXmlSerializerの疑似コードによる実施が示されている。
【００３３】
【表７−１】
2005011362.tif 000009
【００３４】
【表７−２】
2005011362.tif 000010
【００３５】
表ＶＩＩＩには、ObjectXmlSerializerの疑似コードによる実施が示されており、 ObjectXmlSerializerは、それがシリアライズするオブジェクトのパブリックプロパティを１つずつ調査（walk）する。
【００３６】
【表８−１】
2005011362.tif 000011
【００３７】
【表８−２】
2005011362.tif 000012
【００３８】
【表８−３】
2005011362.tif 000013
【００３９】
ObjectXmlSerializerが、プロパティ値毎に別のシリアライザを呼び出すことに留意されたい。これには少なくとも２つの利点がある。第１の利点は、ObjectXmlSerializerが非常に単純になることである。第２の利点は、サードパーティタイプ用の拡張点（extensibility point）が提供されることである。このどちらのシリアライザによっても記述し切れないタイプが出現した場合には、カスタムシリアライザをそのタイプに提供することができる。
【００４０】
表ＩＸには、上記のシリアライザをSystem.Drawing.Rectangleオブジェクトに使用した例が示されている。このオブジェクトは、空コンストラクタと４つのプロパティを有し、どのプロパティも、文字列変換のためのIConvertibleをサポートする。表ＩＸでは、シリアライゼーションマネージャIDesignerSerializationManagerのインスタンスが生成され、シリアライザの識別を求められる。次に、識別されたシリアライザが、オブジェクトをシリアライズする。
【００４１】
【表９】
2005011362.tif 000014
【００４２】
表ＩＸの使用例によって、表Ｘに示すＸＭＬが生成される。
【００４３】
【表１０】
2005011362.tif 000015
【００４４】
この例には、ＸＭＬインデントはまったく含まれていないことに留意されたい。しかし、シリアライゼーションマネージャ２００のシリアライゼーションコンテキスト情報（serialization context information）２１０を使用することによって、インデントを容易に実現することができる。各シリアライザレベル（serializer level）は、コンテキストスタック（context stack）に、現在のインデントレベルを含むオブジェクトを追加することができ、各シリアライザは、スタック内のレベルコンテキスト（level context）オブジェクトを検索し、それを使用して、適切なインデントを提供することができる。
【００４５】
シリアライゼーションマネージャ２００は、オブジェクトを異なるシリアライゼーション形式にシリアライズする機能を有する。上述のＸＭＬシリアライゼーションとは対照的に、以下の例は、コード生成形式に関連している。本発明の例示的な実施形態によれば、ＸＭＬを生成するシリアライゼーションプロバイダと、ソースコードを生成するシリアライゼーションプロバイダは、シリアライゼーションマネージャ２００内に共存できることに留意されたい。すでに図１に示したように、オブジェクトをソースコードにシリアライズするのに、複数の方法が存在する。例えば、ＯＫボタンを１つだけもつフォームを例に考察する。そのようなフォームを定義する標準的な方法の１つを、以下の表ＸＩに示す。
【００４６】
【表１１】
2005011362.tif 000016
【００４７】
表ＸＩの疑似コードは、「Form1」オブジェクトタイプの新しいクラスを定義する。しかし、オブジェクトグラフのルートが新しいタイプを定義するようにしたのは、恣意的な選択に過ぎない。コードは、表ＸＩＩに示すように、書き表わすこともできる。
【００４８】
【表１２】
2005011362.tif 000017
【００４９】
いずれの場合でも、ボタンを１つ有するフォームが、結果的に生成される。しかし、表ＸＩＩに示すコード断片のほうが、オブジェクトグラフの「ルート」以外のすべてのオブジェクトにとって一般により望ましく、ビジュアルデザイナ内で行われるカット／コピー／ペースト操作およびアンドゥ／リドゥ操作にとってより有用である。これらの操作にとって、新しいオブジェクトの生成は、少なくとも最初は、不必要で好ましくない場合があり、したがって、回避する何らかの追加の努力が必要となる。多くの場合、フォームは、表ＸＩＩに示す形式で、容易に表現することができる。したがって、例示的な実施形態では、シリアライゼーションマネージャ２００は、２つの異なるベースシリアライゼーションタイプ、すなわち、与えられたオブジェクトを単に生成し、設定する、CodeDomSerializerと、新しいタイプを定義する、TypeCodeDomSerializerを有する。これらのシリアライザは、シリアライゼーションマネージャ２００内に共存することができる。
【００５０】
例示的なCodeDomSerializerクラスを、以下の表ＸＩＩＩに示す。
【００５１】
【表１３】
2005011362.tif 000018
【００５２】
Serializeメソッドは、与えられたオブジェクトをシリアライズする。その戻り値は、必要とされるシリアライゼーションのタイプに依存し、以下のいずれか一方とすることができる。
【００５３】
CodeExpression：  オブジェクトを簡単な表現（a simple expression）にシリアライズすることができる場合、CodeExpressionが返される。プリミティブは、そのコンストラクタ内で生成でき、設定できるタイプと同様、このカテゴリに入る。
【００５４】
CodeStatementCollection：  オブジェクトをステートメントの集まりにシリアライズすることができる場合、CodeStatementCollectionが返される。コンストラクション（construction）と設定すべき１つ以上のプロパティを必要とする複雑なオブジェクトは、このカテゴリに入る。
【００５５】
SerializePropertyメソッドは、与えられたオブジェクトのプロパティをシリアライズする。このタイプのシリアライゼーションを使用するための１つのモデルは、以下のようになる。
【００５６】
１．与えられたプロパティタイプ用のシリアライザをシリアライゼーションマネージャに要求する。
【００５７】
２．返されたシリアライザ上でSerializePropertyを呼び出す。
【００５８】
３．結果をユーザのシリアライゼーションデータに組み入れる。
SerializePropertyの戻り値は、必要とされるシリアライゼーションのタイプに依存し、以下のいずれか一方とすることができる。
【００５９】
CodeStatement：  プロパティを１つのステートメントにシリアライズすることができる場合、CodeStatementが返される。大多数のプロパティは、このカテゴリに入る。
【００６０】
CodeStatementCollection：  プロパティをステートメントの集まりにシリアライズすることができる場合、CodeStatementCollectionが返される。コレクションなどの複雑なプロパティは、このカテゴリに入る。
【００６１】
Deserializeメソッドは、与えられたシリアライゼーションデータから構成された、ライブオブジェクトを返す。「ステート（state）」として渡されたオブジェクトは、直前のSerializeコールから戻されたオブジェクトと同タイプのオブジェクトとする。
【００６２】
TypeCodeDomSerializerクラスは、CodeDomSerializerが実行するのと同じタスクを実行するが、このクラスによるオブジェクトのシリアライゼーションは、新しいタイプを定義する。例示的なTypeCodeDomSerializerクラスを、以下の表ＸＩＶに示す。
【００６３】
【表１４】
2005011362.tif 000019
【００６４】
Serializeメソッドは、与えられたルートオブジェクトと、メンバの任意選択のコレクションをシリアライズして、新しいタイプの定義を生成する。メンバコレクションは、空値または空とすることができる。メンバコレクションが値を含んでいる場合、それらの値は、タイプに関するメンバ変数として定義される。便宜的に、メンバコレクションは、ルートオブジェクトを含むことができる。その場合、ルートオブジェクトは、メンバとして追加されない。Deserializeメソッドは、先にシリアライズされたコードタイプ宣言をデシリアライズする。このメソッドは、タイプ宣言のベースタイプのインスタンスを生成し、またプロパティを設定し、メソッドを実行することによって、当該インスタンスを構成する。
【００６５】
本発明はまた、関数的ステップおよび／または非関数的動作を含む方法によっても、説明することができる。以下に、本発明を実施する際に実行可能な動作およびステップの説明を示す。通常、関数的ステップは、達成された結果によって本発明を説明し、非関数的動作は、特定の結果を得るためのより具体的なアクションを説明する。関数的ステップおよび非関数的動作は、特定の順序で説明または特許請求することができるが、本発明は、動作および／またはステップの特定の順序または組み合わせに、必ずしも限定されるものではない。
【００６６】
図３には、本発明による、ユーザインタフェースオブジェクトをシリアライズする方法の、例示的な動作およびステップが示されている。標準オブジェクトタイプまたはシリアライゼーション形式のための、１つ以上の標準シリアライザを識別する、１つ以上の標準シリアライゼーションプロバイダを調整(coordinate)するステップ（３１０）と、１つ以上の標準シリアライゼーションプロバイダではカバーできない１つ以上のカスタムオブジェクトタイプまたはシリアライゼーション形式のための、１つ以上のカスタムシリアライザを識別する、１つ以上のカスタムシリアライゼーションプロバイダを、必要であれば、ロードするステップ（３１０）は、シリアライゼーションマネージャを提供する動作（３１２）を含むことができる。
【００６７】
特定のシリアライゼーション形式のための、および特定のオブジェクトタイプのオブジェクトを含むオブジェクトグラフのためのシリアライザを識別するステップ（３２０）は、シリアライゼーションマネージャにシリアライザを要求する動作（３２２）を含むことができる。シリアライゼーションを行うステップ（３３０）は、シリアライゼーションマネージャから返されたシリアライザを呼び出して、オブジェクトグラフをシリアライズする動作（３３２）を含むことができる。コンテキスト情報を維持するステップ（図示せず）は、シリアライゼーションマネージャにコンテキスト情報を保存する動作（図示せず）を含むことができる。標準シリアライザをカスタムシリアライザで置き換えるステップ（図示せず）は、１つ以上のカスタムシリアライザを識別する１つ以上のシリアライゼーションプロバイダをロードするために、シリアライゼーションマネージャを提供する動作（３１２）を含むことができる。
【００６８】
カスタムシリアライザおよびシリアライゼーションプロバイダは、シリアライザを求める要求に応答して、ロードされることができる。シリアライズされるオブジェクトグラフは、複数の関連オブジェクトを含む。シリアライザは、カット／コピー／ペースト操作またはアンドゥ／リドゥ操作の一環として、オブジェクトグラフのクラス表現ではなく、コード断片を生成することができる。シリアライザは、オブジェクトグラフをシリアライズまたはデシリアライズすることができ、オブジェクトの、ライブまたはインメモリのＸＭＬ表現、ソースコード表現、またはその他の表現を生成することができる。
【００６９】
本発明の範囲内の実施形態はまた、そこに格納されたコンピュータ実行可能命令またはデータ構造を搬送あるいは保持するための、コンピュータ可読媒体を含むこともできる。そのようなコンピュータ可読媒体は、汎用または専用コンピュータによってアクセス可能な任意の媒体とすることができる。例えば、そのようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスク記憶媒体、磁気ディスク記憶または他の磁気記憶装置、またはコンピュータ実行可能命令またはデータ構造の形態をとる所望のプログラムコード手段を搬送または保存するのに使用でき、汎用または専用コンピュータによってアクセス可能な他の任意の媒体を含むことができるが、これらに限定されるものではない。情報を、ネットワークまたは別の通信コネクション（有線、無線、または有線と無線の組み合わせ）を介して、コンピュータに伝送または提供する場合、コンピュータは、そのコネクションをコンピュータ可読媒体として適切に認識する。したがって、任意のそのようなコネクションを、コンピュータ可読媒体と呼んでも差し支えない。上記のものの組み合わせも、コンピュータ可読媒体の範囲内に含まれるとする。コンピュータ実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理装置に、ある種の機能または機能グループを実行させる、命令およびデータを含む。
【００７０】
図４および以下の説明は、本発明を実施することができる適切なコンピューティング環境についての、簡潔で一般的な説明を提供することを意図している。必ずしも必要ではないが、ネットワーク環境内のコンピュータで実行される、プログラムモジュールなどのコンピュータ実行可能命令を用いる一般的状況において、本発明を説明する。一般に、プログラムモジュールは、特定のタスクを実行し、または特定の抽象データタイプを実装する、ルーチン、プログラム、コンポーネント、データ構造などを含む。コンピュータ実行可能命令、関連データ構造、およびプログラムモジュールは、本明細書で開示される方法の諸ステップを実行する、プログラムコード手段の例を表わす。特定の順序に並べられた、そのような実行可能命令または関連データ構造は、前記諸ステップ内で説明される機能を実施するための対応する動作を表わす。
【００７１】
本発明を、パーソナルコンピュータ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な家電製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなどを始めとする、様々なタイプのコンピュータシステム構成を含む、ネットワークコンピューティング環境で実施できることは、当業者であれば理解されよう。本発明は、通信ネットワークを介して（有線リンク、無線リンク、または有線と無線を組み合わせたリンクによって）接続されたローカル処理装置とリモート処理装置がタスクを実行する、分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールは、ローカルメモリ記憶装置とリモートメモリ記憶装置に配置することができる。
【００７２】
図４を参照すると、本発明を実施するための例示的なシステムは、従来型コンピュータ４２０の形態をとる汎用コンピューティング装置を含み、汎用コンピューティング装置は、プロセッシングユニット４２１、システムメモリ４２２、およびシステムメモリ４２２を始めとする様々なシステムコンポーネントをプロセッシングユニット４２１に結合するシステムバス４２３を含む。システムバス４２３は、様々なバスアーキテクチャのいずれかを使用する、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含む複数のタイプのバス構造のいずれとすることもできる。システムメモリには、ＲＯＭ（読み取り専用メモリ）４２４およびＲＡＭ（ランダムアクセスメモリ）４２５が含まれる。ＢＩＯＳ（基本入出力システム）４２６は、起動時などにコンピュータ４２０の構成要素間の情報伝送を助ける基本ルーチンを含み、ＲＯＭ４２４に格納することができる。
【００７３】
コンピュータ４２０はまた、磁気ハードディスク４３９に対して読み書きを行うための磁気ハードディスクドライブ４２７、着脱可能磁気ディスク４２９に対して読み書きを行うための磁気ディスクドライブ４２８、ＣＤ−ＲＯＭまたは他の光媒体などの着脱可能光ディスク４３１に対して読み書きを行うための光ディスクドライブ４３０も含む。磁気ハードディスクドライブ４２７、磁気ディスクドライブ４２８、および光ディスクドライブ４３０は、それぞれハードディスクドライブインタフェース４３２、磁気ディスクドライブインタフェース４３３、および光ドライブインタフェース４３４によって、システムバス４２３に接続される。ドライブおよびそれに関連するコンピュータ可読媒体は、コンピュータ実行可能命令、データ構造、プログラムモジュール、およびコンピュータ４２０用のその他のデータの不揮発性記憶を提供する。本明細書で説明する例示的な環境では、磁気ハードディスク４３９、着脱可能磁気ディスク４２９、および着脱可能光ディスク４３１を使用するが、磁気カセット、フラッシュメモリカード、デジタル多用途ディスク、ベルヌイカートリッジ、ＲＡＭ、ＲＯＭなどを始めとする、データ保存用のその他のタイプのコンピュータ可読媒体を使用することもできる。
【００７４】
１つ以上のプログラムモジュールからなるプログラムコード手段は、ハードディスク４３９、磁気ディスク４２９、光ディスク４３１、ＲＯＭ４２４、またはＲＡＭ４２５に格納することができ、プログラムコード手段には、オペレーティングシステム４３５、１つ以上のアプリケーションプログラム４３６、その他のプログラムモジュール４３７、およびプログラムデータ４３８が含まれる。ユーザは、キーボード４４０、ポインティングデバイス４４２、またはマイクロホン、ジョイスティック、ゲームパッド、衛星放送用パラボラアンテナ、スキャナなど、その他の入力デバイス（図示せず）を用いて、コマンドおよび情報をコンピュータ４２０に入力することができる。上記およびその他の入力デバイスはしばしば、システムバス４２３に結合されたシリアルポートインタフェース４４６を介して、プロセッシングユニット４２１に接続される。代替的には、入力デバイスは、パラレルポート、ゲームポート、またはＵＳＢ（汎用シリアルバス）など、その他のインタフェースによって接続することもできる。モニタ４４７または別の表示装置も、ビデオアダプタ４４８などのインタフェースを介して、システムバス４２３に接続される。モニタに加え、パーソナルコンピュータは一般に、スピーカ、プリンタなど、その他の周辺出力装置（図示せず）を含む。
【００７５】
コンピュータ４２０は、リモートコンピュータ４４９ａ、４４９ｂなどの１つ以上のリモートコンピュータへの論理コネクションを用いて、ネットワーク環境で動作することができる。リモートコンピュータ４４９ａ、４４９ｂはそれぞれ、別のパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置、またはその他の共通ネットワークノードとすることができ、一般にコンピュータ４２０に関して上で述べた構成要素の多くまたはすべてを含むことができるが、図４にはメモリ記憶装置４５０ａ、４５０ｂおよびそれに関連するアプリケーションプログラム４３６ａ、４３６ｂだけが示されている。図４に示す論理コネクションには、ＬＡＮ（ローカルエリアネットワーク）４５１およびＷＡＮ（ワイドエリアネットワーク）４５２が含まれるが、これらは例としてここに示したに過ぎず、限定を意図したものではない。このようなネットワーク環境は、オフィス規模または企業規模のコンピュータネットワーク、イントラネット、およびインターネットで一般的である。
【００７６】
コンピュータ４２０は、ＬＡＮネットワーク環境で使用される場合、ネットワークインタフェースまたはアダプタ４５３を介してローカルネットワーク４５１に接続される。コンピュータ４２０は、ＷＡＮネットワーク環境で使用される場合、モデム４５４、無線リンク、またはインターネットなどのワイドエリアネットワーク４５２を介して通信を確立するための他の手段を含む。モデム４５４は、内蔵でも外付けでもよく、シリアルポートインタフェース４４６を介してシステムバス４２３に接続することができる。ネットワーク環境では、コンピュータ４２０に関して示したプログラムモジュールまたはその部分は、リモートメモリ記憶装置に保存することができる。図示のネットワークコネクションは例示的なものであり、ワイドエリアネットワーク４５２を介して通信を確立するその他の手段も使用できることは理解されよう。
【００７７】
本発明は、その主旨または本質的特徴から逸脱することなく、その他の具体的形態で実施することができる。説明した実施形態は、すべての点において、説明のためのものに過ぎず、何ら限定を課すものではないと考えられたい。したがって、本発明の範囲は、上述した説明によってではなく、添付の特許請求の範囲によって示される。特許請求の範囲と同等の意味および範囲に入るすべての変更は、特許請求の範囲に包含されるとされたい。
【図面の簡単な説明】
【００７８】
【図１】本発明に従ってシリアライズすることができる、例示的なユーザインタフェースオブジェクトを含んだ、例示的なビジュアルユーザインタフェースデザイナを示した図である。
【図２】本発明による、例示的なシリアライゼーションマネージャを示した図である。
【図３】本発明による、ユーザインタフェースオブジェクトをシリアライズする方法の、例示的な動作およびステップを示した図である。
【図４】本発明にとって適切な動作環境を提供する、例示的なシステムを示した図である。
【符号の説明】
【００７９】
１００  ビジュアルユーザインタフェースデザイナ
１１０  ユーザインタフェースオブジェクト
１１２  タイトル
１１４  ウィンドウコントロール
１１６  テキスト
１１８  ＯＫボタン
２００  シリアライゼーションマネージャ
２１０  シリアライゼーションコンテキスト情報
２２０  標準シリアライゼーションプロバイダ
２２４  標準シリアライザ
２２６  その他の標準シリアライザ
２３０  その他の標準シリアライゼーションプロバイダ
２４０  カスタムシリアライゼーションプロバイダ
２４４  カスタムシリアライザ
２４６  その他のカスタムシリアライザ
２５０  その他のカスタムシリアライゼーションプロバイダ
４２０  コンピュータ
４２１  プロセッシングユニット
４２２  システムメモリ
４２３  システムバス
４２４  ＲＯＭ（読み取り専用メモリ）
４２５  ＲＡＭ（ランダムアクセスメモリ）
４２６  ＢＩＯＳ（基本入出力システム）
４２７  磁気ハードディスクドライブ
４２８  磁気ディスクドライブ
４２９  着脱可能磁気ディスク
４３０  光ディスクドライブ
４３１  着脱可能光ディスク
４３２  ハードディスクドライブインタフェース
４３３  磁気ディスクドライブインタフェース
４３４  光ドライブインタフェース
４３５  オペレーティングシステム
４３６  アプリケーションプログラム
４３７  その他のプログラムモジュール
４３８  プログラムデータ
４３９  磁気ハードディスク
４４０  キーボード
４４２  ポインティングデバイス
４４６  シリアルポートインタフェース
４４７  モニタ
４４８  ビデオアダプタ
４４９  リモートコンピュータ
４５０  メモリ記憶装置
４５１  ＬＡＮ（ローカルエリアネットワーク）
４５２  ＷＡＮ（ワイドエリアネットワーク）
４５３  ネットワークインタフェースまたはアダプタ
４５４  モデム
【図１】
2005011362.tif 000020
【図２】
2005011362.tif 000021
【図３】
2005011362.tif 000022
【図４】
2005011362.tif 000023