広告

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■
                      2009年11月18日

    Java総合講座 - 初心者から達人へのパスポート
                  2009年11月開講コース 001号

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■


-------------------------------------------------------
・水曜深夜発行のこのメールは、最近Java(プログラミング)
の学習を始めたばかりの人(プログラミング初心者)向けの
コースになっています。初心者でない人はこのメールは不要
と思われますので、破棄もしくは無視して下さい。
従来から当メールマガジンを講読されている方は、日曜深夜
発行のメールのみをお読み下さい。
・このメールマガジンは、画面を最大化して見てください。
小さな画面で見ていると、不適切な位置で行が切れてしまう
など、問題を起すことがあります。
・このメールマガジンに掲載されているソース・コード及び
文章は特に断らない限り、すべて筆者が著作権を所有してい
ます。また、これらのソース・コードは学習用のためだけに
提供しているものです。
-------------------------------------------------------


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(2009年11月開講コース)001号
 (当記事はvol.001のリバイバル(revival)版です。)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


================================================
◆ 00.はじめに
================================================

皆様、当メールマガジンをご講読いただき、ありがとうございます。

このメールマガジンは、初心者の方々にプログラミング言語Javaを
習得していただいて、最終的にはプロになっていただくためのもの
です。

できるだけやさしく説明していくつもりですが、いくらやさしくと
いっても限度があります。パソコンの基本操作から説明していくと
いうわけにはいきませんので、読者の皆様はパソコンの基本知識が
ある、ということを前提とさせていただきます。

もし、パソコンの基本知識についても不十分という人があれば、
下記ホームページにパソコン教室のテキスト(無料)がありますの
で、読んでおいてください。
http://www.flsi.co.jp/product/pctutor.htm


では、さっそく本論に入っていきます。

まず最初に、プログラミング言語とは何か、ということからお話す
ることにします。最初のうちは大雑把なイメージをつかんでいただ
くだけで十分です。

なお、できるだけ簡単にわかりやすく説明するために、少々おおざ
っぱで不正確な表現をすることもありますが、実用的には支障がな
いように考慮していますので、ご了承ください。

また、当メールマガジンの説明でわからないところがあれば、どし
どしと質問してください。質問先は文末に書いてあります。


================================================
◆ 01.プログラミング言語とは
================================================

コンピューターは、「機械語(machine language)」と呼ばれる特
殊な言語を理解できるように作られています。そして、機械語で書
かれた指示書を読み取って、その指示通りに計算などの情報処理を
行うように作られています。
この指示書のことを「プログラム(program)」と呼んでいます。
要するに、プログラム(指示書)は、コンピューターへの指示(命
令)をたくさん、順序よく書き並べたものです。

ところが、機械語と呼ばれる言語は、私たち人間が通常使っている
日本語や英語などの言語(いわゆる自然言語)とは異なり、数字の
0と1がずらずらと並んだだけのわかりづらい言語です。例えば機械
語で書かれたプログラムは
01100100101001110100101010010010010011101010001
00101101010010101101010100101010101110101001010
10100101100101001010010100101000101001001110101
10010010010101001100100100100101001001010100101
10100100101111001010101001010001010001011101010
00100100010110101010100101010100101010101010100
というような感じになります。(雰囲気だけ味わってください。)
このように0と1だけを使うのは、そのほうがコンピューターの電子
回路を作りやすいからという理由だけであって、人にとってわかり
やすいかどうかということはまったく考慮されていません。

こんなわけのわからない言語でプログラム(指示書)を書かなけれ
ばならないのでは不便でしようがない・・・・・・
というわけで、もう少し人が理解しやすい言語が発明されました。
それがプログラミング言語と呼ばれるものです。

(ちなみに、プログラムを作ることを「プログラミング
(programming)」と言い、プログラムを作る人を
「プログラマー(programmer)」と言います。)

自然言語にも日本語、英語、ロシア語などさまざまなものがあるよ
うに、プログラミング言語も実にさまざまなものが発明(開発)さ
れました。
そして、これから説明していくJavaもプログラミング言語の一つだ、
というわけです。

(言語といっても、プログラミング言語の文法(構文)は英語など
の自然言語よりもはるかに単純で簡単ですから、語学の苦手な人で
も楽に学ぶことができます。ただし、英語はプログラマーにとって
も大切ですから、苦手な人もちゃんと勉強しておいたほうがいいで
す。)

なお、プログラミング言語で書かれたプログラムはそのままでは
コンピューターが理解できませんので、コンピューターに理解さ
せるためにはいったん機械語に変換しておく必要があります。

通常はこの変換作業を「コンパイル(compile)」と言い、コンパ
イルは「コンパイラー(compiler)」と呼ばれるソフトウェアに
よって行われます。
いったん機械語に変換したプログラムは、コンピューターに読み
取らせて、その指示通りにコンピューターに計算などの情報処理
を行わせることができます。(このことを「プログラムを実行
(runまたはexecute)する」と言います。つまり、プログラムを
コンピューターに読ませて、その指示通りにコンピューターに処理
をさせることを「プログラムを実行する」と言います。)

