Java のオブジェクト指向

Revised: Mar./16th/2002; Since: Dec./23rd/2001

本稿の最初に、オブジェクト指向の考え方をかいつまんでまとめておく。詳細は対応する各節で説明するし、理解する為には自分でプログラミングする他ないが、言葉だけ覚えておくと役立つだろう。興味が無ければ飛ばしても構わない。

オブジェクト指向

オブジェクト指向 (object oriented) とは、ソフトウェアの設計思想/コーディング・スタイルを表現した言葉であり、他にプロシージャー指向(手続き指向) (procedure oriented) 、アスペクト指向 (aspect oriented) などが提唱されている。

古くはコンピュータが実行すべき動作を順番に記述していくプロシージャー指向であった。この場合は、プログラムはコンピュータが成すべき処理を記述したものであり、そこへ処理するデータを入力するという Input-Process-Output (IPO) 形式になる。

これを改良したオブジェクト指向では、処理を記述するのではなく、操作する対象としてのモノ (object) にメッセージを送って操作するという発想でコーディングする。ソフトウェアは、この操作対象としてのモノの集まりであり、複数のモノ同士がメッセージを送りあって全体の処理が進んでいくと考えられる。

手続き指向 (procedure oriented)
作業の手続きを中心にした考え方。
オブジェクト指向 (OO: object oriented)
操作する対象としてのモノとその特性を中心にした考え方。

オブジェクト

「操作対処となるモノ」のことをオブジェクト (object) と呼ぶ。オブジェクトは、データとそれを処理する機能をもっている。このオブジェクトは、クラス (class) と呼ばれる型から作られる。クラスでは、データが格納される変数の定義や、機能の処理を記述したメソッドなどが記述されている。クラスは、既存のものを利用しても良いし、自分で作成することもできる。実際にコーディングするのはクラスであり、変数定義やそれを処理するメソッドを記述する。

オブジェクト (object)
操作の対象であり、データ(値)と処理を一つにした部品。
変数 (variable)
値を格納しておく場所であり、プログラムの実行中に値が変化していくことが多い。
メソッド (method)
オブジェクトの振る舞い(データの処理方法)を定義したもの。

クラスとメソッド

クラスはオブジェクトの雛型とか設計図と呼ばれる。つまり、オブジェクトは個々のデータとメソッドを持っているが、概念的な存在である。実体は、メソッドや変数の定義を持ったクラスと、具体的な値であるインスタンスである。オブジェクトと言う概念は、クラスとインスタンスをあわせて実現される。

オブジェクトは自分が持っている機能の呼び出しのメッセージを受け取ると処理結果をメッセージ元へ返すが、実際は個々のインスタンスがメッセージを受け取り、対応するクラスのメソッドへ制御を受け渡していることになる。

オブジェクト指向プログラミングでは、データを持ったオブジェクトを作成し、その機能をメソッド呼び出しとして実装する。コンピュータが実行するべき処理を、順次記述していくプロシージャー(処理)指向(手続き指向)の言語とは決定的に異なる。そのため、手続き指向の言語(C, FORTRAN など)に慣れている方は戸惑うでしょう。

クラス (class)
オブジェクトの定義。変数やメソッドを定義する。
インスタンス (instance)
クラスで与えられている定義に与えた具体的な値。
オブジェクト (object)
クラスをインスタンス化したもの。

インスタンス

クラスからオブジェクトを作成したい場合は、このクラスにインスタンス化と呼ばれる処理を施す。クラスで定義されている変数に具体的な値を与えることがインスタンス化である。メモリー上の具体的な値(リテラル)や、自分の型のクラスに記述されているメソッドへのリンク(ポインタ)のことをインスタンス (instance) と考えればよい。

卑近な例だが、クッキーの「抜き型」がクラスであり、そこに詰め込む「生地」がインスタンスであり、「出来上がったクッキーと抜き型」がオブジェクトである。別の例を挙げると、銀行口座というクラスがあるとき、新規口座を開設することがインスタンス化であり、出来上がった口座がオブジェクトである。名義、口座番号、残高の具体的な値がインスタンスであり。或る口座(オブジェクト)に預金する(メソッド)のメッセージを送ると、その口座の残高(変数の値)を操作することになる。同じ銀行口座クラスから作られたオブジェクトでも、あなたの口座オブジェクトに預金のメッセージを送っても、残念ながら私の口座オブジェクトの残高変数の値は増えない。



Copyright © 2001-2002 SUGAI, Manabu. All Rights Reserved.