汎用パターン・フレームワークは、すべてのパターン実装全体で共通するデフォルトの振る舞いを定義するデフォルト・フレームワークです。 このフレームワークは、製品のパターンをアクティブ化する、必要なサービス・プロトコルを実装します。 コアのパターン・プラグイン・コンポーネントには、パターン実装によって特化される 基本クラスを提供する、デフォルト・フレームワークが含まれています。
パターン構造は、UML および Reusable Asset Specification (RAS) の両方のアセット・メタモデルを使用して定義されています。パターンの UML 表現は、パターン・プラグイン・プロジェクト内に維持されます。 モデル操作パターンは、UML モデルおよびそれらの要素で動作します。 パターン・サービスは、インストール済みのプラグインやローカルまたはリモートの RAS リポジトリーなど、各種のソースから利用可能なパターン・プラグインをディスカバーします。 パターン・サービスはまた、パターン定義の識別、パターン・インスタンスの作成、およびクライアント UI コンポーネントの直接サポートも行います。 パターン・サービスとパターン・フレームワークは、いずれも Eclipse プラグインです。
パターン・プログラミング・モデルでは、パターン・オーサリングが単純化され、作成者はパターンの振る舞い用のコードだけを提供すればよくなりました。 拡張の振る舞いを追加する場所は、ホット・スポット ・メソッドと呼ばれ、空の拡張メソッドによって表されます。 コード設計に関するヘルプが必要な場合は、AbstractPatternParameter クラスと PatternParameterValue クラスが含まれている、 com.ibm.xtools.patterns.framework という名前のパッケージを参照してください。
AbstractPatternParameter クラスは、 パターン・パラメーターに共通の実装であり、 このクラスをさらに特化する別の具体的なパターン・パラメーターのサブクラスを介して間接的に使用されます。 抽象パターン・パラメーターは、パラメーター、パラメーターの依存、および委譲を通して 拡張を実行するための、実行時の主要な抽象化です。 このクラスにはホット・スポット ・メソッドが含まれています。 このメソッドはユーザーがオーバーライドできます。ほとんどのパターン実装では、ホット・スポット ・メソッドをオーバーライドすることにより、 これらのホット・スポット・メソッドの一部または大半が実装されます。 実装頻度が最も高いホット・スポット ・メソッドは、 expand メソッドと isValid メソッドです。 これらのメソッドを使用すると、パターン適用の振る舞いを実装したり、指定したパラメーター値の有効期間を解決および判別したりできます。
PatternParameterValue クラスは、 適切なパターン・パラメーターとパターン・インスタンスに対して値を限定するのに必要な情報をすべてカプセル化します。 このクラスには、パターン・パラメーター値の状態に応じて状態固有の振る舞いを提供する、 ネストされたサブクラスが含まれます。 例えば、expand メソッドが呼び出されると、パターン・パラメーター値の直接の型を参照するシグニチャーと共に、パターン作成者の提供する特定の振る舞いが拡張メソッドに追加されます。
更新メソッドを使用すると、 サプライヤー・パラメーターに必要な値が指定されるまでの間、 クライアント・パラメーターの全体的および部分的な拡張を抑制できます。 AbstractPatternDependency クラス (com.ibm.xtools.patterns.framework) には、更新メソッドが含まれています。 このクラスは、2 つのパターン・パラメーター間の依存関係、 つまり、従属パターン・パラメーターと従属先の依存パラメーター間の関係を表します。 このクラスは、依存パラメーターを監視し、さまざまな状態トリガーの更新メソッド下にある従属パラメーターに通知します。
通常、パターン・パラメーターの依存関係は、 パターン・パラメーターのコンストラクター内で依存関係をインスタンス化することによって、 パターン・パラメーターと関連付けられます。 依存関係は、抽象パターン・パラメーター・クラス内に保管され、管理されます。 このクラスは、具体的な依存関係の実装のサブクラスを持たなければなりません。 これにより、定義済みのホット・スポット ・メソッドをオーバーライドして、 依存関係の実行時の振る舞いを変更することができます。 デフォルトでは、 最終のマークが付けられていないメソッドを調べることで、ホット・スポット ・メソッドを検出できます。 このクラスでは、ホット・スポットは主に多重定義された更新メソッドのバリアントです。 ホット・スポット・メソッドの聴取およびそれらの適用についての詳細は「Rational® Patterns Developer Guide」を参照してください。
特殊パターン・フレームワークは、汎用フレームワークを拡張するものであり、パターンにロール関連の機能拡張を提供します。 特殊フレームワークを使用するパターン・ライブラリーは、特殊フレームワークと汎用フレームワークの両方に依存します。 特殊パターン・フレームワークは、設計パターン・ライブラリーでのパターン参加ロールの追跡可能性をサポートします。 パターンの作成者は、パターン参加についての追跡可能性およびロール・マーキングの機能をパターン・ライブラリーで使用するには、パターン・フレームワーク・ルートとして特殊パターン・フレームワークを選択する必要があります。
この製品に組み込まれている設計パターンでは、 パターンの適用中に、特殊パターン・フレームワークを使用して読み取り専用パターン引数のモデル要素を管理します。 パターン・インスタンスは、関係する要素へのトレース関連を所有します。一部のパターンへのパラメーターとして、 読み取り専用モデルのモデル要素を使用することができます。 この製品における UML プロファイルのオーサリングおよび適用のサポートでは、 プロファイル・ステレオタイプおよび関連付けられたプロファイル列挙をパターン・パラメーターとして 使用できるという利点があります。
特殊パターン・フレームワークでは、特定パターン・インスタンス・モデル内の要素のみが 書き込みを受信するようにして、読み取り専用モデルを管理します。 また、ロールについての追跡可能性サポートおよびキーワード機能も特殊フレームワークに組み込まれており、 GoF コードで別個に実装されることはなくなります。
特殊パターン・フレームワークにルートを置いたパターンの場合、パターン作成者が特定のロールに モデル要素を関連付けした後に、フレームワークの効果を見ることができます。 例えば、パターン作成者が、特殊パターン・フレームワークにルートを置いたパターン・ライブラリーから パターンをインスタンス生成すると、インスタンス生成後、パターン作成者はそのパターン・オカレンスと対話できるようになります。 この場合は、パターン作成者が、モデル要素を任意のパターン・ロール・コンパートメントにドラッグすることで、対話が可能になります。 このようなパターン・オカレンスは、パターン・インスタンスとも呼ばれています。 パターン・ロール・コンパートメントは、パターン・パラメーターとも呼ばれています。
パターンは、特定の特殊パターン・フレームワークにルートを置いたパターン・ライブラリーの一部であるため、 以下のような 2 つの追加の効果が現れます。
パターン参加のロール・マーキングにより、パターン・ユーザー (パターン適用者とも呼ばれます) は、所定のモデル要素がどのロールを想定しているのかを認識することができます。 例えば、シンプルなパターンに、Past、Present、 および Future の 3 つのロール (パターン・パラメーターとも呼ばれます) があるとします。 パターン参加 (パターン引数とも呼ばれます) が所定のロールにバインドされた後、キーワードと呼ばれる単純なステレオタイプが、その参加モデル要素に適用されます。 Cornelius という名前のモデル要素がロール Future にバインドされた場合、モデル要素 Cornelius は、Future のキーワードを保持するようになり、 従来の Cornelius の代わりに、*!ENTITY!**!ENTITY!*Future Cornelius と表現されます。
特殊パターン・フレームワークのもう 1 つのフィーチャーは、 パターン参加ロールの追跡可能性です。 例えば、1 つのロール Singularity を持つ単純なパターンに、 このロールにバインドされたパターン参加がある場合、パターン・オカレンス・モデル要素から参加モデル要素への抽象化関係が作成されます。 この例では、Slim という名前のパターン参加モデル要素が、 Singularity という名前のパターン・ロールにバインドされており、これにより、 パターン・オカレンスであるモデル要素と Slim との間に抽象化関係が作成されます。 この場合、パターン・オカレンスは、Singularity Pattern Instance 1 という 名前の UML コラボレーションです。パターン・オカレンスは、抽象化関係を持ちます。
パターン・コード設計に関するヘルプが必要な場合は、 標準の汎用パターン・フレームワークよりも多くの機能を提供するクラス AbstractPatternLibrary が含まれている パッケージ com.ibm.xtools.patterns.framework.specialized を参照してください。