ver. 16 1.java 言 語 要 - waseda university1 ver. 16 1.java 言 語 概 要 1.1...

14
1 ver. 16 1.Java 1.1 開発の背景 1990 年頃、Sun Microsystems 社において、家電製品などに組み込む小型コンピュータ 用の言語環境として開発が始まった(Green プロジェクト)。当初は Oak と呼ばれていた。 1993 世界初のウェブブラウザ Mosaic(イリノイ大学 M.Andresen)が発表される。 1994 Netscape Navigator が発表され、これに対抗するブラウザとして HotJava ラウザが開発され、HotJava ブラウザをどんなコンピュータ上でも利用できるようにする ために Java 言語の開発が始まった。発表は 1995 年。 1996 Java1.0 リリース。Java 開発環境 JDK 1.0 リリース。 JDK Java Development KitJava 開発キット)の頭文字で、Java 開発者(Java を使 ってプログラム開発をする人)向けのオラクル社(2009 年に旧 Sun Microsystems 社はオ ラクル社に買収された)の製品である。 1997 JDK1.1Java1.11998 J2SE1.2Java1.2 Java2Java1.2 以降は Java2 と呼ばれるようになり、 JDK の方は SDK (Software Development Kit)に名称変更(あるいはエディション名 J2SE (Java 2 Platform, Standard Edition)で呼ばれるようになった)。JDK1.2 2000 J2SE1.3 (Java2, JDK1.3) 2002 J2SE1.4 (Java2, JDK1.4) 2004 J2SE5.0 1.5 以降、突然 5.0 にバージョン名変更。(Java2, JDK5 (JDK1.5)) 2006 J2SE6 x.0 を単に x と呼ぶようになった。 Java SE 6 (Java Platform, Standard Edition) とも称される。(Java SE6, JDK6 (JDK1.6)) 2009 4 オラクル社による Sun Microsystems 社の買収 2011 J2SE7 (Java SE7, JDK7 (JDK1.7)) 2014 3 Java SE8 を正式リリース(2012 年開発開始)。λ式への対応。 API Date and Time (日付操作)を追加。これまでリッチ・クライアント開発の標準技術として使われてき Swing に代わる技術として JavaFX 8 を導入、等。 1.2 Java で開発を行うために必要なソフトウェア Javaを動かすためには、以下の4つが必要である。 ソースコード ソースファイル: プログラムを書いたテキストファイル。

Upload: others

Post on 24-May-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ver. 16 1.Java 言 語 要 - Waseda University1 ver. 16 1.Java 言 語 概 要 1.1 開発の背景 1990 年頃、Sun Microsystems社において、家電製品などに組み込む小型コンピュータ

1

ver. 16

1.Java 言 語 概 要

1.1 開発の背景

1990 年頃、Sun Microsystems 社において、家電製品などに組み込む小型コンピュータ

用の言語環境として開発が始まった(Green プロジェクト)。当初は Oak と呼ばれていた。 1993 年 世界初のウェブブラウザ Mosaic(イリノイ大学 M.Andresen)が発表される。 1994 年 Netscape Navigator が発表され、これに対抗するブラウザとして HotJava ブ

ラウザが開発され、HotJava ブラウザをどんなコンピュータ上でも利用できるようにする

ために Java 言語の開発が始まった。発表は 1995 年。 1996 年 Java1.0 リリース。Java 開発環境 JDK 1.0 リリース。 JDK は Java Development Kit(Java 開発キット)の頭文字で、Java 開発者(Java を使

ってプログラム開発をする人)向けのオラクル社(2009 年に旧 Sun Microsystems 社はオ

ラクル社に買収された)の製品である。 1997年 JDK1.1(Java1.1)

1998 年 J2SE1.2(Java1.2 → Java2) Java1.2 以降は Java2 と呼ばれるようになり、

JDK の方は SDK (Software Development Kit)に名称変更(あるいはエディション名 J2SE

(Java 2 Platform, Standard Edition)で呼ばれるようになった)。JDK1.2

2000年 J2SE1.3 (Java2, JDK1.3)

2002年 J2SE1.4 (Java2, JDK1.4)

2004年 J2SE5.0 1.5以降、突然 5.0にバージョン名変更。(Java2, JDK5 (JDK1.5))

