ニコニコ大百科

クラス

クラスclass)とは、「特定の分類に分けたひとかたまり」などを意味する英単。転じて以下の意味でも使われる。

クラスとは、オブジェクトが持つデータ構造と振る舞いを記述したものである。

クラス(プログラム)

クラスとは、オブジェクト指向プログラミングにおいて、生成されるオブジェクトの特徴を取り決めたものをす。

オブジェクトクラスを元に生成される。これをインスタンス化と呼ぶ。クラスの持つそれぞれのデータ構造、振る舞いには、外部からのアクセス範囲を定義することができる。クラスは要素の継承を行うことが出来る。これを汎化と呼ぶ。

継承されたクラスは継承元のクラスから見て、子クラス(または、サブクラス)と呼ばれる。また、継承元のクラスは親クラス(またはスーパークラス)と呼ばれる。子クラスは、親クラスが持っている要素をすべて受け継いでいる。これが継承である。

会社と社員に例えた場合の概要

90年代以降のPCでは、一つのコンピュータ上で、多数のプログラマによって作られた数の小プログラムが連動して動くスタイルが一般的である。WindowsMacOSもひとつの巨大なプログラムではなく、細かい機別の小プログラム集合体である。また、ワープロやお絵かきソフトなどの「アプリケーションプログラムも構造的には機別の小プログラム集合体で、エフェクトツール処理が小プログラム単位にまとめられているほか、ウィンドウの描画やマウス操作認識などの一般的な処理は、OSのもつ小プログラムを呼び出して処理を行っている。

これらの"小プログラム"のひとつひとつを、プログラミング世界では「プログラム」とは呼ばずに「モジュール」または「クラス」と呼ぶ。

このようなPCのシステム全体をひとつの"会社"に例えるならば、個々の小プログラム(「モジュール」「クラス」)は役割の異なる一人一人の"社員"といえる。(「アプリケーション」は例えるなら"部署"であろうか)
そして必要に応じて他の"社員"から呼ばれ、相手先の要に沿った仕事を行うことになる。

この際、本人が直接、要請された仕事を行うタイプの"社員"(プログラム)を「モジュール」と呼び、本人の"コピー"が生成され、"コピー"が仕事を行うタイプの"社員"(プログラム)を「クラス」と呼ぶ。

プログラム"フォークリフト運転士"をプログラミングするとしよう。"フォークリフト運転士"には会社中の他のプログラム("出荷場","冷凍倉庫","納品倉庫""加工場"etc・・・)からひっきりなしに運搬の呼び出しがかかる。

プログラム"フォークリフト運転士"が「モジュール」の場合、"フォークリフト運転士"内の処理パラメータ(「運ぶ荷物」「使うリフト」「運搬先」等)は呼び出されるたびに書き換えられていく。

この場合、呼び出す側からしても、そのつどパラメータを定してやらねばならず、逆に"フォークリフト運転士"自身に"相手先別のパラメータ設定リスト"を持たせた場合、"フォークリフト運転士"にリスト管理機の追加が必要になる。実際のプログラミング上では、プログラムが複雑になるということである。

プログラム"フォークリフト運転士"が「クラス」の場合、呼び出し元のプログラム("冷凍倉庫"や"出荷場")は
まず、クラス"フォークリフト運転士"の「コピー生成」の宣言を行う。

例)宣言 "冷凍庫リフトマンA" タイプ "フォークリフト運転士"
  宣言 "出荷場リフトマンD" タイプ "フォークリフト運転士"

  (本説明では日本語で書いているが、実際のプログラムでもこのような宣言文を記述する)

そしてプログラム "冷凍倉庫" や "出荷場" はクラス "フォークリフト運転士" ではなく、コピーの "冷凍庫リフトマンA" や "出荷場リフトマンD" に対して運搬処理の示を行う。これらのコピーのことを「オブジェクト」と呼ぶ。

オブジェクト"冷凍庫リフトマンA" "出荷場リフトマンD" はメモリ上にコピーされた別々のプログラムのため、「運ぶ荷物」「使うリフト」「運搬先」等の処理パラメータは個別に持つことができる。モジュールの場合のように"相手先別のパラメータ設定リスト"を持たせる必要も少ないため、プログラムシンプルにしやすくなる。

また、「オブジェクト」は「クラス」の"コピー"であるという特性を生かし、

などの宣言方法がある。

実際のプログラミングでは、「モジュール」「クラス」それぞれに向いた処理があり、どちらを利用するかは経験的に理解していく面も大きい。

なお、このようにソフトウェアを"小プログラムの集まり"として作るためには。、プログラミング言語に「小プログラム(オブジェクト)同士お互いに呼び出しあう」「処理パラメータを引き渡す」といった機が必要になる。そのような命令文を備えているプログラミング言語を、オブジェクト指向プログラミング言語と呼ぶ。

関連項目

この記事について

ツイート

「クラス」で検索