プログラミング応用a 第12回『継承の基礎2』12-1 フレームワーク |
【ステップ1】
書類にも
「テキスト書類」「ワープロ書類」「グラフィック書類」「表計算書類」
といった様々な書類があるが,それらをひっくるめて,書類一般を表すスーパークラス Document を考える。
先ほどの機能1,機能2にしぼって作成した Document クラスが下の List 3 (Document.java)である。
List 3![]() |
【解説】 |
【ステップ2】
次にアプリケーション本体を表すクラス DocumentBasedApp を,先ほど決めておいた
機能1
「書類を開いて表示する」
機能2「
複数の書類を同時に開いておける」
だけにしぼって考えたのが,下中央の図(List 4)である。
下図左端は,『書類を開く』処理の流れを表しており,実際には DocumentBasedApp クラスの openDocument( )メソッドとして定義されている。
List 3, List 4, 画像をクリックするとDocumentオブジェクトを配列に登録する処理の説明表示と交互に切り替わります。![]() |
上図中央の DocumentBasedApp クラスは,
・
『書類データをファイルから読み込む』
・
『書類データの内容をウィンドウに表示する』
といった,書類のデータ内容に係わる処理に関しては,すべて上図右端の Document型オブジェクトのメソッドにお任せしている。
これは,『書類に関する動作について知っているのは書類を表すオブジェクト自身である』という考え方である。
オブジェクト指向では,このような『餅は餅屋』,つまり『仕事は専門家自身に任せるのが一番』という考え方でソフトウェアを設計する。
そして,Documentクラスでは,書類に関する処理をメソッド readDataFromFile( ) と drawDataOnWindow( ) として定義している。
しかし,Documentクラスはあくまで書類一般を表すクラスで,これらのメソッドの具体的な内容は定義されていない(各メソッドの { } の中に何も処理が書かれていない)。
そこで,実際に書類ベースのアプリケーションを作成する際には,Documentクラスのサブクラスを作成し,各メソッドをオーバライドしてやれば良い。
以下は,『テキスト書類』を表すサブクラス TextDocument と 『グラフィック書類』を表すサブクラス GraphicDocument を作成した例である。
List 3, List 5
動作テスト用のクラスの例を以下に挙げる。
List 6
以上のクラスの関係をまとめると下図のようになる。
List 3, List 4, List 5, List 6
上図に書いてあるように,書類ベースアプリケーションの処理のほとんどが,この部分ですでに作成済みである。
このように,ソフトウェアのほとんどの部分を記述済みのクラスライブラリを,
フレームワーク(framework)
と呼ぶ。フレームワークは,
・良く設計されたスーパークラス
を提供し,そのスーパークラス群を使って記述される。
フレームワークは市販されているものや,開発環境に元から付属しているものなどもあり,それらを利用することで
手軽にソフトウェアを開発できるようになっている。