2006年 J2SE6 x.0 を単に x と呼ぶようになった。Java SE 6 (Java Platform, Standard

Edition) とも称される。(Java SE6, JDK6 (JDK1.6))

2009年 4月 オラクル社による Sun Microsystems社の買収

2011年 J2SE7 (Java SE7, JDK7 (JDK1.7))

2014年 3月 Java SE8 を正式リリース(2012年開発開始)。λ式への対応。APIに Date and

Time (日付操作)を追加。これまでリッチ・クライアント開発の標準技術として使われてき

た Swing に代わる技術として JavaFX 8 を導入、等。

1.2 Java で開発を行うために必要なソフトウェア

Javaを動かすためには、以下の4つが必要である。 ・ソースコード ソースファイル: プログラムを書いたテキストファイル。

Page 2: ver. 16 1.Java 言 語 要 - Waseda University1 ver. 16 1.Java 言 語 概 要 1.1 開発の背景 1990 年頃、Sun Microsystems社において、家電製品などに組み込む小型コンピュータ

2

・API(Application Programming Interface) 関数(クラス)の集まり。プログラムライブラリに相当する。J2SE は、Java を使う

ために必要な最も基本的な API(関数の集まり。API は jar ファイルとも呼ばれる)であ

る。それに対し、ウェブ上で Java を使うために必要な API の集まりを J2EE という。 ・コンパイラ (javac) ソースコードを中間言語(バイトコードと言う)に翻訳するためのプログラム。

・Java VM(Java Virtual Machine) と JIT コンパイラ Javaのプログラムを実行するには、Java VM と呼ばれる専用のソフトウェア(Java実

行環境 Java Runtime Environment(JRE) ともいう)が必要である。ソースコードはコン

パイルして、Java VM で実行できるファイル形式(バイトコードあるいはクラスファイル

と言う)にする必要がある。しかし、バイトコードはそのままでは実行できず、それぞ

れの機種(プラットフォーム)固有の機械語(ネイティブコードとも言う)に変換しな

がら実行しなければならない。これを行うのが Java VM である。「変換しながら」であ

り、「変換してから」ではないことに注意。すなわち、Java VMはコンパイラではなくバ

イトコードのインタープリタである。

一方、JavaVM と違い、ソースコードを実行前にまとめて機械語にまで変換することで

実行速度を向上させたものを JIT コンパイラという。

1.3 特徴

① Java は、小分類すると Algol 系言語の(特に、C 言語の)流れを汲む手続き型言語であ

り、大分類ではオブジェクト指向型言語である。C++言語を洗練したものと言ってもよい。 Algol60 C C++ Java

Visual C++ JavaScript Pascal Turbo Pascal Delphi (参考) 類似の名前をもつ JavaScript は、Java や C, C++を制限したようなプログラム言語であ

り、Java とは無関係の言語である。Javascript は Java のアプレットと同様に HTML ファ

イルの中にスクリプト(プログラムコード=ソースプログラム)を埋め込み、ウェブブラ

ウザによって実行されるタイプの言語である。そのようなスクリプトに対応できたブラウ

ザは 1995 年当時は Netscape Navigator だけであったが、現在ではほとんどすべてのブラ

ウザが JavaScript に対応している。Java ほど高級なことはできないが、ホームページ記述

用言語として広く利用されている。

Page 3: ver. 16 1.Java 言 語 要 - Waseda University1 ver. 16 1.Java 言 語 概 要 1.1 開発の背景 1990 年頃、Sun Microsystems社において、家電製品などに組み込む小型コンピュータ

3

(例)JavaScript の使用例(HTML ファイル内の JavaScript ソースコードも見よ) http://www.edu.waseda.ac.jp/~moriya/education/CAI/javascript/ ② Javaの処理系としては、ソースコード(ソースプログラム)をバイトコード(byte code)と呼ばれる中間言語に翻訳するコンパイラだけでなく、バイトコードを解釈実行するイン

タープリタ(Java の場合は JIT コンパイラと呼ばれ、インタプリタとは別のもの。下記注

参照)も併せて必要。 (注)JIT コンパイラとは、ジャストインタイムコンパイル(Just In Time Compilation、その都度のコンパイル)方式のソースプログラムの翻訳/実行方式である。コンパイラは、

実行前にソースコード(あるいは中間コード)を機械語へ変換する。また、インタプリタ

