Path: sranha!katsu From: katsu@sra.co.jp (WATANABE Katsuhiro) Message-ID: Date: 1 Jul 91 07:43:00 Organization: Software Research Associates, Inc.,Japan In-reply-to: katta@s5g.ksp.fujixerox.co.jp's message of 26 Jun 91 01:28:20 GMT Newsgroups: fj.lang.st80 Subject: Re: Class>>addClassVarName: doesn't update change set Distribution: fj References: <5186@fxuugw.ksp.fujixerox.co.jp> Class>>addClassVarName: が change set を更新しない件に関連して  メソッドを呼んでプログラムを変更する場合の change set の変化に ついて、もう少し調べてみました。  文献[1]によれば、change set が変更されるのは、 1.メソッドが変わった時 2.メソッドが追加された時 3.メソッドが削除された時 4.メッセージのカテゴリーが変わった時 5.クラス定義が変わった時 6.クラスコメントが変わった時 7.新しくクラスができた時 8.クラス名が変わった時 9.クラスが削除された時 10.クラスのカテゴリーが変わった時 であるということになってます。  PPS ST80 R4 で、自然に考えてこれらに対応する *なるべく高レベルの* メソッドが change set をどう扱うようになってるかを調べてみました。 change set に何らかの変更を登録するものには○をつけてあります。 (参考:ClassDescription は Metaclass と Class 両者の superclass) (1,2) ClassDescription>>compile:classified: ○ (3) ClassDescription>>removeSelector: ○ (4) ClassOrganizer>>renameCategory:to: × (5) Class>>addInstVarName: ○ (5) Class>>removeInstVarName: ○ (5) Class>>addClassVarName: × (5) Class>>removeClassVarName: × (5) Class>>addSharedPool: × (5) Class>>removeSharedPool: × (5) Metaclass>>addInstVarName: ○ (5) Metaclass>>removeInstVarName: ○ (5) Metaclass>>addClassVarName: × (Metaclass>>removeClassVarName: のようなものはありません。) (5,7) Class>>subclass:instanceVarNames:classVariableNames... ○ (5) UndefinedObject>>subclass:instanceVarNames:classVar... ? (8) Class>>rename: ○ (6) ClassDescription>>comment: ○ (9) Class>>removeFromSystem ○ (10) ClassDescription>>category: × (10) SystemOrganizer(ClassOrganizer)>>renameCategory:to: × (上が全てを枚挙しつくしているか、あるいは *高レベル* かどうかは 人によって意見が分かれるかも知れません。)  そういえば、SystemOrganizer>>renameCategory:to: でもそうですが、 ブラウザーからカテゴリーの rename をしても change set が変わりませんね。 私はそのカテゴリーに属する全てのクラスが Redefined という扱いに なるべきだと思いますが、どうでしょうか? さて、記事 <5186@fxuugw.ksp.fujixerox.co.jp> で katta@s5g.ksp.fujixerox.co.jp (Hitoshi Katta) さんいはく > これを作った人はaddClassVarName:を直接呼ぶ人がいるとは > 考えなかったんでしょう。  私もそう想像しています。とすれば作った人は何のためにこのような メソッドを準備したかというと、動的にクラスを生成変更削除する、 すなわちメタプログラミングのためだということになるかと思います。 > 次のように直して使ったらどうですか。  とのことで change set に記録するように直す修正を頂きましたが、 主にメタプログラミングのためにこれらのメソッドが使われるのだとすれば 普通は勝手に change set に記録を残して欲しくないですよね?だから案外 addClassVarName: のように、記録しない方が正しかったりするのでは? 参考文献 [1]"Smalltalk-80:The Interactive Programming Environment" section 23.2 The System Change Set; Adele Goldberg; Addison Wesley; ISBN 0-201-11372-4; -- ----____----____ 渡邊克宏 SRAソフトウェア工学研究所