★登場人物★
- ミーコ : 株式会社 DS システム 開発第 2 チーム所属
- もっくん : 雲の妖精(雲の上に住んでいる)。ふわふわで優しいということになっている。
出会い
はー、今日も一日つかれた。入社してから二ヶ月間ひたすら名刺の渡し方の練習、長かったなあ。おかげで 名刺の渡し方を 128 通りも覚えちゃった。この会社大丈夫かな……。
とにかく、来週からようやくプログラミングができるのか。JAVA を教えてもらえるらしいんだけど、なんか不安だなあ。でも、昔 JAVA スクリプトで球を動かすみたいなの作ったことあるし、だいじょうぶかな……。
呼んだモク?
うわ! びっくりした! 呼んでない! 小さい! 白い! すごい頭! ていうかあんた誰?
もっくんモク~
……え、誰?
……そう。雲の上に住んでいてふわふわで優しい雲の妖精でくも子ちゃんのお友だちでもあるあなたが IT について私に教えてくれるってわけ。ありがとう。でもどうして? ていうかくも子ちゃんって誰?
暇だからモク~
……まあ、いいか。私も今日はご飯食べる約束してた 3 人に予定ドタキャンされて暇だったし。いいよ。教えてよ。
Java ってなんなんだろう。
私ね、来週から JAVA をやることになったの。でも、JAVA って難しそうだからなんだか不安で。JAVA スクリプトやったことあるし、大丈夫かな、とも思うんだけど。それにね、会社には色んな案件を担当している人がいて、色んなプログラミング言語を使っているでしょう? あんなにいっぱい覚えられる気がしないし、 そもそもなんであんなにいっぱいあるのよ! って思って。だいたいさ、
待つモク! いっぺんに聞かれても答えられないモク。
あ、ごめんね。
Java について知りたいモク?
うん、そうね。JAVA を教えてもらえることになってるから、はじめは JAVA のこと知りたいな。
JAVA じゃなくて Java モク。
え、JAVA じゃなくて ジャバ? *1
Java モク!!
ちょっと!! 大きな声出さないでよ、耳がキーンってなったわ。……わかったわよ、Java ね。
Java の特徴
Java はクロスプラットフォームの言語
Java は、 クロスプラットフォームの言語として登場したモク。
誰?
Crosp Lattform (1564-1616) *2
クロスプラットフォームというのは、 その言語が複数のプラットフォームで動作するということモク。具体的には、Java は Windows、Linux、Mac OS、UNIX などのさまざまな OS で動くモク。
無視しないでよ。人がボケてるんだからちゃんと突っ込みなさいよね。
……。
クロスプラットフォーム、知ってるわよ。 一つのプログラムが、色んなマシンとか、OS で動くってことよね。それくらい、名刺の渡し方研修の中で習ったわ。当然でしょ?
……。
便利よね。シー言語とかだと、そうはいかないんでしょ?
そうモク。ミーコはどうして Java がクロスプラットフォームになるかわかるモク?
わかんない。
ちょっとは考えるモク。
うーん。ラットフォーム家秘伝の魔術を運用しているから?
そうモク。Java は、 Java VM(仮想マシン)という Java 言語を実行するための環境をプラットフォーム上で動作させて、その Java VM 上で Java 言語を動作させるモク。 Java VM がプラットフォームごとの違いを吸収してくれるから、Java 言語で書かれた一つのプログラムが複数のプラットフォームで動作するモク。
……。
たとえば Windows でも Linux でも同じように動作するプログラムを C 言語でつくろうと思ったら、それぞれの OS 独自の API を学んで、それぞれの OS のためにプログラミングして、コンパイルする必要があるモク。でも、Java なら 一度書くだけで両方で同じように動くから、らくらくポンモク。
……ふーん、なるほど。なんか、Java っていい言語なのね。楽しみになってきたかも。
実際そうモク。
逆に Java のダメなところとかはないの?
たとえば、動作速度は C 言語のほうが速いモク。古いバージョンの Java には遅いというイメージを持っている人も結構多かったモク。とはいえ、 Java も改良を重ねて、今では色々ある言語のなかでもかなり速い方に入るモク。
なるほどお。Java 最高じゃん!
(まあ、僕は Scala の方が好きだけど……)
Java はオブジェクト指向の言語
Java のもう一つの大きな特徴として、 オブジェクト指向があげられるモク。
オブジェクト指向?
(ボケないのか……)
Java では「 クラス」を使って 振る舞いとデータをひとまとまりのものとして表現するモク。そういう風にカプセル化を実現する仕組みを持っているのがオブジェクト指向言語で、Java はオブジェクト指向言語モク。
フルマイトデータ……カプセル化……。
ファイブスター物語は関係ないモク。
なにそれ?
……。
コンピュータは、「データ」を「処理」することで動くモク。だから、プログラミングはデータを処理する手順を記述することとも言えるモク。ここで、C 言語のようなオブジェクト指向じゃない言語では、その処理(振る舞い)とデータをまとめて扱う方法を提供していないモク。でも Java はオブジェクト指向の言語で、「クラス」によってそれを提供しているモク。Java では、クラスに付属するデータのことを「フィールド」、処理(振る舞い)のことを「メソッド」とそれぞれ呼んでいるモク。
俺たちのフィールド *3 、鍵泥棒のメソッド *4 ……。うーん、新しい単語がいっぱい出てきてたいへん! ……あれ、でも、振る舞いとデータを一緒にして、何が嬉しいの?
いい質問モク。 振る舞いとデータを一緒にすることで、さっきも言った カプセル化を実現しやすくなるモク。
カプ=セルカ。
Caps Cerca (B.C.1 - A.D.65) *5
テンポが悪くなるから無理やりボケなくていいモク。
プログラムは、小さなものだったら思ったとおりに書けばいいモクが、大きくて複雑なシステムを作るときには、カプセル化が必要になるモク。カプセル化は データや、振る舞いや、型を隠ぺいすることモク。隠ぺい、隠ぺい、隠ぺいモク。
隠ぺいって、なんか悪いことしてるみたいね。でも、どうして、大きくて? 複雑な? システムを作るときに隠ぺいが必要なの? データを? 横領? するため?
(意味がわからない……)
なに? 言えないの? もっくんも横領してるの?
うるさい黙れモク。色々なものを隠ぺいするのは、簡単に言うと、 複雑さと付き合うためモク。
なにそれ?
つまり、大きくて複雑なシステムは、たくさんのソースコードからできていて、その内容もやっぱり複雑モク。 人間は複雑すぎるものを一度にまとめて考えることができないから、せめてソースコードを部分に分けて、見なくていいところは見えないようにするモク。
ソースコードって、あれよね。プログラミングの、書いたもののことよね。ふーん、見なくていいところがあるのか……。
そうモク。もちろん、すべてのソースコードは意味があって書かれているモク。でも、 システムのある部分の動きを考えるときに、システム全体の細かいところまで把握しつくしている必要はないはずモク。
なるほどー。たしかに、パソコンのソフトをインストールするときに、パソコンの CPU がどういう命令を実行して、ハードディスクのどの部分に書き込んで……なんてことを考えないものね。そんなことなんか考えてたら、パソコンなんて使えない。パソコンも、システムだよね?
そう、そうモク。ミーコ、なかなかやるモク。
名刺渡し準一級ですから。
それから、詳細を隠ぺいすることで、 あとから中身をよりよいものに取り替えることもできるモク。
里子さんがやってる食堂でこないだジューシーハンバーグ定食の名前も値段も変えてないのに突然肉の量を半分にして豆腐で埋めたみたいなものか!
よりよいものにって言ってるモク。でも、あながち間違ってはいないモク。もし、それでも味が変わっていなかったり、もしかしてよくなっていたりしたら、それはやっぱりカプセル化の効果があったと言えるかもしれないモク。もしこれが「ジューシー 和牛ハンバーグ定食」という名前だったら、たぶん法律かなにかに触れてしまうモク。
うんうん。里子さんすごくって、前のやつと並べて食べてもどっちがどっちだか全然わかんないんだよ。
(それはミーコの舌があれなのでは……)この場合、 原材料(データ)と調理法(処理)を厨房(クラス)にまとめて隠ぺいしていることになるモクね。ほんとに味が同じなら、お客さんにとって、出てくるものは同じ「ジューシーハンバーグ定食」モク。ていうか、サトコさんって誰モク。
里子さんは、わたしのおばさん。ありがとね、聞いてくれて。そっか、食堂もカプセル化してるんだー。今度「カプセル食堂」に改名したらって言ってみようかな。
……。とにかく、ミーコもきっと将来は大きなシステムに関わることになるから、カプセル化を理解しておくことはだいじモク。
ふーん。まあ、覚えとくね。
(大丈夫かな……)
JavaScript との違い
あ!!
!!!
そういえばね、わたし、ちょっとだけ Java スクリプトをやったことがあるの。
(耳がキーンってなったモク……)
Java スクリプトでね、球を動かしたの。あれはたのしかったな……。Java スクリプトは、Java の仲間だから、やっぱりクロスプラットフォームで、オブジェクト指向なんだよね? むかしやってたことが、役に立つかな?
球って何モク……。
球は、球だよ。丸いやつ。知らないの?
その質問の意味がよくわからないモク。でも、なんとなく事情は察したモク。 JavaScript で、ブラウザで動くゲームみたいなものを作ったモクね?
ブラウザ? そうそう、ブラウザで動いてた気がする、そういえば。
そうモクね…… JavaScript は、Java の仲間じゃないモク。
えっ!!!?
(耳が……)
(後編へつづく)
*1 ジャバ
*2 肖像画は William Shakespeare (1564-1616)
*3 http://ja.wikipedia.org/wiki/俺たちのフィールド
*4 http://ja.wikipedia.org/wiki/鍵泥棒のメソッド
*5 写真の像は Lucius Annaeus Seneca (B.C.1 - A.D.65)、写真は Jean-Pol GRANDMONT による