Javaプログラミング「超」入門

参考書(中級者向け):掌田津耶乃『JBuilderではじめるJavaプログラミング入門』秀和システム(2001.1)

1。アプリケーション開発戦略

1ー1。特徴:カプセル化された部品の組み合わせ

 パソコンでアプリケーションを起動すると、たいていはウインドウが現われる。そこには、背景、画像、ラベル、描画パネル、テキストフィールド、ボタン(単純ボタン、ポップダウンボタン、タブ)がある。これらの部品(コンポーネント)が組み合わされて、アプリケーションができているのである。このようなアプリケーションやアプレット(applet)を開発する手順を想像しよう。

 まず、真っ白なウインドウを作り、そこに背景を描き、アイコン画像を置く。つぎに、テキストフィールドや、描画パネルやテキストフィールドを置く。そして最後にボタンを置く。これで、ユーザーインターフェース(UI)が設計できたことになる。

 そこまでくれば、あとは「ボタンのなかにプログラム」を書けばいい。これを、「ボタンにメソッド(method)を追加する」という。ボタンをクリックすると、描画パネルに動的に絵を書いてくれたり、テキストフィールドの中身を書き換えたりすることができるはずである。これは、ソフトウエアのアクション設計(機能設計)をしているのである。

 もしも、自作のボタンの機能が有用なものであるならば、別の新たなソフトウエアを作成するときにも再利用(reuse)したくなる。そんなとき、その自作ボタンを継承して、新たなソフトウエアにコーディングすることなく組込むことができれば、ソフトウエア開発も格段に早くなるし、開発者の苦労も少なくなる。そのためには、ボタンそのものの中に、初期値やプログラムが組込まれて、セットになっているほうが望ましい。また、ボタンの位置や形状(長方形、だ円形、影付き)も、「あとで自由に変更できる」と便利だ。これを、「プロパティー(property)を変更する」という。これもまたボタンのなかにセットになっているとありがたい。こうした、まとまりのことをカプセル化した部品という。カプセル化した複数の部品を、ボトムアップに組み合わせてアプリケーションを作る。

 さて、できあがったアプリケーションを起動し、どこかをクリックすると(あるいは自動的に)、部品たちがなんらかの情報をやり取りしながら、協調して仕事をする。最近のアプリケーションは、そんなふうにできている。

 この作り方を拡張して考えると、ひとつのパソコンの上ではなく、ネットワーク上に資源を分散することができる。基本機能は自宅のパソコンで動いているが、ある機能が必要になったらネットワークを通じて、別の場所でやってもらうこと(RMI: remote method invocation)によって、大規模な処理を遂行することができるようになる。分散システムである。

1ー2。開発手順

 UI設計→アクション設計→コンパイル→配付(ダウンロード)→実行

 Javaでは、「Write Once, Run Anywhere(一度プログラムを書いたら、同じものがどこででも動く)」を目指している。コンパイルしたあとのターゲットプログラム(バイナリーコード:.jarファイルや.classファイル)は、Java Virtual Machine(JVM)上でしか動かない。

 Javaアプレットは、WWWブラウザの中で動作するJavaプログラムである。WWWサーバにアプレットをアップロードしておくと、WWWブラウザがそれを読み込んで実行する。この場合は、WWWブラウザ自身がJVM環境を用意し、そのあとアプレットをサーバからダウンロードし、実行する。

 Javaアプリケーションの場合、Windows やMacintoshを、まず JVMにしてから、実行する。Windowsなら、バイトコードtest.classを動かすには、コマンドライン(コマンドプロンプト)で、java test と入力し、改行することになる。Macintoshなら、Javaというプログラムを起動してから、test.classをファイル/オープンするとロードされ動き出す。

2。言語体系(Javaプログラミング)