は、実行時にソースコードを解釈しながら(機械語への変換は行わないで)実行する方式

である。これに対して、ある単位(モジュール:クラス、関数などのこと)のソースコー

ドを実行時にコンパイルして実行する方式。 もう少し詳しいことは、p.7 の⑧を参照のこと。

アプリケーションの作成から実行まで

(i) ソースコードの作成 エディタ(例えば Emacs)を立ち上げ、例えば次のような Java のソースコードを

書き、例えばファイル名 Hello.java でセーブする(ファイル名の拡張子を必ず java と

する):

public class Hello { public static void main(String[ ] args) { System.out.println("Hello! こんにちは。"); } }

(ii) javac コマンドでコンパイルする % javac Hello.java ソースファイル Hello.java をコンパイルする

ソースコード コンパイラ インタープリタ

Java VM

実行結果

javac コマンド

バイト コード

java コマンド

Page 4: ver. 16 1.Java 言 語 要 - Waseda University1 ver. 16 1.Java 言 語 概 要 1.1 開発の背景 1990 年頃、Sun Microsystems社において、家電製品などに組み込む小型コンピュータ

4

(iii) バイトコードができていることを確認する(ファイル名は Hello.class):

(iv) バイトコードを java インタープリタで実行する:

% java Hello (単に Hello とする。Hello.class としないこと)

(v) 実行結果 Hello! こんにちは。

と出力される。 ③ バイトコードは実際は存在しない仮想的なマシン(これを Java バーチャルマシン

(JVM, Java virtual machine.JRE (Java Runtime Environment)とも言う)と呼ぶこと

がある)用のコード(code、プログラムのこと)であり、そのコードを解釈して実行する

プログラム(=インタープリタ)をコンピュータごとに用意すれば、Java で書いたプログ

ラムをどのコンピュータ上でも実行することができる。バイトコードは、コンパイラ言語

である Java 言語と、コンピュータが直接理解できる言語である機械語との中間に位置する

言語なので、中間言語(intermediate language)とも呼ばれる。 バイトコードは拡張子が .class というファイルとして作成されるので、このファイルを

クラスファイルとも言う。 ④ HTML 言語(HyperText Markup Language、ハイパーテキスト(=インターネット

上の関連情報をリンクでつなぎ合わせたデータ閲覧の仕組み)の構造を記述するための言

語)の中に組み込まれた <applet> というタグ(tag、HTML 言語における記述命令の一つ。

要素ともいう)によって呼び出されて実行される Java のプログラム(バイトコード)はア

プレット(applet = application+let =小さなアプリケーションの意)と呼ばれる。現在、た

いていのウェブブラウザはアプレットを解釈実行する機能(HotJava ブラウザで初めて実

現され、Netscape もすぐ採用したので、以後たいていのブラウザがこの機能を備えるよう

になった)を持っているため、Java は機種に関係なくどのコンピュータ上でも実行できる

ポータブル(portable)なプログラムを書くことができる。その反面、インタープリタによっ

て実行されるため、実行速度が遅いという欠点があったが、現在では JIT コンパイラ(前述)によって高速化が実現されている。 (例)アプレットの例(ソースコードおよびファイル名を確認せよ)

http://www.edu.waseda.ac.jp/~moriya/2003/ アプレットのソースコード例はここ:

~moriya/public_html/2003/source_codes (教育学部 EDU システム)

Page 5: ver. 16 1.Java 言 語 要 - Waseda University1 ver. 16 1.Java 言 語 概 要 1.1 開発の背景 1990 年頃、Sun Microsystems社において、家電製品などに組み込む小型コンピュータ

5

Java のソースコード(ファイル拡張子が .java)だけでなく、クラスファイル(フ

ァイル拡張子が .class、バイナリーファイル)も読んでみよう: % more ファイル名.java (ソースコード) % more ファイル名.class (バイトコードを文字として読む) % od -x ファイル名.class (バイトコードを 16 進数で読む) % javap -c クラス名 (バイトコードの命令列を読む)

( .class を付けないこと) アプレットの作成から実行まで

(i) ソースコードの作成 例えば次のようなアプレットのソースコードを書き、例えばファイル名 MyName.java でセーブする:

