もっくんのもくもくIT入門塾 第一回「プログラミング言語」(前編)

Avatar
dstn

★登場人物★

  • ミーコ : 株式会社 DS システム 開発第 2 チーム所属 
  • もっくん : 雲の妖精(雲の上に住んでいる)。ふわふわで優しいということになっている。 

出会い

miko_normal はー、今日も一日つかれた。入社してから二ヶ月間ひたすら名刺の渡し方の練習、長かったなあ。おかげで 名刺の渡し方を 128 通りも覚えちゃった。この会社大丈夫かな……。

miko_smile とにかく、来週からようやくプログラミングができるのか。JAVA を教えてもらえるらしいんだけど、なんか不安だなあ。でも、昔 JAVA スクリプトで球を動かすみたいなの作ったことあるし、だいじょうぶかな……。

 

もっくん_small 呼んだモク?

 

miko_suprised うわ! びっくりした! 呼んでない! 小さい! 白い! すごい頭! ていうかあんた誰?

もっくん_small もっくんモク~

 

miko_normal ……え、誰?

 

 

~5 分後~

miko_normal ……そう。雲の上に住んでいてふわふわで優しい雲の妖精でくも子ちゃんのお友だちでもあるあなたが IT について私に教えてくれるってわけ。ありがとう。でもどうして? ていうかくも子ちゃんって誰? 

もっくん_small  暇だからモク~

miko_smile ……まあ、いいか。私も今日はご飯食べる約束してた 3 人に予定ドタキャンされて暇だったし。いいよ。教えてよ。  

Java ってなんなんだろう。

miko_normal 私ね、来週から JAVA をやることになったの。でも、JAVA って難しそうだからなんだか不安で。JAVA スクリプトやったことあるし、大丈夫かな、とも思うんだけど。それにね、会社には色んな案件を担当している人がいて、色んなプログラミング言語を使っているでしょう? あんなにいっぱい覚えられる気がしないし、 そもそもなんであんなにいっぱいあるのよ! って思って。だいたいさ、 

もっくんポカリ_small 待つモク! いっぺんに聞かれても答えられないモク。 

miko_normal あ、ごめんね。 

もっくん_small Java について知りたいモク? 

miko_smile うん、そうね。JAVA を教えてもらえることになってるから、はじめは JAVA のこと知りたいな。 

もっくん_small JAVA じゃなくて Java モク。 

miko_normal え、JAVA じゃなくて ジャバ? *1 

もっくんポカリ_small  Java モク!! 

miko_angry ちょっと!! 大きな声出さないでよ、耳がキーンってなったわ。……わかったわよ、Java ね。   

Java の特徴

Java はクロスプラットフォームの言語

もっくん_small Java は、 クロスプラットフォームの言語として登場したモク。 

miko_smile 誰? 

CHANDOS3 
Crosp Lattform (1564-1616) *2 

もっくんPOINT_small クロスプラットフォームというのは、 その言語が複数のプラットフォームで動作するということモク。具体的には、Java は Windows、Linux、Mac OS、UNIX などのさまざまな OS で動くモク。

miko_normal 無視しないでよ。人がボケてるんだからちゃんと突っ込みなさいよね。

もっくん_small ……。

miko_smile クロスプラットフォーム、知ってるわよ。 一つのプログラムが、色んなマシンとか、OS で動くってことよね。それくらい、名刺の渡し方研修の中で習ったわ。当然でしょ?

もっくん_small ……。 

miko_smile 便利よね。シー言語とかだと、そうはいかないんでしょ?  

もっくん_small そうモク。ミーコはどうして Java がクロスプラットフォームになるかわかるモク?

miko_smile わかんない。

もっくんポカリ_small ちょっとは考えるモク。

miko_normal うーん。ラットフォーム家秘伝の魔術を運用しているから?

もっくんPOINT_small そうモク。Java は、 Java VM(仮想マシン)という Java 言語を実行するための環境をプラットフォーム上で動作させて、その Java VM 上で Java 言語を動作させるモク。 Java VM がプラットフォームごとの違いを吸収してくれるから、Java 言語で書かれた一つのプログラムが複数のプラットフォームで動作するモク。

miko_normal ……。

もっくん_small たとえば Windows でも Linux でも同じように動作するプログラムを C 言語でつくろうと思ったら、それぞれの OS 独自の API を学んで、それぞれの OS のためにプログラミングして、コンパイルする必要があるモク。でも、Java なら 一度書くだけで両方で同じように動くから、らくらくポンモク。

miko_smile ……ふーん、なるほど。なんか、Java っていい言語なのね。楽しみになってきたかも。

 

もっくん_small 実際そうモク。

miko_normal 逆に Java のダメなところとかはないの?

もっくん_small たとえば、動作速度は C 言語のほうが速いモク。古いバージョンの Java には遅いというイメージを持っている人も結構多かったモク。とはいえ、 Java も改良を重ねて、今では色々ある言語のなかでもかなり速い方に入るモク。

miko_smile なるほどお。Java 最高じゃん!

もっくん_small (まあ、僕は Scala の方が好きだけど……)

Java はオブジェクト指向の言語

もっくんPOINT_small Java のもう一つの大きな特徴として、 オブジェクト指向があげられるモク。

miko_normal オブジェクト指向?

もっくんPOINT_small (ボケないのか……)

もっくんPOINT_small Java では「 クラス」を使って 振る舞いとデータをひとまとまりのものとして表現するモク。そういう風にカプセル化を実現する仕組みを持っているのがオブジェクト指向言語で、Java はオブジェクト指向言語モク。

 

miko_normal フルマイトデータ……カプセル化……。

もっくんPOINT_small ファイブスター物語は関係ないモク。

miko_normal なにそれ?

もっくん_small ……。

