上手です。
XP Installed26 Part3 Test-first, by Intetion
まとめの初回分です、SmalltalkとJavaのコードよろしくお願いします。
ページ まとめ Java への変換担当者
----------------------------------------------
Part 1 189 - 192 上手
Part 2 193 - 196 上手
Part 3 197 - 200* 上手
Part 4 201 - 204 上手
-----------------------------------------------
Smalltalk の解説は 「さくさくSmalltalk」(梅澤さん、今野さん他共訳)参考に
して基本的な部分だけ埋めてあります。チェックおよび追加をお願いします。
=== Page 197
<Smalltalk>
=== Page 197 Code 1
..SummarizerTest
10:40:57
abcSummarizer
^Summarizer
with:#()
with:#()
</Smalltalk>
Summarizer オブジェクトを作って、Chetはテストを強化する準備ができている。
私はまだ準備が出来ていない、しかし彼は出来ている、そこで彼が全ての値をチ
ェックするためのテストをつくるのを見守る。
<Smalltalk>
=== Page 197 Code 2
..SummarizerTest
10:43:06
testABC
"self unsafRun:#testABC"
|summarizer summary|
summarizer:=self abcSummarizer.
summary:=summarizer summary.
self should:[summary size=3].
self should:[summary first name='a'].
self should:[summary first amount=11].
self should:[(summary at:2) name='c'].
self should:[(summary at:2) amount=2].
self should:[summary last name='b'].
self should:[summary last amount=3].
解説:
summary に順番に3つの collection を創らす。
</Smalltalk>
Ron もう選択(の余地)はないね。今 collection を構築しなきゃ。
Chet いやいや、まだやることがある。
<Smalltalk>
=== Page 197 Code 3
___SummarizerTest
10:44:29
abcSummarrizer
^Summarizer
with:self acCollection
with:self abCollection
</Smalltalk>
=== Page 198
Chetは考えるのに必要な時間をちょっと長く使い彼の意向をメソッドの中に宣言
した。つまり、aとc aとbを持つ collection を一つづつ持つようにした。そて魔
法の小妖精が既にそれを創ってくれていると想定する。彼の意向のプログラミン
グ。
さて、何が必要かは、名前が解っているので、はっきりしている。メソッドを
(キーボードから)打ち込む。
<Smalltalk>
=== Page 198 Code 1
___SummarizerTest
10:45:45
acCollection
^OrderdCollection
with:(Sum
name:'a'
amount:1)
with:(Sum
name:'c'
amount:2)
解説:
#お願いします。
(以下は、「さくさくSmalltalk」p82の引用です。
OrderdCollection は、オブジェクトのコレクションが特定の順番で保持されアク
セスされねばならない場合に、Arrayの代わりにもっとも頻繁に使われるクラス。
</Smalltalk>
<Smalltalk>
=== Page 198 Code 2
10:45:49
abCollectio
^OrderdCollection
with:(Sum
name:'a'
amount:10)
with:(Sum
name:'b'
amount:3)
</Smalltalk>
よし、テストは書けた。走らそう。おっと。オリジナル summary メソッドは与えら
れた4つの要素を連結する、3つじゃない、だからテストはブレークする。でも驚
かない。
Chet OK、summary を実際にやろう。どうやる?
Ron firstcollection にいって、その要素を全部 summary collection に移そう。
それから second collection に行って、要素が summary の中にあればそれに追加
して、そうでなければその要素を(summary の)中に入れよう。
=== Page 199
#ここ意味不明
Chet 2つのメソッドは全く同じってわけじゃないけど良く似てる。それぞれの
collection をみて、得た要素が summaryの中にあればそれを追加し、そうでなけ
れば新しく創るというのはどうだい。
Ron いいね。最初に first をプロセスして、次に second をプロセスしよう。
<Smalltalk>
=== Page 199 Code 1
___Summarizer
10:50:29
summary
self
processFirst;
processSecond
解説:
#お願いします。
(以下は、「さくさくSmalltalk」p37の引用です
メッセージのカスケード(直列化)をする時は、メッセージの間にセミコロンを
いれる。続いて送られるメッセージは、最初のメッセージで返されたオブジェク
トではなく、最初のレシーバに送られる。
</Smalltalk>
Chet answer はどこで入力する?
Ron 新しいインスタンス変数をつくろう、summarizer。
Chet OK、コンストラクタ・パラメータ メソッドで初期化していい?
Ron OK。
Chet はクラス定義にインスタンス変数を追加し、メソッドに空の
OrderedCollection を追加する。
#ここ意味不明。
<Smalltalk>
=== Page 199 Code 2
___Summarizer
10:51:01
setFirstCollection:firstCollection secondCollection:secondCollection
first:=firstCollection
second:=secondCollection
summary:=OrderedCollection new
解説:
お願いします。
</Smalltalk>
Ron 二つの違うプロセスメソッドを持つ必要はないね。process:メソッドを2回
使おう。
<Smalltalk>
=== Page 199 Code 3
___Summarizer
10:51:55
summary
self process:First.
self process:Second
</Smalltalk>
Ron OK。process: (メソッド)を書こう。
=== Page 200
Chet は collection に対するループを書く。要素をどう処理するかちょっと考え
てから、 processItem: の意向を宣言することを思い出して、続ける。
<Smalltalk>
=== Page 200 Code 1
___Summarizer
10:52:32
process:aCollection
aCollection do:[:each|self processItem:each]
解説:
お願いします。
</Smalltalk>
もう終了は近い。我々はテストを走らし、processItem: をまだ定義していないこ
とに気がついた。Chet はブランクメソッドをつくり、それから我々は話し合う。
<Smalltalk>
=== Page 200 Code 2
___Summarizer
10:52:42
processItem:aSum
</Smalltalk>
Ron OK。ゴム舗装道路だ(#??)。どうする。
Chet えーと、summary の中で matchingSum を見つけて・・
Ron そして 入力 Sum をそれに追加する! そうしよう!
言ったとおりにコーディングする。我々の意向は、 matchingSum を見つけて、入
力 Sum をそれに追加することだ。コードはその通りに言っている。テストを走ら
す、そして、もちろん、matchingSum は定義されていない。
Ron 我々は summary を当たって、matching があるか確認しないと・・
#以下のやりとりの意味不明
Chet detect! (detect メソッド名を創ろう)
Ron そう、detect をしよう・・
Chet そして ifAbsent: (も創ろう)
Ron inNone: (じゃなかったっけ)
Chet どっちかわからない
Ron 新しい Sum をつくって summary に入力しよう
<Smalltalk>
=== Page 200 Code 2
___Summarizer
10:54:22
processItem:aSum
(self matchingSum:aSum)add:aSum
解説:
お願いします。
</Smalltalk>
まで ----------------------------------------------
オリジナル http://www.xprogramming.com/
Copyright (c) 1999, REJeffries et al. (ronjeffries@....org)