import java.applet.*; import java.awt.*; public class MyName extends java.applet.Applet {

public void paint(Graphics g) { g.setColor(green); g.fillOval(100,50,150,75); g.setColor(Color.blue); g.drawString("私の名前は守屋です", 120, 95); }

} (ii) ソースコードをコンパイルする

% javac MyName.java (iii) アプレットのクラスファイル MyName.class が出来ていることを確認する。

(iv) HTML ファイルの作成 次のような HTML ファイルを作成し、例えばファイル名 myname.html でセーブす

る(ファイルの内容は太字の部分だけでもよい):

<html> <head> <title> アプレット例 </title> </head> <body> <applet code="MyName.class" width=”400” height=”200”>

Page 6: ver. 16 1.Java 言 語 要 - Waseda University1 ver. 16 1.Java 言 語 概 要 1.1 開発の背景 1990 年頃、Sun Microsystems社において、家電製品などに組み込む小型コンピュータ

6

</applet> </body> </html>

(v) HTML ファイル myname.html を IE や Firefox や Netscape などのウェブブラウ

ザでブラウズすると、アプレット MyName.class が実行されて、結果が表示される

(URL の指定に注意のこと。「ファイル名を指定して実行」してもよい)。

ブラウザはウェブサーバーからデータをもらって自分で表示する

① ユーザがURL http://www.em.edu.waseda.ac.jpをクリックすると、ブラウザは相手サーバーへリク

エストを送る

em.edu.waseda.ac.jp のWebサーバー

② サーバーは要求し応じて、例えばhttp://www.em.edu.waseda.ac.jpのトップページのHTMLファイル

をブラウザへ送る

Webブラウザ

④ ブラウザとサーバーは、必要に応じて①~③のやり取りを何回も行なう(このやり取りの書き方を決めたものがHTTPプロトコル)

③ ブラウザはHTMLファイルを解釈してウインドウに表示したり、指定された動作をする

<HTML><HEAD><TITLE> Moriya Lab Home Page </TITLE></HEAD><META NAME="E.Moriya" CONTENT="text/html; CHARSET=x-sjis"><BODY BGCOLOR="ffffff" BACKGROUND="gif/backs/moriya.gif" WIDTH=150>

<CENTER>

Java のアプレットはこのようにブラウザによって実行・結果表示することができるが、

Java の実行環境に組み込まれている appletviewer コマンドによっても実行して結果を

見ることができる。上の例では次のようにコマンドを入力する:

% appletviewer myname.html

(注)Java アプリケーション(後述)の実行の仕方はアプレットとは異なる。 ⑤ 4に述べたように、さまざまな種類のコンピュータが混在するオープンな環境であ

るインターネット上で、どのサーバー(=特定のアプリケーションを提供するという観点

から見たときコンピュータのことをサーバー(server)とも呼ぶ)のクライアント(client、

Page 7: ver. 16 1.Java 言 語 要 - Waseda University1 ver. 16 1.Java 言 語 概 要 1.1 開発の背景 1990 年頃、Sun Microsystems社において、家電製品などに組み込む小型コンピュータ

7

そのサーバーを利用するユーザプログラム(アプリケーション)のこと)も同じプログラムを

実行できるので、アプレットの利用によってインターネット上の複数のコンピュータを同

時に使った処理を行うこともできる(分散処理)。その意味で、Java はインターネット向き

の言語でもある。 ⑥ Java は豊富なクラスライブラリ(class library)を持つため、それを流用することによ

りさまざまなことが容易に記述できる。クラスとは、オブジェクト指向言語における基本

的な概念であり、書式の決まった文書フォームのようなもの(テンプレート)である。誰

かが作ったテンプレート(クラス)をみんなが使えるように集めたものをクラスライブラリ

という。クラスライブラリは内容によって分類してパッケージ化されてコンピュータ上の

特定のディレクトリに置かれる(Java API, application programming interface と呼ばれ

る)。Sun MicroSystems 社(Java SE6 以降は Oracle 社)の公式サイト

http://java.sun.com/j2se/1.5.0/docs/api/index.html (Java SE5) http://docs.oracle.com/javase/6/docs/api/ (Java SE6) http://docs.oracle.com/javase/7/docs/api/(Java SE7) http://docs.oracle.com/javase/8/docs/api/(Java SE8)

には API の仕様が掲載されている。入出力操作、ファイル操作、グラフィックス、各種デ

