2020年3月19日木曜日

もう一つのJavaアプリケーション開発環境 BlueJ

要旨教育向けの、Javaアプリケーション開発環境として、BlueJがあります。大学で使用されている下記の著名なJava教科書の幅広い例題をこれで稼働させて、その有用性確認しました。

BlueJについて
   Javaアプリケーション開発環境として、Eclipseは広く普及しています。これに対して、BlueJ[1]は、約20年の歴史を持つ、教育向けの優れたJava開発環境として知られています。Oracleがサポートし、J. Goslingも絶賛しています!国内では知名度はあまり高くないようですが、日本語解説書[2]もあります。Eclipseは、Java以外の言語での開発も可能な非常に高機能なのに対して、BlueJはJavaに特化した簡潔で親しみやすい特徴があります。したがって、もしも、現在大学のJava授業で使われている最も高度と思われる教科書[3]の例題が、全て完全に動くのであれば、BlueJを使うという選択肢も生まれるのではないか。今回の記事はそれを検討したものです。


今回の実証実験に使用した教科書の例題
   多くの大学で利用されており、Javaの基本事項を幅広く網羅した高度で精緻な以下の教科書[3]の例題を対象としました。これらの例題は、Java8に準拠したものですが、BlueJの最新版はJava11に準拠しています。したがって、言語仕様面からは問題なくBlueJでも動くはずです。しかしながら、現実には、実行環境の相違などから問題があるかも知れません。それを確認するのです。


   この教科書の例題は膨大な数に上りますので、できるだけ広範囲に考えて、以下の8題を選択して検証することにしました。

第5章:T51.java
  (1)クラスとメソッドを説明する、簡単なタートルグラフィックス
第6章:Args61.java
  (2)mainメソッドに実行時に与えられるパラメータの利用
第12章:ExecutorExample.java
  (3)エグゼキューターサービスを用いた平行実行。ラムダ式も使用。
第12章:StreamTurtle.java
  (4)並列ストリームの処理の流れ。ラムダ式も使用。
第14章:Standup.java
  (5)JavaFX、CSSファイル、アクションイベント処理
第15章:ShapeEventExample.java
  (6)JavaFX、マウスによるShapeイベント処理
第16章:FileReadWrite2.java
  (7)テキストファイルを行毎に読んで表示
第17章:WeatherClient.java
  (8)HTTPクライアント。外部jarでJSONファイルデコード。

BlueJのプロジェクトとパッケージ
   ここでは、Mac版BlueJを使いますが、特に何の設定も無しにすぐに使えます。Windows版でも同じだと思います。また、Raspberry Pi等には標準でBlueJが組み込まれているようです[4]。
 
   上記例題のJavaソースファイルは、それが属する章の名称(例えば第17章ならばchap17)のパッケージに入っています。BlueJのプロジェクトでも、パッケージ構造はそのまま使うことができます。下図をごらん下さい。なお、各パッケージを開くと、それに属するJavaソースファイル名を確認できます。クラス間の依存関係は、自動的に矢印で表示されます。非常に見やすく、親しみやすいと感じます。


BlueJでの実行状況
   予想どおり、上記8題は特に問題なく、完全に動作しました。ソースコードの変更は一切不要でした。言語仕様の上位互換性からこれは当然ではありますが。ただし、画像ファイル、テキストファイル、CSSファイルの配置場所は、プロジェクトの直下にします。これは、Eclipseの場合と同じですが、環境が違うので注意が必要です。また、例題(8)でのJSONを扱うための外部jarファイルを取り込む手順、例題(2)でのmainメソッドに実行時パラメータを与える方法に注意すればよいです。詳細は、末尾のTipsをご覧下さい。

   以下に、例題(3)と例題(8)の実行状況を示します。ソースファイルエディタも、構造が色分けされて見やすいと思います。



結論
   以上の検討結果(8題の実行実験)から、恐らく、この教科書のぼぼ全ての例題は問題なく実行できるという感触を得ました。したがって、BlueJは、大学でのJavaプログラミング環境として十分活用できると思われます。Eclipseよりも軽快であり、必要にして十分な機能があると考えます。特に、初心者にはより優しい環境であり、親しみやすく、取り組む意欲を低下させないと言えます。

Tips ...

 (1) 画像、テキスト、CSSファイルの配置
   プロジェクトの直下(パッケージの中ではなく)置けば、"lay.jpg"のように、ファイル名を直接指定することで参照できる。もしも、これ以外の別の場所に置くのであれば、以下のように、絶対パスで参照すればよい。
private static final String RESULTS_FILE = "results.txt”;
Path resultsFile = Paths.get(RESULTS_FILE).toAbsolutePath();
FileWriter writer = new FileWriter(resultsFile.toString());
また、例えば、 "results.txt”ファイルをパッケージresに置くのであれば、"/res/results.txt"として参照できる。
CSSファイルは、プロジェクトの画面に出現するが、テキストや画像ファイルはそこには現れないので、別途何らかの方法で参照する。

 (2) 外部jarファイルの追加
   jarファイルを、プロジェクトの直下へ配置する。その後、
BlueJ -> カスタマイズ -> ライブラリで「ユーザライブラリ」に、AddFileを押して、jarファイルを指定 -> OKを押す。
その後、BlueJを再起動すれば、そのjarファイルのクラスをimportできる。

 (3) mainメソッドの引数に、実行時にパラメータを渡す
   mainメソッドを起動するウインドウに{ }が出現するので、その中に、以下のようにパラメータを指定する。各パラメータとも、ダブルクオーテーションが必要。
例:{"apple", "orange", "10"}

参考資料
[1] BlueJ公式Webサイト
https://www.bluej.org
[2] 深瀬欽正:Java新入門 学習環境BlueJでスイスイ、リックテレコム
[3] 立木秀樹・有賀妙子:すべての人のためのJavaプログラミング第3版、共立出版
https://www.i.h.kyoto-u.ac.jp/users/tsuiki/javaEveryone3/index.html
[4] Raspberry PiでのJavaコーディング
https://www.oracle.com/webfolder/technetwork/jp/javamagazine/Java-JF15-NewToJava.pdf



0 件のコメント:

コメントを投稿