オブジェクト (プログラミング)
コンピュータ科学の分野において、オブジェクト(英語: object)は、変数、データ構造、関数、メソッドなど、識別子によって参照されるメモリ上の値を意味することがある。
オブジェクト指向プログラミングのパラダイムでは、オブジェクトは変数、関数、データ構造を組み合わせたものを意味することがある。特に、クラスベースのオブジェクト指向プログラミングのパラダイムでは、特に、クラスのインスタンスを指す。
データベース管理のリレーショナルモデルでは、オブジェクトはテーブルや列、データとデータベースエントリーの間の関係(たとえば、人物の年齢と特定の人物との関係など)などを指す場合がある[1]。
オブジェクト指向プログラミング
[編集]オブジェクト指向プログラミングのパラダイムでは、関連するデータを束ね、代入、演算、手続き(関数やメソッドなど)を介した受け渡しといった操作の対象にでき、またメッセージの受け手になれる実体をオブジェクトと呼ぶ(ただし、数値などの基本的なデータ型はオブジェクトとしないプログラミング言語も多い)。多くの場合、オブジェクトは他のオブジェクトを要素として格納することができ、複雑なデータ構造を表現できる。 なお、英語の object には「対象」「もの」といった意味がある。
オブジェクトは、プログラム上で実現したい概念(例えば「顧客」「社員」「課」「商品」「注文書」など)をメタファとして表現するのにもしばしば使われ、プログラムの設計を考えたり他人と共有したりするのに役立つと考えられている。またマウスカーソル、ウィンドウ、メニュー、ファイル、段落など、コンピュータ上でユーザが目にするもので、名前が付いているようなものはほとんどオブジェクトとして表現できる。
オブジェクトは、それ自身に関するデータだけでなく、それ自身や内部のデータに対する操作も束ねている場合が多い。例えば、注文書を表すオブジェクトには、注文する商品を追加する操作や注文を取り消す操作を用意することができる。またマウスカーソルを表すオブジェクトについては、上下左右に動かす、クリックするというような操作が考えられるし、ファイルのオブジェクトについては、コピー、削除などの操作が考えられる。操作対象と操作そのものの定義や動作をまとめて表現することでプログラムの見通しが良くなり、プログラミング効率やプログラムの再利用性を高めるのに寄与すると考えられている。
クラスベースのオブジェクト指向では、共通した特徴や動作をもつオブジェクトをまとめ、その共通の性質を記述・定義した、「オブジェクトの分類」をクラスという(英語の class は種類・分類の意味がある)。そして、あるクラスに分類される具体的なオブジェクトをそのクラスのインスタンスという。例えば、「ファイルというもの」や「アイコンというもの」の性質を定義したのがクラスであり、「ファイルというもの」の性質に沿った一つ一つのファイルを表すものが「ファイルクラスのインスタンス」である。
処理系におけるオブジェクトの実装
[編集]オブジェクトは単純なデータとは限らない<何ものか>を指す概念だが、プログラムが実行される際、オブジェクトに相当する実体は記憶装置上のデータである。これに対し、クラスはインスタンスが持つデータの形式と操作についての定義であり、プログラムが実行されるときの実体としては記憶装置上のプログラムなどが対応する(より正確には言語や処理系によって異なる)。このとき、そのオブジェクトは、<何ものか>を抽象化していると表現される。(ここで言う「抽象化」は、C++の抽象クラスとは無関係)
例えば、「会員」(ある1人の会員)を表す1つのオブジェクトは、処理系での実装上は、会員番号や氏名など会員としての情報、そして「会員クラスに属するオブジェクトであるという情報」などをまとめたデータとして表されうる。 オブジェクトに対する操作については、同種の動作(振る舞い)をするオブジェクトをクラスとしてまとめていることにより、動作を表すプログラムを個々の会員インスタンスに持たせる必要はなく、クラスの側に動作に相当するプログラム(処理系によっては翻訳後のプログラム)を持たせる実装が可能である。
インスタンス生成が可能なクラスは、記憶装置上に自らのインスタンスを作るための手続きを備えており、この手続きが何らかの形で(通常は他のオブジェクトによって)呼び出されることで、インスタンスが生成される。
脚注
[編集]- ^ Oppel, Andy (2005). SQL Demystified. McGraw Hill. p. 7. ISBN 0-07-226224-9