ータ型、数学関数、ネットワークなどに関するさまざまなライブラリパッケージがあり、

これらのパッケージに入っているクラスやそれに付随するメソッドを部品として使えば簡

単にプログラムを書くことができる。 ⑦ Java はアプレットを記述するためだけでなく、他のプログラミング言語と同様に、

1つのコンピュータ上で独立に実行されるプログラムを書くこともできる。このようなプ

ログラムは、アプレットと対比して、Java アプリケーションと呼ばれる。 ⑧ Java のソースプログラムはバイトコードと呼ばれる中間言語に翻訳されて、それが

インタープリタによって実行される。しかし、インタープリタは実行速度が遅いという欠

点があるため、現在では実行時に機械語に翻訳してから実行するというコンパイラが提供

されている。これを JIT (just in-time compiler) という。JIT コンパイラはウェブブラウザ

にも組み込まれていて、Java アプレットの実行時、中間コードを変換してある程度の量の

命令語を蓄積し、まとめて処理するため、インタプリタに比べ、5~12 倍の処理速度がある

と言われている。このため、現在の Java は、単なるインターネット用の言語というだけで

なく、数値計算用の言語にも劣らない計算性能があると言われている。

⑨ Java の安全性。Java のコンパイラやインタープリタはデータの型(type)のチェッ

Page 8: ver. 16 1.Java 言 語 要 - Waseda University1 ver. 16 1.Java 言 語 概 要 1.1 開発の背景 1990 年頃、Sun Microsystems社において、家電製品などに組み込む小型コンピュータ

8

クを厳密に行い(このような言語は強い型付け strongly typed であるという)、(例えば、

整数型を実数型へ変換するといった)自動的な型変換を行わず、配列の実行時における添

字範囲のチェックもきちんと行う。また、例外処理を厳密に定義しないとコード(=プロ

グラム)が書けないように仕様が定められている。このため、プログラムが予想外の動作

を起こす可能性が排除され、安定した動作が保証される。さらに、インタプリタでの実行

時に、バイトコード内に不当な動作をするようなコードが無いかどうかをチェックする(例

えば、メモリをコード中で明示的に操作する命令を書くことはできない)ため、ウイルス

を仕込む等の侵入的アプレットが外部から送り込まれて実行される危険性を排除する(セ

キュリティが強固。ただし、万全というわけではないので、2013 年にはセキュリティが強

化され、ウェブ上でアプレットを実行するためには環境を適切に変えなければならなくな

った)。 ⑩ メモリ管理をユーザがコード中で明示的に行う必要がない。使わないメモリはシス

テムが自動的に回収して(garbage collection、ガルベージコレクションという)、再利用で

きるようにしてくれる。 ⑪ Java にはマルチスレッド機能がある。スレッド(thread)とは、タイムシェアリン

グシステムと同様に、同時に1つ以上のプロセス(process、実行処理の単位)を並行して

実行する仕組みである。 ⑫ 言語仕様に実装依存性がない。例えば、整数型の大きさ(内部表現)は4バイトと

はっきり決まっており、C 言語などのように機種に依存して2バイトであったり4バイトで

あったりすることを許していない。これにより Java のソースコード(ソースプログラム)

の移植性(portability)は他の言語より向上している。 ⑬ Unicode をサポートしている。Java のプログラムは ASCII 文字で書くが、プログラ

ムの一部(コメント、識別子、文字リテラル、文字列リテラル)では ASCII 文字だけでな

く Unicode 文字も使える。例えば、漢字の変数名を使うこともできる。

(参考) 統合開発環境

統合開発環境(IDE, Integrated Development Environment) とは、エディタ(ソースコ

ードを作成・編集する)、コンパイラ(作成したプログラムをコンパ イルする)、デバッガ(コンパイル

したプログラムを実行してテストする)を別々の環境で利用するのではなく、一つの対話型操作

(多くは GUI = graphical user interface)の下で利用できるようにしたプログラミング

環境のこと。統合開発環境を使うことによって、巨大かつ複雑なソフトウェアでも、作成

Page 9: ver. 16 1.Java 言 語 要 - Waseda University1 ver. 16 1.Java 言 語 概 要 1.1 開発の背景 1990 年頃、Sun Microsystems社において、家電製品などに組み込む小型コンピュータ

9

者は少ない負担で開発することが可能になる。現在の開発ツールは、ほとんどこうした統

