: この文書について...
: オブジェクト指向言語のモデル化
: メソッド update の役割り
- この本では、幅広く、しかし、普遍的ではない、オブジェクト指向構造
を扱う。クラスベースとオブジェクトベース言語を考察し、関数型と命令
型、型付きと型無しのそれぞれを考察する。
- 前章では、多くのオブジェクト指向の特徴として
2 つの基本的なアイデア embedding と delegation を識別した。
オブジェクトの形式化では、主なオブジェクト指向パラダイムとして
delegation より embedding を選択する。このアプローチは unconventional
であるが、それが最も簡単なフォーマルシステムを生じ、多くの特徴を表現するこ
とができる。
- 例えば、我々の計算はクラスベースではない(クラスは built-in で
はない)が、クラスをモデル化することができる。それらは、モードスイッチ
の形で動的継承を含んだ embedding ベースの特徴を直接にモデル化すること
ができる。
- delegation ベースにおいても、我々の計算ではクラスと同じくらい
簡単に traits をモデル化することができる。そして traits をベースにし
た 動的 delegation をモデル化することができる。
- trais を通常のオブジェクトとして解釈することにより、重要な複雑さ
が生じる。delegation におけるメソッド lookup の複雑さのためである。そ
れゆえ、我々は、ある delegation ベース言語のこの見方を
簡単に説明することができない。
- オブジェクトとしての traits の使用は、本質的ではない。そして、
型づき言語では徐々に廃止される。
- 一般に、我々のフォーマルな扱いは、逐次言語にかつ、
各メソッドが、むしろ複数オブジェクト (multiple-dispatch) に属するもの
ではなく、単一オブジェクト (single-dispatch) に属する言語に制限されて
いる。
- ある実行モデルの排除は、我々の目的にとってあまり重要ではない。オ
ブジェクト指向言語の型づけの性質を学ぶことにおいて、実行モデルは、関数
的、関係的、命令的、並行的とは、あまり関係ない。
- 我々はこのことを同じようなタイプ構造を持つ関数型と命令型計算を扱
うことにより論証する。
- 同じタイプ構造は、関係言語[13]と並行言語[20]に適用することができ
ることが立証されている。関数型と命令型の実行モデルは、区別して取り扱う。
- 命令型計算に対して開発したが、我々が主に強調したいのは関数型計算に
おいてである。オブジェクト指向プログラミングの鍵となるアイデアの一
つは、(プライベートな)状態を隠すことと、非関数的概念であるため
変に感じるかもしれない。
- 各命令型言語は関数型言語を含んでおり、命令型プログラムの型づけは
少なくとも関数型言語と同等である。
- それゆえ、関数型計算を研究することは適当で、命令型言語に独特な
タイプ規則を追加することは、重要な複雑さを引き起こすものではない。
- single-dispatch に制限することはより重要である。multiple-dispach
を扱うことはオブジェクト指向言語の意味論と同様に large impact を持つ。
- 現在では、オブジェクト指向言語の大多数は、single-dispatch に基づい
ている。型付きオブジェクト指向言語に対して、2,3 の multiple-dispath を
適用させた試みがある。
- 次章以降では、オブジェクトのフォーマルな扱いを進めるにあたって、オ
ブジェクト指向言語のさまざまな特徴をモデル化する問題に、定期的に戻る。
平成12年8月22日