上手です。
Installed26章の出だしの部分です。
どんな内容か把握するためにメモをつくっていたら結構まとまってきましたので
ポストします。進め方を検討する際の参考にして下さい。
まだ途中ですので、あくまで「こんな感じ」ということで・・
また、中身もわかりませんので・・
ところで、下のfrom memoryの意味を教えていただけますか。
(#p192)
このメソッドは二つのパラメータを対応するインスタンス変数に割当てます。
インスタンスは初期化されました。どうせ必要なのでアクセサもつくりましょう。
厳密に言うと、これは誤りでしたが、このクラスをfrom memoryつくりました(#??)
-------------------------------------------------------------------------
(#p190)
タスク:
Sum オブジェクトの2つのコレクションがある。一つのSumは name(a String),
amount(a number)を持つ。アウトプットは新しい Sumsの一つのコレクション。
同じ名前のものは合計する。出力の順番は最初のコレクションの順番とする。
first second 結果
A1 A10 A11
C2 B3 C2
B3
Smalltalk(#日常のちょっとした会話)を話さない人のためにちょっとコメント
をつけます。
...Sum
10:25:00
この2行は、コードを追加しているクラスとそれをやった時間を示す。この目的
は、どれくらい時間がかかったかを示すためだ。
クラス定義です。
...Sum
10:25:00
Object subclass:#Sum
instance variables:'name amount'
これは、Sum という新しいクラスを定義し、インスタンス変数は name, amount
です。Smalltalkでは、変数の型を定義する必要はありません。
では コンストラクタメソッドをつくろう。
メソッド定義は、1タブ空けたメソッド名で始まり、
Smalltalkのメソッド名は、1つ以上のキーワードを含む。
(#p191)
これ(メソッド名)は name:amount: だ。
メソッド自身(中身)は次の行からインデントされて始まる。
^self new
setName:aString
amount:aNumber
これは このクラス(Sum)の新しいインスタンスをつくり(self new)、それに
setName:aString
amount:aNumber
のメッセージを送ることです。
これは我々がコンストラクタパラメータメソッドと呼ぶものです。
キャレット(^)は”回答”、”returns"を意味します。
我々は各クラス定義を同じ様に始めます。コンストラクタとコンストラクタパラ
メータメソッドです。皆さんもいつもそうすると、うまくいきます。
これがメソッドの全部です。
...Sum Class
10:25:00
name:aString amount:aNumber
^self new
setName:aString
amount:aNumber
次のステップはいつも、今メッセージを送ったコンストラクタパラメータメソッ
ドを定義することです。Smalltalkでは(普通)未定義のメソッドを使っても問
題ありません。
...Sum Class
10:25:15
setName:aString amount:aNumber
name:=aString
amount:=aNumber
(#p192)
このメソッドは二つのパラメータを対応するインスタンス変数に割当てます。
インスタンスは初期化されました。どうせ必要なのでアクセサもつくりましょう。
厳密に言うと、これは誤りでしたが、このクラスをfrom memoryつくりました(#??)
...Sum
10:25:30
name
^name
このメソッドは name という名前で、name というインスタンス変数を返します。
(インスタンス変数)name のアクセサです。
厳密に言うと、このクラスをfrom memory as a "given" としてつくった(#??)
のでなけば、これをいれるべきでない
amount に対してもアクセサをつくる
...Sum
10:25:40
amount
^amount
ウオームアップは十分だ。我々のオブジェクト、Summerizerと呼ぶ、を書こう。
最初にSummerizerTest と名付けるテストクラスを作ることから始めよう。
ペアプログラミングをやっている時の会話です。
Chet 最初に何をやろう
Ron 空のを作ろう。空のcollectionを返すやつだ。
Chetはテストを書く。彼はemptySummarizerと言う名前のメソッドがあることを仮
定している。これによりタスクに集中できた。
(#p193)
...SummarizeTest
10:32:08
testEmpty
|summarizer|
summarizer:=self emptySummarizer.
これは我々が"意向によるプログラミング”と呼ぶものだ。空のSummarizerをどう
やって作るか考え、たぶん次に書く代わりに、Chetは空のSummarizerを得るとい
う彼の意向を表現している。これによりコードはクリアになるが、より重要なの
は、今やっているメソッドのコーディングの間に、別の細かい事を考えることに
ギアをチェンジする必要がないので、動きがスムーズに保たれることだ。
(まで)