合開発環境をベースにしている。例えば、Eclipseなどは、こうした統合開発環境の機能を

オープンに利用できるようにしたものである。

一方、GUI の登場で、開発スタイルは変化した。それまでのフローチャートで記述できる

ような手続き型の処理ではなく、イベントドリブン型のプログラミング(event-driven

programming:マウスをクリックしたとか、メニューを選択したというような、イベントに

応じて処理を記述するプログラミング法)が必要になり、ソースコードを一から十まで書

くのではなく必要な部分だけ記述するだけで済んだり、操作の多くがビジュアルにできた

りするようになってきた。例えば、Delphiや Turbo Pascal(プログラミング言語 Pascal

用の IDE)、Turbo C(MS-DOS時代に使用された、C言語用の統合環境)、Eclipse(元々は

1990年代に IBM が開発していた商用の VisualAgeという統合開発環境が前身であったが、

ソースコードをオープンにしたため、当初は Java用の IDEであったが現在は様々な言語で

の開発に対応するものになっている)、Emacs(厳密に言えばテキストエディタであるが、

強力なマクロにより統合開発環境と同等の使い方ができる。Unix 系 OSで IDEがあまり流行

らない原因?)、Visual Basicや ActiveBasic(BASIC用)などがある。

1.4 オブジェクト指向プログラミング Javaの最大の特徴は、オブジェクト指向型言語であるという点にある。オブジェク

ト指向プログラミング(object-oriented programming)では、プログラムが対象としよう

としている世界に属す「もの」(オブジェクト)を中心に据えて、それらの特徴を記述する

ことがプログラムの主要な部分を成す。例えば、レストランという世界では個々の客、個々

のウェイトレス、個々のコックなどがそれぞれオブジェクトであり、個々の客やウェイト

レスやコックは誰も決められた一定の仕事(動作)をする(機能=役割を持つ)。例えば、

客は料理の注文をし、ウエイトレスは客からの注文をコックに伝えたり、調理が終った料

理を客に出したりし、コックは料理を作る。こういった仕事をするためにはいろいろな種

類の道具や材料(コックは鍋や包丁など、ウエイトレスはメニューや注文伝票やPDAな

ど)が必要である。このような情報・データを蓄えておくものをフィールドとかインスタ

ンス変数という(他のオブジェクト指向言語ではデータメンバーとかメンバー変数とか、

単にメンバーとか、スロットともいう)。

こういったオブジェクトの属性・性質、すなわち、仕事・動作(機能・能力)や道具(情

報・データ)をきちんと決めることによって客やウエイトレスやコックがどういうもので

あるかを抽象的に特徴付けることができる。オブジェクト指向言語では、こういった抽象

的なものをクラス(class)といい、各クラスに属す個々の「もの」をオブジェクトといい

(そのクラスのインスタンス(instance、「具体例」の意)ともいう)、各オブジェクトが行

Page 10: ver. 16 1.Java 言 語 要 - Waseda University1 ver. 16 1.Java 言 語 概 要 1.1 開発の背景 1990 年頃、Sun Microsystems社において、家電製品などに組み込む小型コンピュータ

10

う動作・仕事・機能・操作をメソッド(method)といい(C++ではメンバー関数という)、

特定のオブジェクトの特定のメソッドを実行して欲しいときにメソッドに渡すデータ・情

報をメッセージ(message)という。フィールドとメソッドを総称してメンバーという(フ

ィールドもメソッドもクラスを構成するメンバーであるから、そのように呼ばれる)。オブ

ジェクト指向でないプログラミング言語ではメソッドのことを通常、関数といい、メッセ

ージのことを関数の引数というのが普通である。 クラスは一種のテンプレート(template、雛形、鋳型)であると考えることもできる。各ク

ラスの具体的オブジェクトは、その鋳型を使って生成する。このようなことをインスタン

ス化(instantiation)という。

例えば、レストランにおいては、客、ウェイトレス、コックという3つのクラスがあり、

各クラス(例えば、ウェイトレスというクラス)に具体的に A,B,C という 3 人のウェイト

レスがいるならば、A,B,C それぞれはウェイトレスというクラスのインスタンス(オブジェ

クト)である。客 D(客というクラスのオブジェクトの1つ)がウェイトレス C というオ

