for VisualWorks 7.8 / 7.7 / 7.6 with Jun790
ワークベンチとは、自分のための工作台のことであり、仕事場と言っても過言ではないでしょう。数多くの職人たちが自分の仕事場や作業台を持つように、たくさんの芸術家たちが自らのアトリエを有するように、私たちプログラマも自分が用いる道具を自力で工作し、常に整備して、快適な仕事場をこしらえることに努めましょう。
実は、自分のための工作台を作成すること自体がメタプログラミングなのです。工作自体・仕事自体を考え抜くことに他なりませんから、良い修行になるのです。では、以下に示すものを作成しましょう。まるでシステムブラウザみたいでしょ。プログラムの管理・検索・編集など、プログラマの仕事を一手に担う道具です。
|
これを自力で設(しつら)えることができれば、あなたも職人(Smalltalkプログラマ:Smalltalker)の仲間入りです。オブジェクト指向プログラミングがしっかりと腑に落ちていることの証拠になります。どうぞ次のプログラムを実行してください。作成するための準備が整います。
| aString aURL aFilename aCollection | aString := 'http://www.cc.kyoto-su.ac.jp/~atsushi/Programs/VisualWorks/loading.st'. aURL := JunURL named: aString. aURL exists ifFalse: [^nil]. aFilename := Filename defaultDirectory construct: aURL asURI tail. aURL downloadTo: aFilename. aFilename exists ifFalse: [^nil]. aFilename fileIn. (aCollection := OrderedCollection new) add: #url: -> 'http://www.cc.kyoto-su.ac.jp/~atsushi/Programs/VisualWorks/Workbench/Workbench.st'; add: #comment: -> 'Copyright 2008-2011 KSU (Kyoto Sangyo University). All Rights Reserved.'; add: #bundle: -> #KSU; add: #package: -> 'KSU-Tool'; add: #nameSpace: -> #KSU; add: #category: -> 'KSU-Tool'; add: #class: -> #{KSU.Workbench}; add: #protocol: -> #examples; add: #selector: -> #example; add: #execute: -> [#{KSU.Workbench} value example]; yourself. JunSystem perform: ((aCollection collect: [:each | each key]) inject: String new into: [:selector :key | selector , key]) asSymbol withArguments: (aCollection collect: [:each | each value]) asArray
既存のシステムブラウザを用いて「作成してください」と書かれているメソッドを実装しましょう。すべてこしらえると…
|
クラスリストとインヘリタンスのタブ(タックインデックス)を操れば、約5千個のクラスたちを、アルファベット順に見たり、クラス階層構造を見たりできます。
|
インスタンスメソッドとクラスメソッドのタブ(タックインデックス)を操れば、クラス階層をたどるのか、メタクラス階層をたどるのかを選ぶことができます。
|
約1,000行のプログラミング(このPDFを見ながら)、おきばりやしとくれやす!(必ず各々のメソッドにコメントを書き加えてくださいませ。)
message selector and argument names ←ここにメッセージのセレクタと引数を分かち書きします。 "comment stating purpose of message" ←ここにメッセージの意図や実行メッセージ式をコメントとして書き下ろします。 | temporary variable names | ←ここに一時変数を定義します。もちろん不要な場合もあります。 statements ←ここからメソッドの本体としてのプログラムを書いてゆきます。
for VisualWorks 7.8 / 7.7 / 7.6 with Jun790