オブジェクト (プログラミング)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

オブジェクト: object)はオブジェクト指向プログラミングにおいて、プログラム上の手続きの対象を抽象化する概念である。

概説[編集]

オブジェクト指向プログラミングパラダイムでは、関連するデータを束ね、代入、演算、手続き(関数やメソッドなど)を介した受け渡しといった操作の対象にでき、またメッセージの受け手になれる実体をオブジェクトと呼ぶ(ただし、数値などの基本的なデータ型はオブジェクトとしないプログラミング言語も多い)。多くの場合、オブジェクトは他のオブジェクトを要素として格納することができ、複雑なデータ構造を表現できる。

オブジェクトは、プログラム上で実現したい概念(例えば「顧客」、「社員」、「課」、「商品」、「注文書」など)をメタファとして表現するのにもしばしば使われ、プログラムの設計を考えたり他人と共有したりするのに役立つと考えられている。またマウスカーソル、ウィンドウ、メニュー、ファイル、段落など、コンピュータ上でユーザが目にするもので、名前が付いているようなものはほとんどオブジェクトとして表現できる。

オブジェクトは、それ自身に関するデータだけでなく、それ自身や内部のデータに対する操作も束ねている場合が多い。例えば、注文書を表すオブジェクトには、注文する商品を追加する操作や注文を取り消す操作を用意することができる。またマウスカーソルを表すオブジェクトについては、上下左右に動かす、クリックするというような操作が考えられるし、ファイルのオブジェクトについては、コピー、削除などの操作が考えられる。操作対象と操作そのものの定義や動作をまとめて表現することでプログラムの見通しが良くなり、プログラミング効率やプログラムの再利用性を高めるのに寄与すると考えられている。

クラスベースのオブジェクト指向では、共通した特徴や動作をもつオブジェクトの抽象的な種類をクラスと呼ぶ。そして、そのクラスに基づき生成されたオブジェクトの具体的な実体インスタンスと呼んで区別する。例えば「ファイルというもの」や「アイコンというもの」の性質を定義したのがクラスであり、「〜というもの」の性質に沿った一つ一つのファイルやアイコンを表すものがそれぞれインスタンスである。

オブジェクトの実装[編集]

オブジェクトは、単純なデータとは限らない<何ものか>を指す概念だが、オブジェクトのインスタンスは、プログラムが実行される時の実体は記憶装置上のデータである。これに対し、クラスはインスタンスが持つデータの形式と操作についての定義であり、プログラムが実行されるときの実体は記憶装置上のプログラムに対応する。このとき、そのオブジェクトは、<何ものか>を抽象化していると表現される。(ここで言う「抽象化」は、C++抽象クラスとは無関係)

例えば、オブジェクトが「会員」を表している場合、オブジェクトのインスタンスは、会員番号や、会員についての情報だけを持ち、それで「会員」そのものを表すと考える。一方、クラスはこのインスタンスがどのような性質を持つか、会員番号は何桁分必要で、そのほかにどのような情報を持つか、さらにその会員についての様々な操作―例えば、その会員のウェブ上でのログイン/ログオフや、認証にかかわる様々な操作を定義するものである。このとき、このオブジェクトは「会員」を抽象化していることになる。

オブジェクトは記憶装置上に自らのインスタンスを作るための手続きを備えており、この手続きが何らかの形で(通常は他のインスタンスによって)呼び出されることで、インスタンスとなる。オブジェクト指向プログラミングでは、プログラムもオブジェクトであり、プログラムの実行を抽象化するオブジェクトがインスタンス化することを契機として、様々なオブジェクトがインスタンス化され、これによってプログラムが作動する。

関連項目[編集]