ブジェクトに渡すメッセージは注文する料理であり、そのメッセージを受けてウェイトレ

スはコックに料理の注文を出す(この動作がウェイトレスというオブジェクトが備えてい

るメソッドの1つである)。客は、ウェイトレスがどのような知識を持っているかとか、受

けた注文をどのようにコックに伝えるのかは知らない(知る必要がない)。このように、あ

るオブジェクトの持っている情報・データや機能が外部から分からないようにすること(情

報隠蔽)をカプセル化(capsulation)といい、これもオブジェクト指向言語がもつ特徴の

1つである。外部から見える情報があってもよい(public なフィールドやメソッド)。 クラスを定義する場合、そのクラスに属すオブジェクトの性質をできるだけ多くそのク

ラスに含めることを目指した方がよいが、既定義のクラスがある場合、そのクラスを使っ

のテンプレート クラス

インスタンス化

インスタ化のときに、それぞれの中身は少しずつ異なるように作られ

る (プログラム内でそのよう指定する)

インスタンス

(オブジェクト)

テンプレートから 作られた具体的なもの

Page 11: ver. 16 1.Java 言 語 要 - Waseda University1 ver. 16 1.Java 言 語 概 要 1.1 開発の背景 1990 年頃、Sun Microsystems社において、家電製品などに組み込む小型コンピュータ

11

て別のクラスを定義することができ、新しいクラスは既存クラスの持っている属性を引き

継ぐ。これを継承(inheritance)といい、このような既存部品を再利用したプログラミン

グは特に大規模プログラムの開発においては有用な方法である。逆に言うと、一旦クラス

を定義すると、それは部品として後から利用することができる(部品化)。このような部品

を集めたものをクラスライブラリといい、例えば Java では既述のように、実にたくさんの

クラスライブラリが用意されているので、プログラマはこれを使いこなせば、容易に複雑

な処理を行なうプログラムを書くことができる。 データをその種別(例えば、整数、実数、文字、文字列など)によって分類したものを

データ型(data type)という。データ型という概念を一般化したものに「抽象的データ型

(abstract data type)」がある。クラスは抽象的データ型という概念をさらに一般化したも

のである。例えば、次の例における「スタック」は、データ構造の1つであるスタックと

いうものをスタック操作に関する演算(プッシュ、ポップ、空判定等)とスタックをコン

ピュータ内で表す(implement、実装するともいう)ために必要なデータ(スタックに挿入

できる要素の最大個数(スタックを配列で表現している場合には、その配列のサイズ)や

スタックのトップがどこにあるかを示す変数など)とによって特徴付けたものである。 〔例〕

世界 クラス

(オブジェクト) メソッド

フィールド

(データメンバー)

学 校

生徒 講義を受ける、勉強する、試験

を受ける

氏名、学年、性別、

試験成績、ノート

先生 講義する、試験をする、採点す

る、・・・

氏名、年齢、所属、

担当科目、閻魔帳

会 社

営業課員 注文取り、顧客の接待、

稟議書作成、・・・

氏名、入社年度、顧客名

簿、伝票、携帯電話

営業課長 書類の決裁、人事考課、・・・ 氏名、課員名簿、営業成

績表、はんこ

・・・ ・・・ ・・・

社長 経営方針立案、いばる、・・・ 予算・決算書、秘書

数 複素数

絶対値演算、偏角を与える演

算、四則演算等の演算

実部の値、虚部の値

実数 四則演算等 値

データ構造

スタック

初期化、プッシュ、ポップ、空

/オーバーフロー判定

トップ位置、

最大サイズ

優先順位付き

キュー

初期化、Max 取り出し、

Max削除、挿入

最大サイズ

Page 12: ver. 16 1.Java 言 語 要 - Waseda University1 ver. 16 1.Java 言 語 概 要 1.1 開発の背景 1990 年頃、Sun Microsystems社において、家電製品などに組み込む小型コンピュータ

12

オブジェクト指向型言語の特徴(まとめと補足) *オブジェクト=もの

ある種の特性(独自のデータや外部からのメッセージに対する反応)を有す。 クラスに属す具体的なものと見るときにはインスタンスとも言う。 *クラス=共通の特性をもつオブジェクの集団を抽象的に表すデータ型 それだけで閉じたものとして定義されている(self-contained)。

