オブジェクト指向言語– 第 1 章 p.1

第 1 章 Java

1.1 Java とは1995 年、Sun Microsystems 社から公表された、比較的新しい言語である。文法は、C あるいは C++と似ているが、。C++と同様、言語であるが、C++に比べて仕様になっている。なお、(ECMAScript) とは文法は似ている（JavaScriptが Java に文法を似せている）が、それ以外の関係はなく全く別の言語であるので注意する必要がある。

1.2 Java の特徴
Java は、誕生当時は Web ページにアニメーションと仕組みとして、世に広まった
WWW の基本的な応答をもたらすためのアプレットを使った場合の応答HTML だけを用いて書かれた Web 文書の場合は、ユーザがマウスをクリックするなどのアクションがあると、ブラウザはそのアクションを遠隔地の WWW サーバに伝え、その応答を待って新しい表示をする必要がある。
Java を使っている場合は、（applet）と呼ばれる Java のプログラムをサーバからブラウザへダウンロードする。するとユーザのアクションに対して、ブラウザの中で実行されているアプレットが即時に反応することができる。こうして、インタラクティブ性の高いページを記述することが可能になる。
Java の情報のページ
http://java.sun.com/
http://javanews.jp/（Java の故郷）
（日本語 Java News）

オブジェクト指向言語– 第 1 章 p.2

第1章

Java

このように、アプレットと呼ばれる Java のプログラムはネットワークを通じて別のコンピュータに移動して実行されることになる。このような使い方をするためにはとという特徴が重要になる。
安全性 これは、簡単にいえばアプレットを使って他人のコンピュータに悪戯をすることができない、ということである。もし、ホームページに任意のプログラムを埋め込んでブラウザ上で実行させることができれば、ハードディスク中のデータを消去してしまうなどのイタズラが簡単に行なえる。
安全性を保障するためには、まずプログラムにファイル操作などをさせない、などの制限を課する必要があるが、C のような言語では、ポインタ（アドレス）操作や無制限な型変換などの仕組みを通じて、いくらでも抜け道を作ることができる。Java はこのような抜け道がないよう設計されている。
一方で、アプレットでファイル操作などがまったくできないというのでは困る場合もある。そこで作成者が明確なアプレットにファイル操作などを許す署名つき（signed）アプレットという仕組みも用意されている。
可搬性 Web ページに埋め込まれるということは、さまざまな機種のコンピュータで実行される可能性があるということである。つまり、Java のアプレットに機種依存性があってはいけない。
を用いる実行方式ではプログラムが機械語に翻訳されるため、機種依存性は避けられない。一方、を用いる方式では、各機種毎にインタプリタを実装するだけで良いが、効率が犠牲になる。このため、Java ではという方法をとる。という仮想 CPU のコードに翻訳される。このJava のプログラムは Java コンパイラによって仮想コードを各 CPU 上の JVM エミュレータ（一種のインタプリタ）が解釈・実行する。

ॖথॱউজॱ‫ૄ্ش‬॥থঃॖছ‫ૄ্ش‬९‫ش‬५ই॓ॖঝ९‫ش‬५ই॓ॖঝ॥থঃॖঝ‫ق‬ᄽ๨‫ك‬CPUड़ঈ४ख़ॡॺই॓ॖঝॖথॱউজॱ‫ش‬

CPUCPUর৑॥‫ૄ্ॻش‬९‫ش‬५ই॓ॖঝ॥থঃॖঝ
‫ق‬ᄽ๨‫ك‬

JIT॥থঃॖছ‫ૄ্ش‬९‫ش‬५ই॓ॖঝর৑॥‫ॻش‬র৑॥‫ॻش‬

CPUJIT॥থঃॖঝ‫ق‬ৰষৎᄽ๨‫ك‬ड़ঈ४ख़ॡॺই॓ॖঝ

ෘ୳CPUCPU॥থঃॖঝ
‫ق‬ᄽ๨‫ك‬

CPUCPU1.3. オブジェクト指向プログラミング

オブジェクト指向言語– 第 1 章 p.3

この方法は Java プログラムを直接インタプリタで解釈・実行するよりは高速である。しかし、現在では JVM コードをより高速に実行するためにというものを用いて、JVM コードを実行しながら各 CPU の機械語へ翻訳する、という方法を用いる。
また、グラフィックスやネットワーク、スレッドに関する標準ライブラリを持つことも、それまでのプログラミング言語にはなかった重要な特徴である。
このように当初、Java はアプレットを作成するための言語として広まった。しかし、現在では、インタラクティブな Web ページを作成するためのブラウザ側の仕組みとしては、Macromedia (Adobe)Flash などが主流となって、Java アプレットは比較的マイナーな存在になっている。一方で Java の上記のような性質は、他の分野のアプリケーションでも役に立つため、現在はむしろアプレット以外のアプリケーション（例えば WWW サーバー側で動作する（Servlet）などのプログラ
ム）を作成するために、広く用いられるようになってきている。しかし、オブジェクト指向など Javaのさまざまな特徴を理解するためには、現在でもアプレットは良い教材である。
WWW サーバー側プログラム用のプログラミング言語としては、Perl, PHP, Python, Ruby なども有名だが、これらはを採用している。つまり、実行時まで型エラーは検出しない。Javaはこれらと違いを採用している。つまり、実行前（コンパイル時）に型エラーを検出する。一般に静的型付けは大規模で信頼性が必要とされるシステムの記述に適している。

1.3

オブジェクト指向プログラミング

Java はオブジェクト指向型プログラミング（Object-Oriented Programming, OOP）言語である。
言語・言語・言語・オブジェクト指向型言語などと、プログラミング言語を分類することがあるが、このような言語の分類は、主にプログラミング言語が備える部品化の仕組みに基づいている。
オブジェクト指向型言語に限らず、プログラムの部品を設計することは、単に利用することよりも格段に難しい。まずは、自分で独自のプログラム部品を設計するよりも、オブジェクト指向という仕組みのおかげで豊富に用意された Java の部品群を利用することを学ぶことが必要であろう。この節
では、オブジェクト指向型言語が用意する部品を利用するために必要な用語を紹介する。
オブジェクト指向（object-oriented）とは簡単に言えば、従来の手続きを中心としたプログラム部品（、）の利用に加えて、データを中心とした部品（）の利用を支援することである。関数（サブルーチン）はいくつかの手続きをまとめて一つの部品としたものだが、オブジェクトは、いくつかのデータ（関数 —（method）と呼ばれる—も含む）をまとめて一つの部品としたものである。

• 関数・サブルーチン
代入文 , 繰り返し文 , 条件判断文. . . などの手続きをひとまとめにしたもの• オブジェクト
整数 , 実数 , 文字列関数・サブルーチン（メソッド）

. . . などのデータをひとまとめにしたもの

実際には、プログラム部品として提供されるのは、オブジェクトそのものではなく、オブジェクト（class）である。クラスは、そこから生成されるオブジェクトが（具の雛型とでもいうべきオブジェクト指向言語– 第 1 章 p.4

第1章

Java

体的なデータ （つまり、1 とか 3.14）ではなく）どのような名前と型の構成要素を持つか、のみを指定したものである。クラスを具体化 （instantiate — つまり、x という名前の int 型の構成要素は 1 で、y という名前の float 型の要素は、3.14 などと定めること）したものがオブジェクトである。このとき、このオブジェクトはもとのクラスの（instance, 具体例）である、という。
オブジェクトを構成している個々の構成要素を（field）あるいは（instance variable）、（member）、という。ただし、関数型の要素は（method）と呼ぶのが普通である。オブジェクトのメソッドを起動することを、擬人的にオブジェクトに（message）を送る、と表現することがある。
正確に言えば、メソッドについてはインスタンスごとにコードを定義するのではなく、クラスごとにコードを定義する（ようになっているオブジェクト指向言語が多い）。オブジェ
クトは各フィールドのデータの他に、どのクラスに属しているか、という情報を持っていて、それによって適切なメソッドのコードが起動される。
複数のオブジェクトがフィールドに内部状態を保持し、互いにメッセージを交換して、その内部状態を変更していく、というのがオブジェクト指向のプログラムの実行のイメージである。
従来型言語では、部品の再利用方法は、既存の部品を関数・サブルーチンとして呼び出すだけだったが、オブジェクト指向型言語では、それに加えて既存の部品（つまりクラス）を少しだけ書き換える（, inherit）、という形の再利用の方法が可能になる。手続き型言語ではプログラムの “幹” の部分を変えて “枝” の部分だけを再利用することができたが、オブジェクト指向型言語では、“枝” の部分を変えて “幹” の部分を再利用することもできるのである。

手続き型言語のイメージ

オブジェクト指向言語のイメージ

最近のソフトウェアではユーザーインタフェースの部分（“枝” の部分）が重要であることが多いので、オブジェクト指向という考え方が特に必要となってきている。オブジェクト指向言語は GUI 部品（ボタンやテキストフィールドなど）のような特定の用途の多種のデータ型が必要とされるプログラミングに適している。

キーワード:
Java, C, C++, JavaScript, オブジェクト指向、アプレット、中間言語方式、JIT コンパイラ、サーブ
レット、オブジェクト、クラス、インスタンス、フィールド（インスタンス変数）、メソッド、継承