最新GUIツールで基礎から学べる
連載:いまから始めるJava入門(3)
自分でクラスを作ってみよう
たけぞう
2001/1/22
(2) ここまでの種あかし |
さて、ひとまずアプリケーションを完成させたところで、このアプリケーションの種明かしを順番にしていきましょう。
JTableとMVCモデル |
まず、「モデル」クラスという言葉から始めましょう。ヒントは「ビューとモデルの分離」という考え方にあります。
深くは解説しませんが、簡単にいえば、ユーザーに情報を見せる「ビュー」と、アプリケーション本体(データ+データに対する操作の手段)に当たる「モデル」を分離して作ることで、柔軟性の高いアプリケーションを構築しよう、という考え方です。特にデータベースを扱う場合、この考え方は大変有効です。データベース(モデル)をユーザーインターフェイスから独立させて運用し、データの表示方法(表、円グラフ、棒グラフ……)は各表示画面に任せるわけです。
より正確にいえば、この考え方にユーザーの入力とデータの操作を対応づける「コントローラ」を加えて、MVCモデルと呼びます。詳しくはJava
Solution FAQに詳しい説明が載っていますので、参考にしてみてください。
「JTable」もこの考え方に基づいて作られています(注)。「JTable」はあくまで「ビュー」を担当し、別個に作った「モデル」を指定しておけば、「JTable」はそこから必要なデータを取得し、表示します。表示方法については「モデル」は関知しません。ただし、「ビュー」が好きなときに好きなデータを取り出せるように「モデル」が作られていなければなりません。
この「モデル」と対応するようにできているのが、「TableModel」インターフェイスであるわけです。
インターフェイスって何? |
ここで「インターフェイス」という言葉をカンタンに使ってしまいましたが、ほかのオブジェクト指向言語を使われた方にも、この「インターフェイス」という言葉は耳慣れないかもしれません。
簡単にいってしまえば、インターフェイスとはほかのクラスから見て、どのようなメソッドがあるのかを宣言しているものです。これは不正確な定義なのですが、ひとまずこのように理解してくださって結構です。
「JTable」から見て、必要なメソッドはすべて「TableModel」で宣言されています。ただし、コードはまったく実装されていません。もし、「TableModel」のすべてのメソッドを実装しているクラス(実装クラスと呼びます(注))なら、「JTable」コンポーネントの「モデル」としての役割を果たせる資格がある…というわけです。
今回作った「CalendarModel」クラスは、この「TableModel」インターフェイスの実装クラスとなる条件を満たしていたので、
|
というコードを書いて、「CalendarModel」を「TableModel」として扱えたわけです。
(注: オブジェクト指向に通じていらっしゃる方なら、これが「継承」関係に似ていることに気付かれるでしょう。より詳しい方なら、インターフェイスが「抽象」クラスに似ている、と思われるかもしれません。……そのとおりです。ある意味で、インターフェイスは特別な抽象クラスといえます) ただし、実際は「CalendarModel」が本当に「TableModel」のメソッドを全部実装したわけではありません。実は、「CalendarModel」の親クラスに指定した「AbstractTableModel」で、ある程度のメソッドが実装済みになっているのです(残りのメソッドが、「TODO://
… 」と書かれて表示されたメソッドです)。 「AbstractTableModel」は、「TableModel」の実装クラスを作る手間を軽減するために用意されていたクラスだったのです。
これらのクラスとインターフェイスの間の関係を整理すると、下の図のようになります。
本当はもっと突っ込んで解説したいのですが、残念ながらそれだけのスペースがありませんので、ここでは割愛します。ここでは、インターフェイスのイメージと使い方だけつかんでもらえれば幸いです。あとは、皆さんご自身で研究なさってください。
今回は「JTable」を題材に、「MVCモデル」と「インターフェイス」について紹介しました。皆さんがもし業務用にJavaを使いたい、と思われたときに、特に大規模なシステムを構築したい、と思われたときに、これらは重要なキーワードとなります。特に「インターフェイス」は、システムの設計段階でとても便利な働きをしてくれます。ぜひ、頭の片隅にでも置いておいてください。
Index | |
第3回 自分でクラスを作ってみよう | |
(1)
サンプル:今回はカレンダー ウィザードで下準備 画面を2つに分割:年月表示エリアとカレンダー表示エリア 年月表示エリアにコンポーネントを張り付ける 「新規作成」メニューで編集エリアをクリアする カレンダーの「モデル」クラスを作る CalendarFrameにCalendarModelクラスのオブジェクトを追加する おまけのコードを追加・完成 |
|
(2) ここまでの種明かし JTableとMVCモデル インターフェイスって何? |
|
連載記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|