オブジェクト指向プログラミングa 第9回『クラスの継承 (中編)』~ 5.フレームワーク

参考資料:「Javaを学ぶ 第11回 (2003年3月 )」

●アプリケーションフレームワーク

オブジェクト指向の考え方を理解していると,比較的簡単にソフトウェアの作成ができるようになる。

ここで,書類ベースのアプリケーションの作成を考えてみよう。
『書類ベースのアプリケーション(document based application)』とは,
 ・書類を開いて表示する
 ・書類を新規に作成して表示する
 ・書類を 編集する
 ・書類を印刷する
 ・書類を保存する
といった機能を持っているソフトウェアで,Microsoft Office のアプリケーションなど,
多くのアプリケーションがこのタイプのソフトウェアである。

ここでは,
 機能1 「書類を開いて表示する」
だけを持っている場合を考えてみよう。また,
 機能2「 複数の書類を同時に開いておける」
ようにしてみる。


【ステップ1】
書類にも
  「テキスト書類」「ワープロ書類」「グラフィック書類」「表計算書類」
といった様々な書類があるが,それらをひっくるめて,書類一般を表すスーパークラス Document を考える。

先ほどの機能1,機能2にしぼって作成した Document クラスが下の List 3 (Document.java)である。

List 3
 

【解説】
 ●staticフィールド numOfDoc は現在開いている書類の数を記録する変数(①)。
  書類オブジェクトが生成されるごとに1増える様にしたいので,コンスト
   ラクタで1増やすようにしている(②)。
 ●getNumOfDoc( ) は numOfDoc のゲッタ(③)。

 ●readDataFromFile( ) と drawDataOnWindow( ) が書類を開く際に必要に
  なるであろう処理で,それぞれ 次の様に動作する。

   ・ readDataFromFile( ) は,ファイルから書類のデータを読み込む(④)。
   ・drawDataOnWindow( ) は,書類データの中身をウィンドウに表示する((⑤)。

  両メソッドともに,具体的な動作は定義されていない。(具体的な動作は
  後ほど,サブクラスでオーバライドしてやればよい。 )



【ステップ2】
次にアプリケーション本体を表すクラスを,先ほど決めておいた
 機能1 「書類を開いて表示する」
 機能2「 複数の書類を同時に開いておける」
だけにしぼって考えたのが,下中央の図(List 4)である。

List 3, List 4,  画像をクリックするとDocumentオブジェクトを配列に登録する処理の説明表示と交互に切り替わります。

DocumentBAsedApp クラスは,『書類データをファイルから読み込む』『書類データの内容をウィンドウに表示する』
といった,書類のデータ内容に係わる処理に関しては,すべて Document型オブジェクトのメソッドにお任せしている。
これは,『書類に関する動作について知っているのは書類を表すオブジェクト自身である』という考え方である。
オブジェクト指向では,このような『餅は餅屋』,つまり『専門家に任せるのが一番』という考え方でソフトウェアを
設計する。

そして,Documentクラスでは,書類に関する処理をメソッドとして定義している。

しかし,Documentクラスはあくまで書類一般を表すクラスで,各処理の内容は定義されていない。

そこで,実際に書類ベースのアプリケーションを作成する際には,Documentクラスのサブクラスを作成し,各メソッド
をオーバライドしてやれば良い。以下は,『テキスト書類』と『グラフィック書類』を表すサブクラスを作成した例である。

List 3, List 5


動作テスト用のクラスの例を以下に挙げる。

List 6


以上のクラスの関係をまとめると下図のようになる。

List 3, List 4, List 5, List 6


上図に書いてあるように,書類ベースアプリケーションの処理のほとんどが,この部分ですでに作成済みである。
このように,ソフトウェアのほとんどの部分を記述済みのクラスライブラリを,
 
 フレームワーク

と呼ぶ。フレームワークは,スーパークラスを使って記述される。

フレームワークは市販されているものや,開発環境に元から付属しているものなどもあり,それらを利用することで
手軽にソフトウェアを開発できるようになっている。