2ー1。特徴:クラス階層

 クラスを定義し、インスタンスを作り、それを操作する。これがJavaプログラミングの基本である。もちろん、基本的なクラスはあらかじめ用意されている。

 クラスとは各種の部品(オブジェクト)を定義した「設計図」である。たとえば、ボタンというクラスが用意されている。自分のプログラムの中で、ボタンを作りたいときは、ボタンクラスのインスタンスButton1を作り、「実体化」する。さらに、そのボタンのテキスト表示を「クリックしてね」に変更したり、クリックに反応して行なう情報処理の内容をメソッドとして記述するのである(テキストp.86)。

 重要な特徴は、設計図としてのクラスの階層性である。あるクラスのサブクラスを作成すると、上位のクラスがもっている機能を「継承する」ことになる。すでに上位クラスが定義されていればすれば、サブクラスは、上位と異なる部分だけを記述すればいいので、プログラミングが楽にできる。

 例えば、「抽象時計」というクラスは、ディスプレーにウインドウは現れるが、何も時刻を表示しないものである。けれど、現在の時刻を認識し、日付けや時刻を「調べようとするならできる」というクラスである。そういうクラスを自作することができる(『日経ソフトウエア』2000年9月号pp.72-29)。

 すると、これをextendして「デジタル時計」というサブクラスを作成することができる。これは、時計の数字がウインドウに現れるものである。このとき、デジタル時計というクラスの定義(プログラミング)には、ただ、数字をウインドウに表示する機能だけを記述するだけでいい。ウインドウの作成、現在時刻の認識などはプログラムする必要はない。

 また、抽象時計クラスをextendして、「アナログ時計」というサブクラスを作成することもできる。これは、ウインドウに長針、短針が表示されて、一秒ごとに秒針が動いてゆくものである。これもまた、ウインドウの作成、現在時刻の認識はプログラムする必要がなくて、針の表示部分だけを記述すればいいのである。こんなふうに、クラスの継承を活用すると、プログラムが楽になるのである。

 この場合は、UI部品を組み上げたときのようなボトムアップの思考ではなく、抽象的な概念から具体的な概念を作成するので、トップダウンの思考方法(概念の具体化)である。初心者にとって、分かりにくいのはここである。あるときはボトムアップ、別のときにはトップダウンの思考をする必要がある。しかし、次に述べるように、ボトムアップのUI設計は簡単にできるので、むしろトップダウンの思考方法を身につけることこそが重要である。

2ー2。UI設計(テキスト第1章)

 UI設計は、部品を組み合わせて、ボトムアップでアプリケーション全体を作成する。このときは、「あらかじめJavaに用意されている部品のクラス」のインスタンスを作りながら、アプリケーション開発をすることになる。ウインドウ、画像、ラベル、描画パネル、テキストフィールド、ボタン(単純ボタン、ポップダウンボタン、タブ)といった部品は、Java環境のなかに、すでに用意されている。

 したがって、本来なら、これらの部品のクラスのインスタンス(実体)を作り、配置するコードを記述することによって、プログラミングすることになる。たとえば、まずウインドウを定義する記述、メニューを定義する記述、テキストフィールドを定義する記述などを、プログラムファイル(.java)に羅列していかねばならない(p.71 )。これは、実は初心者には、たいへん面倒な作業である。そもそも「ボタンを作るためにプログラムを書く」ことに時間がとられて、肝心の「そのボタンを押して、どんなアクションをさせるのか」までいくのが大変である。

 しかし、JBuilderのようなIDE (integrated development environment、統合開発環境) は、そのようなプログラミングを自動的にやってくれるのでありがたい。JBuilderを起動し、新規プロジェクトを選択すると、いきなりすでにウインドウができている。ボタンアイコンを選択して、設計画面でドラッグすると、ボタンができてしまう。そして、重要なことは、「そのようなUIを作成するためのJavaコード」が自動的にできてしまうのである。

 したがって、人間は、アプリケーション本来の機能である、アクション設計だけに頭をつかうことができる。ウインドウの形や描画パネルそれ自身を作成することに時間をかけたくない。ボタンをクリックしたとき、どんな図形を、どんなふうに描くのか、そういうことに時間をかけたい。

 もちろん、JBuilderが自動的に作成するJavaプログラム(ソースコード)を、あとから見れば、初心者は「こんなふうにコーディングすれば、こんなUIができるのだな」という勉強にもなる。

