Index: [Article Count Order] [Thread]

Date:  Fri, 2 Jun 2000 12:34:57 +0900
From:  Yutaka Kamite <y-kamite@....jp>
Subject:  [XP-jp:00449] Installed26 章の出だし (Was Re: FW: XP Installed Smalltalk Code Samples in Java)
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <39372B9FA.AADFY-KAMITE@....jp>
In-Reply-To:  <B55C9C5A.1A04%khosokawa@....com>
References:  <4.2.0.58.20000601091607.04405ba0@....net> <B55C9C5A.1A04%khosokawa@....com>
Posted:  Fri, 02 Jun 2000 12:35:59 +0900
X-Mail-Count: 00449

上手です。
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を得るとい
う彼の意向を表現している。これによりコードはクリアになるが、より重要なの
は、今やっているメソッドのコーディングの間に、別の細かい事を考えることに
ギアをチェンジする必要がないので、動きがスムーズに保たれることだ。

(まで)