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

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
編集の要約なし
Ice9 (会話 | 投稿記録)
→‎概説: 素朴な抽象論だったのをプログラミング手法の話に書き換えた
2行目: 2行目:


== 概説 ==
== 概説 ==
{{See also|オブジェクト指向プログラミング}}
たとえば、「[[マウスカーソル]]」というオブジェクトについては、上下左右に動かす、クリックするというような操作が考えられるし、「ファイル」というオブジェクトについては、コピー、削除などの操作が考えられるが、こういった対象を表現するのがオブジェクトだと言える。ウィンドウ、メニュー、ファイル、段落など、コンピュータ上でユーザが目にするもので、名前が付いているような[[もの]]はほとんどオブジェクトであるが、ユーザが目にしないようなオブジェクトもあり、これらの全体として、プログラムが動作している。
[[オブジェクト指向プログラミング]]パラダイムでは、関連するデータを束ね、代入、演算、手続き(関数やメソッドなど)を介した受け渡しといった操作の対象にでき、またメッセージの受け手になれる実体をオブジェクトと呼ぶ(ただし、数値などの基本的なデータ型はオブジェクトとしないプログラミング言語も多い)。多くの場合、オブジェクトは他のオブジェクトを要素として格納することができ、複雑なデータ構造を表現できる。


オブジェクトは、プログラム上で実現したい概念(たとえば「顧客」、「社員」、「課」、「商品」、「注文書」など)をメタファとして表現するのにもしばしば使われ、プログラムの設計を考えたり他人と共有したりするのに役立つと考えられている。また[[マウスカーソル]]、ウィンドウ、メニュー、ファイル、段落など、コンピュータ上でユーザが目にするもので、名前が付いているようなものはほとんどオブジェクトとして表現できる。
ある対象がどういう特徴を持ち、どういうするのかといった、抽象的なオブジェクトの性質を[[クラス (コンピュータ)|クラス]]と呼ぶ。そして、そのクラスに基づき生成されたオブジェクトの具体的な[[実体]]を[[インスタンス]]と呼。「[[ファイル (コンピュータ)|ファイル]]というもの」「マウスカーソルというもの」がクラスであり、「〜というもの」という仕様にったファイルやコンピュータなどのアイコンは、オブジェクトのインスタンスである。なお、一部のプログラミング言語では、クラスというはっきりした概念を持っていないのものある(当然、その類のプログラミング言語ではインスタンスの位置づけも若干変わる)


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

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


== オブジェクトの実装 ==
== オブジェクトの実装 ==

2010年5月20日 (木) 19:49時点における版

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

概説

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

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

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

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

オブジェクトの実装

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

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

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

関連項目