前回の「コメントと制御文でJavaプログラムに“命”を吹き込め!」までで、駆け足ですがJavaプログラミングの基本中の基本を学びました。
まだ学ばなければならない基本は残っていますが、基本ばかりが続いてもモチベーションが下がってしまうでしょう。なので、今回は、どのようにしてプログラム全体を組み立てるか、という視点に基づいてケータイ(本連載では、携帯電話/PHS/スマートフォンなどの端末をまとめて「ケータイ」と表記します)Javaプログラミングを解説します。
すべては「エントリポイント」から始まる
実行可能なプログラムなら、どんなプログラムでも、プログラムが開始する場所があります。そしてその場所は、プログラミング言語やプログラムの種類によって決まっています。
今回も、例によって連載第1回「あなたの携帯電話でJavaアプリは動きますか?」でデモしたテトリスみたいなゲーム「Trimis」のアプレット版のものです。まずは、「Trimisアプレット版」のソースコードをこちらよりダウンロードして、テキストエディタで開いておいてください。
今回からJavaアプレットとiアプリ、MIDletを比較していき、次回からいよいよアプレットをiアプリやMIDletに移植しながら解説していきます。
さて、プログラムが開始する場所についてですが、この最初に呼び出されるメソッドのことを「エントリポイント」と呼びます。Javaの場合は基本的に、「main」という名前のメソッドがエントリポイントと決まっていて、そのメソッドを起動時に指定することで、そこから実行されるのですが、アプレットやiアプリ、MIDletでは特定のクラスの特定のメソッドがエントリポイントになるというルールに変わっています。
スーパークラス | メソッド名 | |
---|---|---|
アプレット | java.applet.Applet | public void init() |
iアプリ | com.nttdocomo.ui.IApplication | public void start() |
MIDlet | javax.microedition.midlet.MIDlet | protected void startApp() |
エントリポイントが決まっているので、アプレットはAppletクラスを、iアプリはIApplicationクラスを、MIDletはMIDletクラスを「継承」しなければなりません。「スーパークラス」と「継承」というキーワードについては、次回以降に解説します。
プログラムは「ライフサイクル」で輪廻する
ケータイでアプリが動作しているときに電話がかかってきたら、動いているアプリはどうなるでしょうか? そういう場合、大抵のアプリはケータイにより一時停止され、ケータイは着信画面を出して、着信音を鳴らします。
アプレットはWebブラウザ上で動作しますが、Webブラウザの[戻る]ボタンや[進む]ボタンが押されると、アプレットは停止や再開を行います。
アプレットとiアプリとMIDletのライフサイクルを以下の図1〜3に示します。それぞれの状態に移る際に呼び出されるメソッドが決まっており、このメソッドを実装することでアプリをライフサイクルに合わせてプログラムします。
アプレットもiアプリもMIDletも、起動直後は「実行中」という状態まで自動的に進みます。つまり、アプレットなら「init()」→「start()」と、iアプリなら「start()」が、MIDletなら「startApp()」が自動的に呼び出されます。なんとなくアプレットのソースコードをiアプリやMIDletに移植する手掛かりがつかめたのではないでしょうか?
次ページでは、イベント駆動やインターフェイスについて説明します。
コラム 「プログラミングで何をやりたい? 何ができる?」
私が学生時代にプログラミングを勉強していたとき、友人が漏らした「『a=1+1』でaに2が代入されるのは理解できるんだけど、そういう数式を組み合わせて、いったいどうやって画面を描いたりするんだろ?」という素朴な疑問がいまでも印象に残っています。
著者にもプログラムでやりたいことができなかった時代がありました。ローマは一日にして成らず、最初は耐えなければなりません。
プログラムで「何ができて何ができないか」という知識を得るのは、プログラミング言語の文法を覚えた後の最初の試練でしょう。プログラミングの習得は、文法だけ覚えてもそれは入り口でしかなく、その先のライブラリAPIの使い方をマスターしなければ、プログラミング言語を修めたとはいえません。
ライブラリAPIはとてもたくさんあるので、身近なところから少しずつ覚えていくのがコツだと思います。
Copyright © ITmedia, Inc. All Rights Reserved.