もっくんPOINT_small コンピュータは、「データ」を「処理」することで動くモク。だから、プログラミングはデータを処理する手順を記述することとも言えるモク。ここで、C 言語のようなオブジェクト指向じゃない言語では、その処理(振る舞い)とデータをまとめて扱う方法を提供していないモク。でも Java はオブジェクト指向の言語で、「クラス」によってそれを提供しているモク。Java では、クラスに付属するデータのことを「フィールド」、処理(振る舞い)のことを「メソッド」とそれぞれ呼んでいるモク。

miko_normal 俺たちのフィールド *3 、鍵泥棒のメソッド *4 ……。うーん、新しい単語がいっぱい出てきてたいへん! ……あれ、でも、振る舞いとデータを一緒にして、何が嬉しいの?

もっくん_small いい質問モク。 振る舞いとデータを一緒にすることで、さっきも言った カプセル化を実現しやすくなるモク。

miko_smile カプ=セルカ。

1024px-0_Sénèque_-_Musée_du_Prado_-_Cat._144_-_(2)
Caps Cerca (B.C.1 - A.D.65) *5

もっくん_small テンポが悪くなるから無理やりボケなくていいモク。

もっくんPOINT_small プログラムは、小さなものだったら思ったとおりに書けばいいモクが、大きくて複雑なシステムを作るときには、カプセル化が必要になるモク。カプセル化は データや、振る舞いや、型を隠ぺいすることモク。隠ぺい、隠ぺい、隠ぺいモク。

miko_normal 隠ぺいって、なんか悪いことしてるみたいね。でも、どうして、大きくて? 複雑な? システムを作るときに隠ぺいが必要なの? データを? 横領? するため?

もっくん_small (意味がわからない……)

miko_smile なに? 言えないの? もっくんも横領してるの?

もっくんポカリ_small うるさい黙れモク。色々なものを隠ぺいするのは、簡単に言うと、 複雑さと付き合うためモク。

miko_normal なにそれ?

もっくん_small つまり、大きくて複雑なシステムは、たくさんのソースコードからできていて、その内容もやっぱり複雑モク。 人間は複雑すぎるものを一度にまとめて考えることができないから、せめてソースコードを部分に分けて、見なくていいところは見えないようにするモク。

miko_normal ソースコードって、あれよね。プログラミングの、書いたもののことよね。ふーん、見なくていいところがあるのか……。

もっくん_small そうモク。もちろん、すべてのソースコードは意味があって書かれているモク。でも、 システムのある部分の動きを考えるときに、システム全体の細かいところまで把握しつくしている必要はないはずモク。

miko_smile なるほどー。たしかに、パソコンのソフトをインストールするときに、パソコンの CPU がどういう命令を実行して、ハードディスクのどの部分に書き込んで……なんてことを考えないものね。そんなことなんか考えてたら、パソコンなんて使えない。パソコンも、システムだよね?

もっくん_small そう、そうモク。ミーコ、なかなかやるモク。

 

miko_smile 名刺渡し準一級ですから。

もっくん_small それから、詳細を隠ぺいすることで、 あとから中身をよりよいものに取り替えることもできるモク。

miko_smile 里子さんがやってる食堂でこないだジューシーハンバーグ定食の名前も値段も変えてないのに突然肉の量を半分にして豆腐で埋めたみたいなものか!

もっくん_small よりよいものにって言ってるモク。でも、あながち間違ってはいないモク。もし、それでも味が変わっていなかったり、もしかしてよくなっていたりしたら、それはやっぱりカプセル化の効果があったと言えるかもしれないモク。もしこれが「ジューシー 和牛ハンバーグ定食」という名前だったら、たぶん法律かなにかに触れてしまうモク。

miko_smile うんうん。里子さんすごくって、前のやつと並べて食べてもどっちがどっちだか全然わかんないんだよ。

もっくん_small (それはミーコの舌があれなのでは……)この場合、 原材料(データ)と調理法(処理)を厨房(クラス)にまとめて隠ぺいしていることになるモクね。ほんとに味が同じなら、お客さんにとって、出てくるものは同じ「ジューシーハンバーグ定食」モク。ていうか、サトコさんって誰モク。

miko_smile 里子さんは、わたしのおばさん。ありがとね、聞いてくれて。そっか、食堂もカプセル化してるんだー。今度「カプセル食堂」に改名したらって言ってみようかな。

もっくん_small ……。とにかく、ミーコもきっと将来は大きなシステムに関わることになるから、カプセル化を理解しておくことはだいじモク。

miko_smileふーん。まあ、覚えとくね。

もっくん_small (大丈夫かな……) 

JavaScript との違い

miko_suprised あ!!

もっくんポカリ_small  !!! 

miko_smile そういえばね、わたし、ちょっとだけ Java スクリプトをやったことがあるの。 

もっくん_small (耳がキーンってなったモク……) 

miko_smileJava スクリプトでね、球を動かしたの。あれはたのしかったな……。Java スクリプトは、Java の仲間だから、やっぱりクロスプラットフォームで、オブジェクト指向なんだよね? むかしやってたことが、役に立つかな? 

もっくん_small 球って何モク……。 

miko_normal 球は、球だよ。丸いやつ。知らないの? 

もっくん_small その質問の意味がよくわからないモク。でも、なんとなく事情は察したモク。 JavaScript で、ブラウザで動くゲームみたいなものを作ったモクね? 

miko_normal ブラウザ? そうそう、ブラウザで動いてた気がする、そういえば。 

もっくん_small そうモクね…… JavaScript は、Java の仲間じゃないモク。 

miko_suprised えっ!!!? 

もっくんポカリ_small (耳が……) 

(後編へつづく) 


*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 による

コメント

ログインしてコメントを残してください。

Powered by Zendesk