ObjectSquare [1999 年 1 月号]

[Happy Squeaking!!]


4.クラスとインスタンス

4.3 設計図、工場としてのクラス


クラスは単純に分類のために存在するだけでなく、クラスに属するインスタンスを作り出す工場のような役割を持ちます。自分に属するインスタンスを定めるために、クラスは「(自分のところに属する)インスタンスとはこれこれこういうもの」という「インスタンスの仕様」「設計図」が定義されたものになります。この定義に基づいて実体としてのインスタンスが作られていくことになります。

例えば、「会社員」クラスについて考えてみましょう。
「会社員とは、これこれこのようなものである」という記述が「会社員クラス」になります。

会社員クラス:

会社員クラスでは会社員のインスタンスを以下のように定める

属性として:
    「社員番号、入社年度、名前」 を持つ。

操作として:
    「名刺を渡す、仕事をする」 ができる。

操作のやり方:
    「名刺を渡す」には…
    「仕事をする」には…

会社員インスタンスが作られたときに、インスタンスは属性として「社員番号、入社年度、名前」をもち、外部に提供する操作として「名刺を渡す、仕事をする」という定義がされています。さらに、定義された操作に対応して実際の操作のやり方も含んでいます。

この設計図に基づいて会社員のインスタンスが作られます。
例えば、山田さんという会社員がいたとすると以下のようになります。

会社員インスタンス

属性:
    1234567(社員番号)、1994(入社年度)、山田 太郎(名前)

操作:
    名刺を渡す、仕事をする

クラスは、インスタンスの設計図を持っており、外部からの「インスタンスがほしい」という要求に反応して設計図からインスタンスを生成し、返却することになります。インスタンスは、クラスで定義された属性に対応した具体的な属性値を持ちます。外部からの操作を呼び出す刺激を受け取ると、クラスで定義された操作のやり方(メソッド)に基づいて実際の動作を行います。

クラスがインスタンスを作るといっても、クラスが、インスタンスを大量に集合として持っているわけではありません。クラスはできあいのインスタンスの入れ物ではなく、インスタンスを生成するためものです。
クラスは、「インスタンスの定義情報」を情報として持ち、「インスタンス生成」という操作を持つ工場オブジェクトなのです。

図で示すと以下のようになります。

クラスからのインスタンスの生成

オブジェクト指向での処理は、いくつものオブジェクトが処理中に作成され、それらが互いにメッセージを送りあう相互作用として行われていきます。
この場合、大部分のオブジェクトはインスタンスであり、時折、インスタンスを作るため、クラスオブジェクトに対し、作成用のメッセージが飛び交うことになります。


© 1999-2001 OGIS-RI Co., Ltd.

Prev.

Index

Next