最新GUIツールで基礎から学べる
連載:いまから始めるJava入門(3)

自分でクラスを作ってみよう

たけぞう
2001/1/22

 

 (2) ここまでの種あかし

 さて、ひとまずアプリケーションを完成させたところで、このアプリケーションの種明かしを順番にしていきましょう。

    JTableとMVCモデル

 まず、「モデル」クラスという言葉から始めましょう。ヒントは「ビューとモデルの分離」という考え方にあります。

 深くは解説しませんが、簡単にいえば、ユーザーに情報を見せる「ビュー」と、アプリケーション本体(データ+データに対する操作の手段)に当たる「モデル」を分離して作ることで、柔軟性の高いアプリケーションを構築しよう、という考え方です。特にデータベースを扱う場合、この考え方は大変有効です。データベース(モデル)をユーザーインターフェイスから独立させて運用し、データの表示方法(表、円グラフ、棒グラフ……)は各表示画面に任せるわけです。

 より正確にいえば、この考え方にユーザーの入力とデータの操作を対応づける「コントローラ」を加えて、MVCモデルと呼びます。詳しくはJava Solution FAQに詳しい説明が載っていますので、参考にしてみてください。

 「JTable」もこの考え方に基づいて作られています(注)。「JTable」はあくまで「ビュー」を担当し、別個に作った「モデル」を指定しておけば、「JTable」はそこから必要なデータを取得し、表示します。表示方法については「モデル」は関知しません。ただし、「ビュー」が好きなときに好きなデータを取り出せるように「モデル」が作られていなければなりません。

 この「モデル」と対応するようにできているのが、「TableModel」インターフェイスであるわけです。

(注:実際には、「JTable」にはもっとカンタンに使う方法も用意されています。一方で、私が作ったサンプルより、もっと厳密にMVCモデルに従った実装方法もあります。皆さんで研究してみてください)

    インターフェイスって何?

 ここで「インターフェイス」という言葉をカンタンに使ってしまいましたが、ほかのオブジェクト指向言語を使われた方にも、この「インターフェイス」という言葉は耳慣れないかもしれません。

 簡単にいってしまえば、インターフェイスとはほかのクラスから見て、どのようなメソッドがあるのかを宣言しているものです。これは不正確な定義なのですが、ひとまずこのように理解してくださって結構です。

 「JTable」から見て、必要なメソッドはすべて「TableModel」で宣言されています。ただし、コードはまったく実装されていません。もし、「TableModel」のすべてのメソッドを実装しているクラス(実装クラスと呼びます(注))なら、「JTable」コンポーネントの「モデル」としての役割を果たせる資格がある…というわけです。

(注:実装クラスとなるためには、メソッドを実装するほかに「インターフェイスを実装している」ということを宣言しなければならないのですが、詳細は割愛します。興味のある方は、ソースコードやリファレンスを眺めてみてください)

 今回作った「CalendarModel」クラスは、この「TableModel」インターフェイスの実装クラスとなる条件を満たしていたので、

TableModel calendarModel = new CalendarModel();

というコードを書いて、「CalendarModel」を「TableModel」として扱えたわけです。

(注: オブジェクト指向に通じていらっしゃる方なら、これが「継承」関係に似ていることに気付かれるでしょう。より詳しい方なら、インターフェイスが「抽象」クラスに似ている、と思われるかもしれません。……そのとおりです。ある意味で、インターフェイスは特別な抽象クラスといえます)

 ただし、実際は「CalendarModel」が本当に「TableModel」のメソッドを全部実装したわけではありません。実は、「CalendarModel」の親クラスに指定した「AbstractTableModel」で、ある程度のメソッドが実装済みになっているのです(残りのメソッドが、「TODO:// … 」と書かれて表示されたメソッドです)。 「AbstractTableModel」は、「TableModel」の実装クラスを作る手間を軽減するために用意されていたクラスだったのです。

 これらのクラスとインターフェイスの間の関係を整理すると、下の図のようになります。

  本当はもっと突っ込んで解説したいのですが、残念ながらそれだけのスペースがありませんので、ここでは割愛します。ここでは、インターフェイスのイメージと使い方だけつかんでもらえれば幸いです。あとは、皆さんご自身で研究なさってください。

 今回は「JTable」を題材に、「MVCモデル」と「インターフェイス」について紹介しました。皆さんがもし業務用にJavaを使いたい、と思われたときに、特に大規模なシステムを構築したい、と思われたときに、これらは重要なキーワードとなります。特に「インターフェイス」は、システムの設計段階でとても便利な働きをしてくれます。ぜひ、頭の片隅にでも置いておいてください。

 

Index
第3回 自分でクラスを作ってみよう
  (1) サンプル:今回はカレンダー
 ウィザードで下準備
 画面を2つに分割:年月表示エリアとカレンダー表示エリア
 年月表示エリアにコンポーネントを張り付ける
 「新規作成」メニューで編集エリアをクリアする
 カレンダーの「モデル」クラスを作る
 CalendarFrameにCalendarModelクラスのオブジェクトを追加する
 おまけのコードを追加・完成
(2) ここまでの種明かし
 JTableとMVCモデル
 インターフェイスって何?
 


連載記事一覧



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間