機械語への変換作業を行うソフトウェアには他にインタープリター
(interpreter)というのもあります。インタープリターは、
(プログラミング言語で書かれた)プログラムから命令を一つ読み
取っては機械語に変換し、その命令をコンピューターに実行させ、
次の命令を一つ読み取っては機械語に変換し、その命令をコンピュー
ターに実行させるということを繰り返していきます。このようにし
てインタープリターは機械語への変換とプログラムの実行を同時に
やってしまいます。
それに対して、コンパイラーのほうは、プログラムの中のすべての
命令を一挙に機械語に変換してしまいます。そして、プログラムの
実行は行いません。

一般にプログラミング言語は機械語への変換手段としては、コンパ
イラーかインタープリターのどちらか一方だけを使うのが普通なの
ですが、Javaはこの点、ちょっと変わっています。
Javaはコンパイラーとインタープリターの両方を使い、コンパイ
ラーでコンパイルした後、インタープリターを使ってプログラムを
実行するのです。


もう少し詳しく言うと、Javaでは、コンパイラーを使ってプログラ
ムを変換しますが、機械語に変換するのではなく、「バイトコード
(bytecode)」と呼ばれる、機械語に近い別の言語に変換します。
そしてインタープリターを使ってバイトコードを機械語に変換させ
ながら同時に実行するのです。

なんでこんな二度手間みたいなことをするのかというと、次のよう
な理由があります。

まず、機械語はコンピューターの機種によって異なるため、機械語
に変換してしまうと特定の機種のコンピューターでしかプログラム
を実行できないことになります。したがって、コンピューターの機
種に依存せずにプログラムを実行できるようにするためには、機械
語に変換してしまうのは不都合です。この点、Javaではプログラム
をバイトコードに変換し、コンピューターごとにその機種に応じた
インタープリターを用意しておくことによって、どのコンピューター
でも同じバイトコードで実行できるようにしています。
(ただし一部、機種によって動作の異なる機能も含まれますので、
注意が必要です。この点については、また後ほど説明致します。)

たんにどのコンピューターでもプログラムを実行できるようにした
いのであれば、バイトコードなんていう特殊な言語に変換しなくて
も、最初からインタープリターがJavaで書かれたプログラムを直接、
機械語に変換しながら実行すればいいのではないか、と思われるか
も知れません。しかし、このやり方では、インタープリターの変換
作業に時間がかかるため、プログラムの実行が遅くなってしまいま
す。(一般に、インタープリターを使ったプログラムの実行は遅い
のです。)
それに対して、バイトコードは機械語に変換しやすいように工夫さ
れて作られており、またプログラムの実行速度を上げるためによく
工夫されているので、機械語のプログラムに匹敵するくらい速く実
行できるのです。(昔は、遅いと言われていた時代もありましたが。)

それから、Javaはインターネットなどのネットワークを通してプロ
グラムが転送されるときの効率も考慮して作られているのですが、
バイトコードは機械語のプログラムよりもずっとサイズが小さくて
済むように工夫されており、ネットワークの中をより速く転送させ
ることができるというメリットも持っているのです。また、小さな
装置にプログラムを組み込む場合にも、サイズが小さいという特長
は重要です。

また、このようにインタープリターだけでなくコンパイラーも併用
する方式にはプログラムの品質の観点でもメリットがあります。
つまり、コンパイルの段階でプログラムのミスをチェックできる
ため、プログラムの実行時に問題が発生する確率が減ります。


このJavaのインタープリターはJVM(Java Virtual Machineの略。
「Java仮想マシン」と翻訳されることが多いが、ここでいうマシ
ンはコンピューターのことを意味する)と呼ばれており、Javaの
バイトコードは、JVMという仮想的なコンピューターで実行される
仮想的な機械語と見なされます。
つまり、コンピューターの機種による機械語の違いをJVMが吸収し
て、バイトコードという共通の仮想的機械語を実行できるようにし
てくれるわけです。

というわけで、「Javaを使ってプログラムを作る」ということは、
(1) Javaという言語でプログラムを書き、
(2) それをコンパイルしてバイトコードに変換する。
という作業を意味し、「Javaのプログラムを実行する」というこ
とは、
(3) バイトコードをJVMで実行する。
という作業を意味することになります。



================================================
◆ 02.演習問題
================================================

今回は、とってもやさしい問題になっております。
答は次回のメールマガジンで発表します。

1.コンパイルを行うソフトウェアは次のうちのどれですか?
a. コンパ  
b. パイナップル  
c. ボイラー  
d. コンパイラー

2.Javaのプログラムをコンパイルすると、次のうちのどれが
できますか?
a. コードレス  
b. バイトコード  
c. ダビンチコード  
d. レインコート

3.Javaのプログラム(コンパイルした後のもの)を実行する
ためには、次のうちのどれが必要ですか?
a. JVM  
b. JAM  
c. パン  
d. コーヒー

4.JVMは何の略ですか?次の選択肢から選びなさい。
a. Jack Vending Machine  
b. Japanese Vending Man  
c. Java Virtual Machine  
d. Japanese Vector Map


答がわからない人は、復習をしてください。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


(次回に続く)


では、今日はここまでにします。



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2009 Future Lifestyle Inc. 不許無断複製