00:34:05 <usaturn> c⌒っ*^-^)っφ メモメモ...
00:47:08 [potix2'out] ; Remote host closed the connection
09:58:19 [saia'in]
12:16:21 [potix2'in]
12:20:16 [saia'out] ; Ping timeout: 246 seconds
12:22:05 [saia'in]
12:29:50 [potix2'out] ; Remote host closed the connection
13:01:05 [potix2'in]
13:56:07 [potix2'out] ; Remote host closed the connection
15:06:08 [saia'out] ; Quit: Leaving...
19:19:48 [potix2'in]
19:52:37 [potix2'out] ; Remote host closed the connection
21:53:56 [potix2'in]
22:08:17 [g000009'in]
22:08:59 <g000009> また22時になってしまいましたが、Successful Lisp / David B. Lamkinsを読む
22:09:23 <g000009> (((( Chapter 7 - A First Look at Objects as Fancy Structures ))))
22:09:26 <g000009> からです
22:10:07 <g000009> 前章はdefstructでしたが、この章はdefclassについてです
22:10:16 <g000009> http://psg.com/~dlamkins/sl/chapter07.html
22:10:35 <g000009> (((( Hierarchies: Classification vs. containment ))))
22:19:06 <g000009> 自分は、オブジェクト指向に疎いので、containment hierarchyとかclassification hierarchyという表現は知らなかったのですが
22:19:48 <g000009> 英辞郎で調べたら包含階層、分類階層って訳もあるようですが、これ定訳なんでしょうか
22:21:13 <g000009> 包含階層は、has-aとかis-a-part-ofのように、トップに本体があって、下にそれぞれ構成するパーツがあるというような構成
22:23:42 <g000009> 分類階層の方は、is-a-kind-ofで、種類による階層づけで、一般的なものと、より特定化されたものという構成
22:24:02 <g000009> (((( Use DEFCLASS to define new objects ))))
22:27:14 <g000009> defclassでのクラスの定義と、make-instanceでのインスタンス化の単純な例です
22:27:39 <g000009> #<... >という読み取り不可な印字表現についても触れられています
22:27:48 <g000009> (((( Objects have slots, with more options than structures ))))
22:31:16 <g000009> クラスにスロットを付けてみようというところです
22:32:02 <g000009> closだと他の言語でいうメンバ変数みたいなものをスロットと呼んでいて、関数名等も全部その流儀です
22:32:35 <g000009> ここでは、スロットのアクセスには、slot-valueを利用しています
22:32:43 <g000009> (((( Controlling access to a slot helps keep clients honest ))))
22:38:43 <g000009> slot-valueでのスロットへの直接のアクセスは作法的に良くないので、
22:38:59 <g000009> アクセサを定義してつかいましょうという解説です
22:39:46 <g000009> リーダ、ライタ、アクセサ(リーダ+ライタ)、アクセサなし、の組み合わせが表現できますが、
22:40:24 <g000009> アクセサなし の場合にだけ、slot-valueをつかいましょう的なことが書いてあります
22:40:33 <g000009> (((( Override a slot accessor to do things that the client can't ))))
22:53:57 <g000009> クラスの定義時にスロットの定義は可能ですが、このスロットがお互いに連携して動作する場合はどうするか、というような話です
22:54:42 <g000009> ここでは、クラス定義時に生成されるアクセサ(メソッド)を再定義する方法が示されています
22:54:45 <peccu => PECCU>
22:54:51 <g000009> (defmethod radius ((new-radius number) (object sphere))とあるんですが、
22:55:00 <g000009> (defmethod (setf radius) ((new-radius number) (object sphere))
22:55:23 <g000009> の誤植かなと思いました。
22:57:04 <g000009> radiusをセットすると、計算してvolumeもセットしなおす、というところです
22:58:28 <g000009> (((( Define classes with single inheritance for specialization ))))
23:01:40 <g000009> 継承の説明で、二次元の図形を例に、特定化しつつスロットを付け足したりして説明しています
23:01:53 <g000009> (((( Multiple inheritance allows mix-and-match definition ))))
23:19:59 <g000009> 多重継承の説明ですが、mixinの説明という感じです
23:22:09 <g000009> 2dの描画を、bitmapに出力するmixin、postscriptに出力するmixin...etcという風に、本体+mixinという風に構成していくというところです
23:23:11 <g000009> ruby方面では、mixinは言語の機能ですが、元祖のCLOS/Flavorsでは、mixinは多重継承の使い方の一つで作法というところです
23:23:44 <g000009> 実際に動くコード例でないのがちょっと残念ですね
23:24:04 <g000009> (((( Options control initialization and provide documentation ))))
23:26:25 <g000009> スロットは初期化しないとunboundですが、インスタンス化の際に初期化することも可能です
23:27:12 <g000009> 初期化の為のスロットオプションの:initformと、make-instanceで使う:initargの解説です
23:27:24 <g000009> (((( This is only the beginning... ))))
23:27:51 <g000009> これらは手始めということで、14章で本格的に解説するようです
23:28:44 <g000009> ということで、明日は、8章から読みます
23:30:43 [g000009'out] ; Quit: ERC Version 5.1.2 $Revision: 1.796.2.4 $ (IRC client for Emacs)