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

第1章

Java

1.1 Java とは1995 年、Sun Microsystems 社から公表された、比較的新しい言語である。
（ Sun
Microsystems 社は 2010 年に Oracle Corporation に吸収合併された。）文法は、C あ（ 空欄 1.1.1 ）るいは C++と似ているが、互換性はない。C++と同様、（ 空欄 1.1.2 ）言語であるが、C++に比べてシンプルな仕様になっている。なお、(ECMAScript) とは文法は似ている（ JavaScript が Java に文法を似せている）が 、それ以外の関係はなく全く別の言語であるので注意する必要がある。

Q 1.1.1 次の文章のうち、正しいものに○、誤っているものに×をつけよ。
1.  Java の文法は C 言語に似ており、そのため、Java のコンパイラは C 言語のソースファイルをコンパイルすることも可能となっている。
2.  Java はオブジェクト指向言語であるが 、C++言語との互換性は持っていない。
3.  Web ブラウザ上でインタプリタ方式で実行する Java プログラムのことをJavaScript と呼ぶ。
4.  JavaScript は Java のサブセットであり、JavaScript のプログラムは Java プログラムとしても実行することができる。

1.2 Java の特徴
Java は、誕生当時は Web ページにアニメーションとインタラクティブ性をもたらすための仕組みとして、世に広まった
WWW の基本的な応答ॡছॖ॔থॺ‫ق‬ট‫ش‬ढ़ঝ‫ك‬१‫ش‬ং‫ش‬‫ق‬জঔ‫كॺش‬:HEঈছक़२‫ش‬
ਏ੷
॔ॡ३ঙথ

਀ં

アプレットを使った場合の応答ૢ௦:HE१‫ش‬ং‫ش‬ॡছॖ॔থॺ
‫ق‬ট‫ش‬ढ़ঝ‫ك‬१‫ش‬ং‫ش‬‫ق‬জঔ‫كॺش‬:HEঈছक़२‫ش‬
ਏ੷
॔ॡ३ঙথ
॔উঞॵॺ

਀ં

ૢ௦

:HE१‫ش‬ং‫ش‬オブジェクト指向言語 – 第 1 章 p.2

第 1 章 JavaHTML だけを用いて書かれた Web 文書の場合は、ユーザーがマウスをクリックするなどのアクションがあると、ブラウザーはそのアクションを遠隔地の WWWサーバに伝え、その応答を待って新しい表示をする必要がある。
Java を使っている場合は、アプレット （ applet ）と呼ばれる Java のプログラムが HTML に埋め込まれており、サーバからブラウザーへダウンロードして実行する。するとユーザーのアクションに対して、ブラウザーの中で実行されているアプレットが即時に反応することができる。こうして、インタラクティブ性の高いページを記述することが可能になる。
Q 1.2.1 HTML 中に埋め込まれ 、サーバーからブラウザーにダウンロード されて実行される Java のプログラムを何と呼ぶか？
答:
Java の情報のページ
http://www.oracle.com/technetwork/java/ （ Java の本家）
http://javanews.jp/（ 日本語 Java News ）このように、アプレットと呼ばれる Java のプログラムはネットワークを通じて別のコンピューターに移動して実行されることになる。このような使い方をするためには 安全性と 可搬性という特徴が重要になる。
安全性 これは、簡単にいえばアプレットを使って他人のコンピューターに悪戯をすることができない、ということである。もし 、ホームページに任意のプログラムを埋め込んでブラウザー上で実行させることができれば 、ハードディスク中のデータを消去してしまうなどのイタズラが簡単に行なえる。
安全性を保障するためには 、まずプログラムにファイル操作などをさせない、などの制限を課する必要があるが、C のような言語では、ポインター（アドレス）演算や無制限な型変換などの仕組みを通じて、いくらでも抜け道を作ることができる。Java はポインター演算を明示的に提供せず、このような抜け道がないよう設計されている。
一方で、アプレットでファイル操作などがまったくできないというのでは困る場合もある。そこで作成者が明確なアプレットにファイル操作などを許す署名つき（ signed ）アプレット という仕組みも用意されている。
可搬性 Web ページに埋め込まれ るということは 、さまざ まな機種のコンピューターで実行される可能性があるということである。つまり、Java のアプレ（ 空欄 1.2.1 ）を用いる実ットに 機種依存性があってはいけない。
行方式ではプ ログ ラムが 機械語に 翻訳され るため 、機種依存性は避けられな（ 空欄 1.2.2 ）を用いる方式では 、各機種毎に インタい。一方、プ リターを実装するだけで良いが 、効率が 犠牲になる。このため 、Java では（ 空欄 1.2.3 ）という方法をとる。

1.2. Java の特徴

オブジェクト指向言語 – 第 1 章 p.3（ 空欄 1.2.4 ）Java のプログラムは Java コンパイラーによって(Java VirtualMachine, Java 仮想機械) という仮想 CPU のコードに翻訳される。この仮想コードを各 CPU 上の JVM エミュレーター（一種のインタプリター）が解釈・実行する。

ॖথॱউজॱ‫ૄ্ش‬॥থঃॖছ‫ૄ্ش‬९‫ش‬५ই॓ॖঝ

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

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

JIT॥থঃॖছ‫ૄ্ش‬९‫ش‬५ই॓ॖঝ॥থঃॖঝ‫ق‬ᄽ๨‫ك‬র৑॥‫ॻش‬র৑॥‫ॻش‬CPU‫ق‬ৰষৎᄽ๨‫ك‬ड़ঈ४ख़ॡॺই॓ॖঝ

ෘ୳CPUCPUJIT॥থঃॖঝ

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

Q 1.2.2 Java の中間言語を実行する仮想 CPU を何と呼ぶか？
答:オブジェクト指向言語 – 第 1 章 p.4

第 1 章 JavaQ 1.2.3 次の文章のうち、正しいものに○、誤っているものに×をつけよ。
1.  Java ではポインターのインクリメントなどの演算を許すので、アプレッ
トに安全上の問題が起こる可能性がある。
2.  Java はポインター演算をプログラマーに提供しないことで、安全性を確保している。
3.  Java が純粋なコンパイラー方式でもインタプリター方式でもなく中間言語方式をとるのは、主に可搬性と効率を両立するためである。
4.  Java は安全性を考慮して設計されており、必ずしも信用ができない他人の作成したアプレットを安全に実行することができる。
Q 1.2.4 Web サーバー上で動作し 、Web ページなどを動的に生成する Java のプログラムを何と呼ぶか？
答:

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

関数・サブルーチン
代入文 , 繰り返し文 , 条件判断文

オブジェクト
整数 , 実数 , 文字列

関数・サブルーチン（ メソッド ）

. . . などの手続きをひとまとめにしたもの. . . などのデータをひとまとめにしたもの1.3. オブジェクト指向プログラミング

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

実際には、プログラム部品として提供されるのは、オブジェクトそのものでは（ 空欄 1.3.5 ）なく、オブジェクトの雛型とでもいうべき（ class ）である。クラスは 、そこから生成されるオブジェクトが（ 具体的なデータ （ つまり、1 とか 3.14 ）ではなく）ど のような名前と型の構成要素を持つか 、のみを指定したものである。クラスを具体化 （ instantiate — つまり、x という名前の int 型の構成要素は 1 で 、y という名前の float 型の要素は 、3.14 など と定めること ）したものがオブジェクトである。このとき、このオブジェクトはもとのクラスの（ 空欄 1.3.6 ）（ instance, 具体例）である、という。
（ 空欄 1.3.7 ）オブジェクトを構成している個々の構成要素を（ field ）あるいはインスタンス変数（ instance variable ）、メンバー （ member ）、という。
（ 空欄 1.3.8 ）ただし 、関数型の要素は（ method ）と呼ぶのが普通である。
オブジェクトのメソッド を起動することを、擬人的にオブジェクトにメッセージ（ message ）を送る、と表現することがある。

正確に言えば 、メソッドについてはインスタンスごとにコードを定義するのではなく、クラスごとにコード を定義する（ようになっているオブジェクト指向言語が多い）。オブジェクトは各フィールド のデー
タの他に、どのクラスに属しているか、という情報を持っていて、それによって適切なメソッド のコードが起動される。
複数のオブジェクトがフィールドに内部状態を保持し 、互いにメッセージを交換して、その内部状態を変更していく、というのがオブジェクト指向のプログラ
ムの実行のイメージである。
従来型言語では、部品の再利用方法は、既存の部品を関数・サブルーチンとして呼び出すだけだったが、オブジェクト指向言語では、それに加えて既存の部品（つまり（ 空欄 1.3.9 ）、クラス）に少しだけ機能を追加したり、一部を置き換えたりする（インヘリタンス, inheritance ）、という形の再利用の方法が可能になる。手続き型言語ではプログラムの “幹” の部分を変えて “枝” の部分だけを再利用することができたが 、オブジェクト指向言語では 、“枝” の部分を変えて “幹” の部分を再利用することもできるのである。

（ 赤色が再利用できる部分）
手続き型言語のイメージ（ 赤色が再利用できる部分）
オブジェクト指向言語のイメージ

最近のソフトウェアではユーザーインタフェースの部分（ “枝” の部分）が重要であることが多いので、オブジェクト指向という考え方が特に必要となってきてオブジェクト指向言語 – 第 1 章 p.6

第 1 章 Javaいる。オブジェクト指向言語は GUI (Graphical User Interface) 部品（ボタンやテキストフィールド など ）のような特定の用途の多種のデータ型が必要とされるプログラミングに適している。

Q 1.3.1 オブジェクト指向言語で、プログラムの基本部品となる、オブジェクトの雛型のことを何と呼ぶか？
答:
Q 1.3.2 オブジェクト指向言語で、クラスに少しだけ機能を追加したり、一部を置き換えたりして新しいクラスを定義することを何というか？
答:

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