vieweditattachhistoryswikistopchangessearchhelp

Flavors

1970 年代後半、MIT の AI ラボで Lisp マシン上に構築されたオブジェクト指向システム。
Smalltalk と、そのアイデアをヒントにまとめられたアクター理論(註:Smalltalk に関しては利権の問題で論文発表が XEROX の弁護士の判断で妨げられたせいで一般にはこの逆、つまりアクター理論をもとに Smalltalk のオブジェクト指向が構築されたとの印象を持つ人が多い)とその実装である PLANNER(正確には PLANNER 自体はアクター理論に基づいたものではなく、PLANNER を使ってアクター理論の実装を試みたもの)の影響を受けて作られた。
端的には、Lisp でメッセージ送信メタファに基づくオブジェクト指向を実現するための試みである。
クラスの役割りは flavor と呼ばれる構造体が担当し、インスタンスはそこから作られる。
flavor はミックスインが可能で、多重継承を実現していた。
この機構は、のちの CLOS に大きな影響を与える。--sumim

メッセージ送信メタファは総称関数の起動に取って代わられ、Lisp 界隈からは姿を消した--sumim

待った待った。Lisp勢は、「OOPシステムなんざ何時でもどのようにでも「作れる」」とイキまいてんだから、Lisp界隈という総称:-D的概念はここでは無意味でしょ。--戯

メッセージ送信メタファは CommonLoops、CLOS への Flavors の影響からは排除された。両者では Lisp 元来の疑似関数プログラミングの理念に親和性の高い総称関数機構が用いられた。--sumim


>PLANNER 自体はアクター理論に基づいたものではなく、PLANNER を使ってアクター理論の実装を試みたもの
PLASMAと言うものらしいです。--CUE



(defflavor moving-object ((x-position 0.0)
                          (y-position 0.0)
                          (x-velocity 4.0)
                          (y-velocity 3.0)
                          mass)
                         ()
  :gettable-instance-variables
  :settable-instance-variables
  :initable-instance-variables)

(defmethod (moving-object :speed) ()
  (sqrt (+ (^ x-velocity 2)
           (^ y-velocity 2))))

(defmethod (moving-object :direction) ()
  (atan y-velocity x-velocity))

(defflavor ship (engine-power number-of-passengers name)
                (moving-object)
  :gettable-instance-variables)

(defflavor meteor (percent-iron)
                  (moving-object)
  :initable-instance-variables)

(setq my-ship (make-instance 'ship 'mass 3.5))

(funcall my-ship ':set-x-position 3.0)

(funcall my-ship ':x-position)
==> 3.0

(funcall my-ship ':speed)
==> 5.0




モロ CLOS ()。--spiral

そうですね。(- CLOS 総称関数) ってな感じですごく似ています。--sumim

このページを編集 (2557 bytes)


Congratulations! 以下の 2 ページから参照されています。

This page has been visited 4034 times.