プログラムの基本は、上から下に流れる。勿論、サブルーチンの定義でプログラムの最初に戻ったり最後に行って、また元の場所に戻ったりするが、それは処理の定義の仕方であり、原則プログラムは上から下に流れる。
前回、Java、C♯、C++、objective-C は、C言語から派生している。C言語から派生したこれらはオブジェクト指向言語として登場し、クラスと継承を利用することで生産性が格段に向上する。と記した。
ここで「オブジェクト指向」は何ぞや?だが、クラスとインスタンスと言う言葉が必ず登場する。
クラスとは、かって流行ったインベーダーゲーム。インベーダーを定義したものがクラス、そのクラスによって生成されたインスタンスがインベーダーたち。
たこ焼き屋なら、たこ焼きのプレートがクラス、出来たたこ焼きがインスタンス・・・よく「オブジェクト指向入門」で登場する説明文だ。
しかし、これから学ぼうと思う人にこんな例え話をしても、「だからどうなのさ?意味わかんない」となる。そりゃそうだ、現実の例をむりやりこじつけても理解に苦しむ。
アセンブラ言語の登場から、これまで幾つものコンパイラ言語は登場してきた。
コンパイラ言語はターゲットマシンに合わせて人間が組んだプログラムを機械語に変換してくれる。しかし、コンピュータが浸透しネットワークが普及すればするほど、ターゲットマシンは特定されなくなった。
パソコン一つとっても Windowsあり、Appleあり、UnixあるいはLinux かもしれない。そのOSだってOSのバージョンが変わるだけで仕組みが変わってくる。昨今はタブレットやスマホも登場している。
オブジェクト指向言語のJavaが普及した最大の要因は、Java VM(Virtual Machine)の概念を取り入れたことだ。
Javaで組んだプログラムをコンパイルすると、中間コード(Javaバイトコード)になる。ターゲットマシンはあらかじめこの中間コードを Java VM で機械語に変換する。
「何でそんな面倒なことをするの?」と思うかもしれないが、これには深い意味がある。
本来ならプログラムはターゲットマシンに合わせて機械語に変換される。CPUやメモリ空間、外部記憶装置とのやりとりなど機械語に変換されるのだが、この Java VM が各プラットフォームに用意することで、その中間コードをターゲットマシンに合わせた機械語に翻訳してくれる。
よって機種を意識しないでプログラムを作成することが出来る。
即ちコンピュータのハード上にあたかも仮想のコンピュータが出来て、コンピュータの機種やOSを超えて動作するのだ。だから Java VM(Virtual Machine)って言うんだけどね。
西暦2000年前後から Javaは急速に普及し、Java技術者は非常に優遇された。
もう、猫も杓子もJava Java と言い出し、Java技術者が不足した頃だ。