使いやすい食器洗い機のモデル
インスタンス化したオブジェクトを意識したアーキテクチャ設計
ここまででFrontPanelとMotorを追加した食器洗い機システムの構造と関連する振る舞いを定義しました。続いて定義したクラス群をインスタンス化と、食器洗い機システムの挙動を確認したいと思います。前回と異なりクラスの数が3つに増えたので、コンポジット構造図を用いて、インスタンス化の処理を明示的に定義を行います。
具体的に説明すると、DishwasherBuilderというクラスを作成し、クラス内に「FrontPanel」「Dishwasher」「Motor」のオブジェクトを定義します。DishwasherBuilderと命名されたクラスですが、これが食器洗い機システム本体を表すことになります。
DishwasherBuilderをインスタンス化した場合、内部に定義されたFrontPanel、Dishwasher、Motorもインスタンス化、実態化されることをコンポジット構造図を用いて定義しました。モデリング開発の世界では、クラスの内部アーキテクチャを定義するのに、この図を利用することが一般的です。
もう少し詳しく各オブジェクト名の定義の仕方について説明すると「itsFrontPanel:FrontPanel」を例にすると、クラスFrontPanelを元にインスタンス化されたオブジェクトitsFrontPanelであるという意味になります。オブジェクト間の関係は、新たに方向付きリンクで結びます。こうすることにより、インスタンス化された場合、オブジェクトitsFrontPanelはオブジェクト「itsDishwasher」の機能を利用することができます。また、itsDishwasherはオブジェクト「itsMotor」を使うことができます。
Motorをインターフェースクラスに変換
ここまでの作業で、前回同様モデルレベルでの動作検証が可能になりますが、シーケンス図の概要については前回も触れたので、今回の例では次のステップの説明に移りたいと思います。次の作業として、駆動モーター(Motor)に関しても拡張を行います。Motorをインターフェースクラスとして定義し、派生クラスとしてのACモーター、DCモーターを作成します。
拡張したクラス図では、Motorをインターフェースクラスとし、実現の矢印をAC、DCの各クラスに引くことにより、両クラスは、Motorで宣言された操作を継承し、個別に実装を行えるように変更しました。