「オブジェクト (プログラミング)」の版間の差分

削除された内容 追加された内容
Luckas-bot (会話 | 投稿記録)
m r2.7.1) (ロボットによる 追加: ar:كائن (علوم الحاسوب)
編集の要約なし
5行目:
[[オブジェクト指向プログラミング]]パラダイムでは、関連するデータを束ね、代入、演算、手続き(関数やメソッドなど)を介した受け渡しといった操作の対象にでき、またメッセージの受け手になれる実体をオブジェクトと呼ぶ(ただし、数値などの基本的なデータ型はオブジェクトとしないプログラミング言語も多い)。多くの場合、オブジェクトは他のオブジェクトを要素として格納することができ、複雑なデータ構造を表現できる。
 
オブジェクトは、プログラム上で実現したい概念(たとえば「顧客」、「社員」、「課」、「商品」、「注文書」など)をメタファとして表現するのにもしばしば使われ、プログラムの設計を考えたり他人と共有したりするのに役立つと考えられている。また[[マウスカーソル]]、ウィンドウ、メニュー、ファイル、段落など、コンピュータ上でユーザが目にするもので、名前が付いているようなものはほとんどオブジェクトとして表現できる。
 
オブジェクトは、それ自身に関するデータだけでなく、それ自身や内部のデータに対する操作も束ねている場合が多い。たとえば、注文書を表すオブジェクトには、注文する商品を追加する操作や注文を取り消す操作を用意することができる。またマウスカーソルを表すオブジェクトについては、上下左右に動かす、クリックするというような操作が考えられるし、ファイルのオブジェクトについては、コピー、削除などの操作が考えられる。操作対象と操作そのものの定義や動作をまとめて表現することでプログラムの見通しが良くなり、プログラミング効率やプログラムの再利用性を高めるのに寄与すると考えられている。
 
[[クラスベース]]のオブジェクト指向では、共通した特徴や動作をもつオブジェクトの抽象的な種類を[[クラス (コンピュータ)|クラス]]と呼ぶ。そして、そのクラスに基づき生成されたオブジェクトの具体的な[[実体]]を[[インスタンス]]と呼んで区別する。たとえば「[[ファイル (コンピュータ)|ファイル]]というもの」や「アイコンというもの」の性質を定義したのがクラスであり、「〜というもの」の性質に沿った一つ一つのファイルやアイコンを表すものがそれぞれインスタンスである。
 
== オブジェクトの実装 ==
オブジェクトは、単純な[[データ]]とは限らない<何ものか>を指す概念だが、オブジェクトのインスタンスは、プログラムが実行される時の実体は記憶装置上のデータである。これに対し、クラスはインスタンスが持つデータの形式と操作についての定義であり、プログラムが実行されるときの実体は記憶装置上のプログラムに対応する。このとき、そのオブジェクトは、<何ものか>を[[抽象化 (計算機科学)|抽象化]]していると表現される。(ここで言う「抽象化」は、[[C++]]の[[抽象クラス]]とは無関係)
 
たとえば、オブジェクトが「会員」を表している場合、オブジェクトのインスタンスは、会員番号や、会員についての情報だけを持ち、それで「会員」そのものを表すと考える。一方、クラスはこのインスタンスがどのような性質を持つか、会員番号は何桁分必要で、そのほかにどのような情報を持つか、さらにその会員についてのさまざま様々な操作―たとえば、その会員のウェブ上でのログイン/ログオフや、認証にかかわるさまざま様々な操作を定義するものである。このとき、このオブジェクトは「会員」を抽象化していることになる。
 
オブジェクトは記憶装置上に自らのインスタンスを作るための手続きを備えており、この手続きが何らかの形で(通常は他のインスタンスによって)呼び出されることで、インスタンスとなる。オブジェクト指向プログラミングでは、プログラムもオブジェクトであり、プログラムの実行を抽象化するオブジェクトがインスタンス化することを契機として、さまざま様々なオブジェクトがインスタンス化され、これによってプログラムが作動する。
 
== 関連項目 ==