【伝わる!モデリング】
Google Androidで携帯アプリ設計
第3回:クラス図でプログラムの構造を整理する!
著者:株式会社豆蔵 藤田 泰介
公開日:2008/04/17(木)
クラス図を使って共通機能と独自機能を整理する
Mame Talkのチャットには「メッセージを表示する」「メッセージを送る」「詳細メッセージの表示」という機能があります。
この中で「メッセージを送る」と「詳細メッセージの表示」という機能はチャットとグループチャットでまったく同じ処理をします。しかし「メッセージを表示する」機能についてはAndroidの仕様上、チャットとグループチャットで参照するデータとデータの検索条件を変える必要がありました。
そこで「メッセージを送る」と「詳細メッセージを表示する」機能をまとめた親クラスを作成し、その親クラスを継承した2つの子クラスに「メッセージを表示する」機能を実装することにしました。
図2は共通機能を親クラスに分離する前と後のクラス図です。分離前にくらべて「reflectExtras」「fillData」というメソッドが増えています。この2つのメソッドにチャット・グループチャットそれぞれの独自機能を分離します。このように親クラスに共通機能をまとめ、子クラスに独自機能を分離することで機能の拡張ポイントが明確になります。また、独自機能が独立したので、互いのクラスが干渉しあうこともなくなりました。
(画像をクリックすると別ウィンドウに拡大図を表示します)
「テンプレートメソッド」パターン
今回のチャットとグループチャットの例のように、複数のクラスで共通する機能を親クラスに実装し、異なる機能だけをそれぞれのクラスで実装することがよくあります。このようなパターンを「テンプレートメソッド」パターンと呼びます。
「テンプレートメソッド」パターンは、処理の枠組み(流れ)が決まっていて、ある特定の処理のみ抽象メソッドに委ね、サブクラスを入れ替えることで、その処理内容を変えられるようにするようなパターンのことです。
言いかえれば「テンプレートメソッド」パターンは、共通機能を親クラスにまとめるだけでは不十分で処理の枠組みを親クラスで定義する必要があると言えます。しかし図2のクラス図では処理の枠組みがどうなっているかが分かりにくいので、次のページで実際のプログラムを見ながら説明していきましょう。 次のページ