1-2: Java言語の特徴


・ Javaはプログラミング言語として数多くの特徴を備えています。 特に以下に挙げる点は重要です。

  1. オブジェクト指向の徹底
  2. 簡潔で学習が容易
  3. マシンやシステムを選ばない
  4. 高いパフォーマンス
  5. マルチ・スレッドに対応
  6. 標準のクラス・ライブラリが整備
  7. 高い安全性

1) Javaはオブジェクト指向の完全な実現の方針の下に設計されました。 たとえば C++ が C の機能を全て盛り込もうとして、 オブジェクト指向を徹底できなかったのとは対照的です。 プログラムはすべてクラス定義を単位に構成されます。 仮想マシンによるオブジェクトの管理の方針もきわめてシンプルで首尾一貫しています。
「オブジェクト指向」と聞くと「敷居が高い」と感じる人もいるかもしれません。 確かにオブジェクト指向の言語は従来の言語に比べると、 最初に覚えるべき約束事が多くなる傾向があります。 大規模なプログラム開発には必要かもしれませんが、 簡単な入門用のプログラムに対して親切な設計とは言えないでしょう。 しかし、幸いなことに Javaは違います。 後で述べるように、その文法はできるだけシンプルになるように配慮されています。 また JDK という優れた「道具箱」が既に存在するため、 入門者にとっても「すぐに使える」言語です。

2) Javaは、「機能の豊富さ」と「言語の簡潔さ」の バランスを十分に考慮して設計されました。 本当に必要とされる機能だけを厳選して組み込んでいます。 ここでも、「何でもできる」ことを追求して肥大化してしまった C++ と対照的です。
Java言語は全く新しい言語であるにもかかわらず、データの型の名前や 制御構造などの記述法をできる限り C 及び C++ に近づけています。これは、 多くのプログラマーにとって最もなじみやすいインターフェイスを採用することで、 学習の労力を省こうという配慮です。

3) JavaのコードはマシンやOSに依存しません。 「Java仮想マシン(JVM)」もしくは「Javaインタープリタ」と呼ばれる ソフトウェアを通じて実行されるからです。 移植やリコンパイルなどの作業は一切不要です。 必要になったその時に、 ネットワークを通じて直接ロードすることも可能になります。
もちろん正確に言えば、 現時点で世界中の全てのマシンが Javaのアプリケーションを 実行できるわけではありません。 それぞれのシステムごとに仮想マシンが開発されなくてはいけないからです。 Sunは Windows95/NT のPC および Solaris に対して最新バージョンのサポートを行っています。 その他の主要 OS、たとえば MacOS、 OS/2 、Solaris以外の UNIX など、 多少のバージョンの遅れは存在しますが、 ほとんどが Javaへの対応を行っています。 最近、特に注目を集めている Linuxの上でも JDK1.1が動作するだけでなく、 JDK1.2の実験版も公開されています。Sunも Linuxへの積極的な協力姿勢を 見せており、近い将来 Solaris,Windowsと並んで正式なサポートが 提供されるようになるでしょう。 また、いわゆる「ネットワーク・コンピュータ(最小限の構成でアプリケーションを ネットワークから読み込んで使用するタイプのマシン)」 では Javaのシステム自身を OSとすることが主流です。 事実上、世界の大半のマシンはカバーされていると言ってもよいでしょう。

4) インタープリタ形式の言語は、一般に処理の効率が低下するのが常識です。 しかし Javaには、それを防ぐ工夫がなされています。 Javaのソース・プログラムは、 そのままインタープリタによって処理されるわけではありません。 疑似的な「コンパイル」の作業によって、 「バイト・コード」と呼ばれるファイルに変換されます。 バイト・コードは人間の言葉の命令を仮想マシン用に符号化したものです。 そのため処理の効率を落とすことなく実行が可能になります。 エラーに対するチェックも、コンパイル時にできるだけ厳密に済ませることで、 実行時の負担を減らしています。
Javaの実行効率を向上させる技術は常に進歩しています。 JIT(Just In Time)コンパイラと呼ばれる方式では、 読み込んだバイトコードをその場でマシンのハードウェアに合わせたコードに 変換します。 特定のマシンやシステムに固定されて用いられるアプリケーションの場合には、 あらかじめそれに合わせてバイトコードを再コンパイルすることも可能です。 (二度手間のように思えますが、開発効率の向上や配布作業の省力化という意味で、 明らかにメリットがあります。) いずれにせよ、今後登場してくる「100% pure Java」の商用アプリケーションは、 従来のものと遜色ない実行効率を実現するでしょう。

