2008年1月12日土曜日

Chapter 16 Object Reorientation: Generic Functions

前説

特になし。


Generic Functions and Classes

  • object orientation の根本アイデアは、「まずデータ型を定義すること、それに続きその型に関係する操作を定義することであり、プログラムを系統立てるパワフルな手法である」ということ。(まあ、そうなのですが、このレベルではOOとADTの違いがないですね)
  • CL(OS)の特徴をいくつか。

    • class-based。Classesは、objectsのtaxonomyと位置付けられる。
    • taxonomyの根はひとつ。T。
    • multiple inheritance。
    • message-passingの記法は取らない。CLでやると、(send object 'foo)などとなるが、こうすると高階関数などと相性が悪いから。
    • そのため、(foo object)という記法を採用した。
    • このfooを統合することにした。それは新種の関数で、a generic function と呼ぶ。



Generic Functions and Methods


  • "A generic function is generic in the sense that it can--at least in theory--accept any objects as arguments." それだけなら、呼び名はただの関数で済んじゃうのでは。



DEFGENERIC

預金関係の用語。

  • checking account : 当座預金
  • savings account : 貯蓄預金
  • withdrawal : 引き出し
  • balance : 残高
  • overdraft : 当座貸越し

日本では手形を市民生活の中ではほとんど使わないので、この例は日本の人にはわかりにくいような。当座預金は、日本では、まあ法人しか使っていない。それとも、ITのプロなら業務システムの基礎として簿記は知ってて当然というスタンスか。


DEFMETHOD

  • CALL-NEXT-METHODのnextって、どういうルールで確定するんだろ?
  • the EQL specializerは、the methodが評価されたときに固定され、その後に*account-of-bank-president*を変更しても反映されない。



Method Combination

最近は条件付きパターンマッチングをもった言語が増えてるから、generic functionは著者が心配するほど違和感ないのでは。
effective method の構築にあたって、EQL specializers 同士の比較アルゴリズムについて、特定に使っているparametersが同じ場合どうするんだろ。

そうか、EQL specializersは、オブジェクトが一意に特定される形でしか使えないんだ。ならばそれは常に、most-specificかつunique。でもslotsのこの値がnilだったら、とか書けるのも記述力が高いと思う。代替手段はいろいろあるので、たいしたことじゃないか。

The Standard Method Combination
Other Method Combinations

特になし。

Multimethods

うーん。Javaを知らないので、Javaの例が理解できない。Javaもいつか勉強せねば。

To Be Continued ...

特になし。

この章を読んでみて。
CL(OS)は、OOよりADTに近いと思いました。OOとADTは、双子だけど右利きと左利き、くらいなんで、あんまり意味ないんですが。

0 件のコメント: