Previous: , Up: Object-oriented Forth   [Contents][Index]


6.24.7 Comparison with other object models

【他のオブジェクト・モデルとの比較】オブジェクト指向の Forth 拡張機能が数多く提案されています(A survey of object-oriented Forths (SIGPLAN Notices, April 1996) by Bradford J. Rodriguez and W. F. S. Poehlman lists 17)。 このセクションでは、 先程説明した、 よく知られた 2つのモデルと、 (メソッド・マップの使用に関して)密接に関連した 2 つのモデルとの関係について議論します。 このセクションでは Andras Zsoter が協力してくれました。

現在最も人気のあるモデルは Neon モデル(参照: Object-oriented programming in ANS Forth (Forth Dimensions, March 1997)であるようですですが、 このモデルには多くの制限があります34:

もう 1 つのよく知られた出版物は、 Object-Oriented Forth (Academic Press, London, 1987) by Dick Pountain ですが、 遅延結び付け(late binding)をほとんど扱っていないため、 真のオブジェクト指向プログラミングに関するモノとは言えません。 代わりに、 Ada (83) のようなモジュラー言語の特徴である情報隠蔽やオーバーロードなどの機能に焦点を当てています。

Does late binding have to be slow? (Forth Dimensions 18(1) 1996, pages 31-35)(「遅延結び付けは遅くないといけないのか?」) で、 Andras Zsoter は(objects.fsthis のような)アクティブ・オブジェクトを多用するモデルについて説明しています。 アクティブ・オブジェクトは、 すべてのフィールドにアクセスするために使用されるだけでなく、 すべてのセレクター呼び出しの受信オブジェクトも指定します。 あなたは { ... } を使用してアクティブなオブジェクトを明示的に変更する必要がありますが、 objects.fs では m: ... ;m で多かれ少なかれ暗黙的に変更されます。 Zsoter のモデルでは、 受信オブジェクトがすでにアクティブなオブジェクトであるため、 メソッドのエントリ・ポイントでのこのような変更は不要です。 一方、 Zsoter のモデルでは明示的な変更(機能)が絶対に必要です。 そうしないと、 誰もアクティブ・オブジェクトを変更できなくなるからです。 このモデルの標準 Forth での実装は、 http://www.forth.org/oopf.html から入手できます。

oof.fs モデルは、 (さまざまなワードリストに名前を保持することにより、)情報の隠蔽とオーバーロードの解決(resolution)をオブジェクト指向プログラミングと組み合わせます。 メソッドのエントリ時にアクティブ・オブジェクトを暗黙的に設定しますが、 (>o...o> または with...endwith を使用して、)明示的に変更することもできます。 オーバーロードの解決と早期結び付け(early binding)のために、 パースと、 ステートスマートなオブジェクトとクラスを使用します: オブジェクトまたはクラスはセレクターをパースし、 そこからメソッドを決定します。 セレクターがオブジェクトまたはクラスによってパースされない場合、 Zsoter のモデルのように、 アクティブなオブジェクトのセレクターへの呼び出し(遅延結び付け;late binding)が実行されます。 フィールドには常にアクティブ・オブジェクトを通じてアクセスします。 このモデルの大きな欠点は、 パースとステート・スマートです。 これにより拡張性が低下し、微妙なバグが発生する可能性が高くなります。 基本的に、 オブジェクトやクラスをティック(tick)したり postpone したりしない場合にのみ安全です(Bernd は反対しているが、 著者 (Anton) は納得していない)。

mini-oof.fs モデルは、 objects.fs モデルの非常に簡素化されたバージョンに非常に似ていますが、 構文的には objects.fsoof.fs モデルが混合されたものです。 。


Footnotes

(34)

この批評の長いバージョンは、Anton Ertl の On Standardizing Object-Oriented Forth Extensions (Forth Dimensions, May 1997) にあります。