5) 現在のOSの多くは、1つのプログラムの処理を さらに複数に分割して処理することが可能になっています。 その分割された処理のそれぞれを「スレッド」と呼びます。 Javaのプログラムの中では このスレッドを用いた並列処理を手軽に取り扱うことができます。 従来のプログラムでは扱いにくかったような、 並列処理向きの問題解決へ応用を期待できるでしょう。 また複数の相手からの入力の監視を行ったり、 バックグラウンドで音楽を再生するようなプログラムも、 非常に単純に記述することができます。
また Javaの仮想マシン自身がスレッドを基本にして動作しています。 ガーベッジ・コレクション(使われていないメモリの自動的な解放の作業) 通常の処理と並列にバックグラウンドで実行されます。 したがって Lisp などのシステムで問題になった、 ユーザー・インターフェイスの低下(突然応答が悪くなる)は発生しません。

6) JDK(Java Development Kit) は 開発環境の一部として多数のクラスの集まりを提供しています。 これを「クラス・ライブラリ」と呼びます。 利用されることが多い機能のほとんどは、 既に用意されていると思ってかまいません。 Javaでアプリケーションを開発するプログラマーは、 ウィンドウ・システムやネットワーク通信のためのライブラリを 独自に準備する必要はありません。 全てのプログラマーは標準となるライブラリを共通に利用することになります。
しかも JDK のクラス・ライブラリは、 初心者でも容易に使いこなせる優れた設計になっています。 TCP/IP のプロトコルの詳細を知らなくても、 ネットワーク通信のプログラムを作ることが可能です。 ウィンドウ・システム上のアプリケーション開発においても同様です。 特別な経験や知識がない人でも、すぐに取り組むことができます。 必要とされる労力は、 従来の Xウィンドウや Windowsのためのプログラミングに比べて はるかに少ないでしょう。

7) Javaの最近の動向で特に重要なのがセキュリティ機能です。 JDK1.2 から安全性が高く、しかも柔軟なセキュリティ機能が提供されます。 従来の言語の場合、アプリケーションの安全性は言語の仕様とは全く独立です。 安全性を高めるために、アプリケーション開発者は独自の工夫を行う必要があります。 そしてアプリケーションの安全性のチェックは、 最終的にはユーザーにゆだねられます。 Javaの場合、 標準的なセキュリティのパッケージが JDKの中に含まれています。 どんなアプリケーションであっても Javaで開発されている限り ある一定のレベル以上の安全性が保証されるわけです。 ネットワークから入手した全く未知のアプリケーションでも、 その安全性のチェックを仮想マシンが行う自動的な判定にまかせることができるのです。

さて Javaの利点をいろいろ並べましたが、 本当にそんな「理想的」な言語なのでしょうか? 仮に優れた点を認めたとしても、今までの資産の蓄積を放棄してまで 「乗り換える」ほどの価値と魅力があるのでしょうか? あるいはもしかすると、次のような疑問を持った方もいるかもしれません。
「Java言語に真の意味で革新的なアイディアはあるのか? 特徴として挙げられたもののほとんどは、 Javaが最初に導入したというわけではない。」
この指摘はある意味で事実です。 Javaは「新しいアイディアの実験場」ではないからです。 むしろ洗練度や完成度の高さを競う「実用品」として評価を下すべきでしょう。 部分的には Javaと同じか、あるいは優れた機能を提供してくれる言語は いくつか存在します。 しかし「どの角度から見ても欠陥がない言語」というのは、 なかなか捜し出せないものです。
もう一度 Javaの特徴として挙げた項目を眺めてみてください。 すると、少し以前までは技術的に両立が困難だと考えられていた要求を、 無理なく組み込んでいることに気がつくでしょう。

など、すべてそうです。

というのも挙げていいかもしれません(?)。

という目標もほぼ実現されつつあります。
プログラマーが習得のため投資する労力に対して、 これほど短期間で大きな見返りを与えてくれる言語は 今だかつて存在しなかったでしょう。 この事実だけで Javaを学ぶ十分な理由になると思います。

・ 今や Javaの将来性に疑問を抱く人は、もはや存在しないでしょう。 これからの主力開発言語として Javaの比重が今後ますます高まっていくことは 間違いありません。 ネットワークをまたがるアプリケーションとそれらを組み合わせたシステムの構築、 マルチメディアとネットワークに対応したアプリケーションの開発、 こうした分野では、もはや Javaなしに開発を続けるのは困難と言ってもいいでしょう。