2ー3。アクション設計

 ボタンのなかにプログラムを書くことは、実際には、ボタンインスタンスに(クリックしたというイベントを処理する)メソッドを追加することで実現する。たとえば、「p.51 ボタンをクリックして実行させる」では、jButton_actionPerformedメソッドが定義されている。

 実は、ボタンだけではなく、どんな部品でも、その部品にやらせたい機能(やらせたい情報処理)は、メソッドを追加することによって実現することができる。他には、パネルをクリックすると、その位置で円を描くということもさせることが可能である(p.149)。

 テキストp51に戻ると、ラベルjLabel1に文字を表示するには、JLabel1.setText("You click now !!" )という記述を行なう。これは、ラベルに表示する文字の設定(表示文字プロパティーの変更)を行なうメソッドである。つまり、ラベルは表示文字(text)というプロパティーをもち、これに値を設定するためのメソッドsetText()を持っているのである。実は、このメソッドはラベルが標準にもっているものである。

 しかし、この記述はボタンのなかに書かれている。つまりボタンのメソッドのなかで、ラベルのメソッドを利用しているのである。ボタンをクリックすると、ボタンはラベルに向かって、「あなたのsetTextメソッドを実行してください」と呼びかけている(メッセージを送信している)と考えることができよう。その他には、「あなたの位置や形状を変えてください」というプロパティー変更も可能である。

 したがって、Java環境(あるいはJBuilder)が標準で提供するもののうち、「どの部品がどんなプロパティーやメソッドを持っているのか」を、覚えなくてはならないのである。あるいは調べる方法を知っておくことが必要である。調べるためには、「Javaレファレンス」という本を購入したり、その場その場でオンラインヘルプを利用することになる。

2ー4。数値、文字、画像の処理

 数値と文字の処理については、テキスト第2章の第1節「Javaの基本要素 p.58」に詳しい。要点は、整数、実数、キャラクターなどの「タイプ(型)に注意すること」である。また、基本構文の紹介もある。

 また、randomやsignなどの代数関数は、Mathクラスのもっているメソッドである(p.149 Math.random()メソッド)。Mathというクラスは、さまざまな数値処理のためのメソッドをもっているので、それを使わせてもらっているのである。

 次に、画像の描画方法について考える。実は、Graphicsという名称のクラスが標準で存在し、さまざまなメソッドを持っている。直線、円(だ円)、四角などの絵をGraphicsのメソッドで描くことができる。また、文字を絵として描くこともできる。

 しかし、いったいMathやGraphicsというクラスは、どこにあるのだろうか。UIを設計したときにはボタンやラベルは目に見えたが、今回のMathやGraphicsは「目に見えないクラス」である。実は、本当の情報処理に用いる基本となるクラスは、目に見えないものであり、それらは、あなたがダウンロードした(インストールした)Javaパッケージの中に、多数つまっていたのである。しかもそれらは階層的に並べられていることに注意しよう。テキストp.79に、代表的なクラスとして、java.awt.*、java.awt.event*、java.applet.*、java.swing.*がリストアップされていますが、その他にも多数あるので注意すること。

 したがって、「Javaを極めるには」、これらの標準ライブラリーを大いに活用するしかありません。実は、ボタンやテキストフィールドといった「目に見える」部品たちのおおもとのクラスも、Javaパッケージの中にあるのです。ですから、たまにはレファレンスを読んで、どんなクラスやメソッドがあるのかを探索する必要があるし、そうしなければプログラミング技量は高まってゆかないでしょう。

3。まとめ

 Javaプログラミングでは、標準として用意されたこれらのクラスのサブクラスを定義したり、インスタンスを作ったりして、UI部品を作成し、メソッドを追加しながらアクション設計してゆくことになります。このようなやり方を、オブジェクト指向プログラミングといいます。

 そして、できあがったアプリケーションは、起動直後に自動的に動作が始まったり、あるいはクリックによって動作を開始する。その後は、部品同士がメッセージをやりとりしながら、協調して仕事を遂行することになるわけです。このような動作をするシステムを、オブジェクト指向システムと呼びます。

 Java言語はオブジェクト指向開発のためのものです。オブジェクト指向プログラミングをしながら、オブジェクト指向システムを開発するための言語です。

4。これからすること

1)テキストは「分からなくても、まず全部を読んで、言葉を覚え、雰囲気をつかむ」。
2)それから、JBuilder 4 Foundationを自分のパソコンにセットアップする。
3)テキストの最初に戻って、例題をプログラミングしながら、2回目を読みながら体験する。
4)書籍「レファレンス」を購入するか、あるいは、JBuilder 4 のマニュアルがCD-ROMに残っているので、それをみて体系全体を知る。とりあえず、CD-ROMのなかの、pdfフォルダのなかの、java-jb.pdfをAcrobat Readerで開き。
  Part II. ch 9 Java言語の基本
      ch 10 Javaにおけるオブジェクト指向
      ch 11 Javaのクラスライブラリ
くらいは、読んでおこう。
5)抽象時計、デジタル時計、アナログ時計を作ってみる(『日経ソフトウエア』2000年9月号pp.72-29)。ただし、バージョンが異なるので、やり方は異なるだろう。
6)JBuilder初心者向け講座もある。ボーランド  http://www.borland.co.jp/jbuilder/papers/javamadness/