クラスとは何か

言葉としての意味を考えるなら、クラスとは類別される際の類であり、(大抵はある共通の属性を基礎として)分類され集められた対象(オブジェクト)の集まりそのもののことです。

プログラムの意味を考えるなら、クラスとは、それに属するインスタンスがメッセージを解釈するためのコンテクストを作り出すものです。インスタンスに送られたメッセージは、それが属するクラスの機構にしたがって解釈され、実行されます。

コードとしての機能を考えるなら、クラスとは、それに属するインスタンスの設計図を定めるものです。データ処理能力を持つactorとしてのインスタンスが、どのようなタイプの属性と挙動をもつべきかを決定します。

Mopsでの実装を考えるなら、クラスとは、それに属するインスタンスの固有データのデータ構造型を定め、メッセージに対応する具体的な動作であるメソッドの定義を保有するものです。インスタンス生成の時には、ここで決められたデータ構造が参照されてインスタンスは具体化されます。さらには、クラスはそれが保有しているメソッド定義とそのインスタンスとをメッセージに応じて結びつける際の、媒介の役割を果たします。もしもインスタンスが、自己のクラス中には対応づけることができるメソッドが存在しないようなメッセージを受け取ったならば、インスタンスはエラーを返し、処理は中断します。

Mopsではクラスを定義する際に、インスタンス変数の構造とメソッドの具体的内容定義(コード)を、その定義に中に書き込む必要があります。これは少し窮屈ですが、それを前提として書いていけば、それほど障害になることはありません。

クラスの定義と実装を切り離すことができる方が、柔軟性が高くて優れていると思われがちです。それはその通りなのですが、結局のところ、トップダウン型の設計を支援することになるように感じられます(必然的な繋がりはありませんが)。forthの特徴はボトムアップ型(細かい部品をつくり、それを組み合わせていくやり方)といわれ、それがlispなどと並んで他の言語に対して優れた点であるといわれます。オブジェクト指向はそれを破壊するもののように見えなくもありません。しかし、実際には、ボトムアップ型のオブジェクト指向プログラミングも可能であると思います。それを前提とすれば、定義と実装が同時に行われるという性質も、もっともなものに見えてきます。というのは、予め宣言しておいて、定義を後回しにしなければならないのは、結局、その時点では細かい点を詰められないからということなのですが、細かい話を積み上げていく書き方なら、そんなことは滅多に起こらないと思われるからです


関連項目:






最終更新:2018年12月21日 22:48