Page 13: ver. 16 1.Java 言 語 要 - Waseda University1 ver. 16 1.Java 言 語 概 要 1.1 開発の背景 1990 年頃、Sun Microsystems社において、家電製品などに組み込む小型コンピュータ

13

クラスに属す個々のオブジェクト(インスタンス)はある種の同じ特性(フィ

ールド)や処理機能(メソッド)を持つ。これらを合わせて、そのクラスの

メンバーという。 抽象的データ型(データ型とは、データの集合と、その上の各種操作の集

まりのことである)という概念の一般化でもある。 (a) 情報(データ)のカプセル化(encapsulation)と情報の外部への隠蔽(hiding)

各クラスは self-contained であり、その内容(=メンバー)は基本的には外部からは

見えない。メソッドの中身(どう動作するか)は外部の者が知る必要は無い。いか

に使うかだけを知ればよい。メソッドには、private なもの(外部に公開するもの)とpublic なもの(公開しないもの)がある。

(b) クラスの継承(inheritance) 既存のクラスのいくつかの特性を引き継いだクラス(派生クラス)を定義できる。

これはデータの再利用である。 (c) 多義化(polymorphism) poly=many, morph=form 多重化。本質的に類似のもの(関数、演算子)を同じ名前で定義できる。 継承クラスの中では元のクラスと基本的に同じこと(同様な結果をもたらす操作)

を少し違ったやり方でやることができる。 (d) 安全(secure)なプログラムを書くことができる 強い型付け(strongly typed)の言語である(型チェックを厳しく行う)。 カプセル化(具体的には、クラス)による情報隠蔽(private メンバー)。 実装依存度が低い(数の内部表現法を明確に規定、マクロの副作用の防止など)。 例外処理を必ず書かなければならない。

(e) ソフトウェア開発の容易化のサポート 一旦開発したプログラムは部品として後での再利用することができる: クラスによるモジュール化と継承 多くのクラスライブラリと、ライブラリ開発の容易化 ユーザが独自のデータ型を定義できる(これが抽象的データ型であり、その考えをさ

らに推し進めたものがクラスである)。 クラスはテンプレートとして機能する。

参考書

・掌田津耶乃、Eclipse ではじめる Java プログラミング入門、秀和システム、2006. ・坂下夕里、Java 入門の入門、翔泳社、2005. ・奥村晴彦、Javaによるアルゴリズム事典、技術評論社、2003.

・○高橋麻奈、やさしい Java、ソフトバンク、2002.

Page 14: ver. 16 1.Java 言 語 要 - Waseda University1 ver. 16 1.Java 言 語 概 要 1.1 開発の背景 1990 年頃、Sun Microsystems社において、家電製品などに組み込む小型コンピュータ

14

・○坂田健二、Java プログラミング入門、秀和システム、2002. ・武藤健志、独習 Java、翔泳社、2002. ・内田智史、Java プログラミング徹底入門 基礎編、電波新聞社、2002. ・野本等、基礎 Java、インプレス、2002. ・加藤暢・溝淵昭二・白川洋充、例題で学ぶ Java 言語、近代科学社、2002. ・林晴比古、新 Java 言語入門 スーパービギナー編、ソフトバンク、2002. ・村山要司、Java プログラミングを始めよう!、秀和システム、2002. ・河西朝雄、Java によるはじめてのアルゴリズム入門、技術評論社、2001. ・○権藤克彦、Java によるプログラミング入門、サイエンス社、2000. ・林 正幸、実例・演習で身につける Java プログラミング入門、共立出版 ・中山 清喬・国本 大悟、スッキリわかる Java 入門 第 2 版、インプレス、2014. ・○柴田 望洋、明解 Java 入門編、2007. ・http://qiita.com/KENJU/items/5ab7cdc779dc6b6a5f79 に参考書の解説がある (内容の正確性の保証はしない).

参考ウェブサイト

(Sun Microsystems 社の Java 公式ホームページは、現在すべて Oracle 社のホームページと

して引き継がれています)

http://www.oracle.com/technetwork/java/javase/overview/index.html Java SE の概要 http://docs.oracle.com/javase/8/docs/api/ Java SE8 のAPIの仕様はここを参照のこと http://java.sun.com/docs/books/tutorial/index.html

Java プログラマのための実践ガイド(例題多数) http://freewarejava.com/ フリーな Java アプレット集