Index: [Article Count Order] [Thread]

Date:  Sat, 2 Sep 2000 14:33:19 +0900
From:  Kaoru Hosokawa <khosokawa@....com>
Subject:  [XP-jp:00794] Re: Member, MemberList,  MemberAuthorization
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <B5D6BFD2.3332%khosokawa@....com>
In-Reply-To:  <B5D0AE05.3165%khosokawa@....com>
Posted:  Sat, 02 Sep 2000 14:31:50 +0900
X-Mail-Count: 00794

ホソカワです。

続きをちょっと。

on 2000/08/29 0:04 AM, Kaoru Hosokawa at khosokawa@....com wrote:

> ホソカワです。

…

> 「太郎、花子」コンビで書いてみます。
> 
> 太郎:まずは、テストを書きます。(太郎がキーボードを持っています。)どう?
> Memberをクリエイトして、メールアドレスが等しいかどうかチェックしています。
> 
> public void testNewMember() {
> String mailAddress = "aaa@....ccc";
> Member member = new Member(mailAddress);
> assertEquals(member.getMailAddress(), mailAddress);
> }
> 
> 花子:いいんじゃないの。ただ、コンストラクタ−にメールアドレスを渡しているの
> はどうして?setMailAddress()で後から設定すればいいじゃない?
> 
> 太郎:メンバーはメールアドレスが必須だから、コンストラクタ−のパラメータにし
> たの。
> 
> 花子:なるほど。じゃ、メールアドレスのチェックは?変なメールアドレスはエラー
> で返すべきでは?
> 
> 太郎:変なメールアドレスかどうかのチェックは大変だし、まだ、問題になっていな
> いから、後回しにします。いい?じゃ、コンパイルしますね。(もちろん、エラーで
> ボロボロ。)さあ、Memberを書こうか?
> 
> class Member {
> private String mailAddress;
> 
> public Member(String mailAddress) {
> this.mailAddress = mailAddress;
> }
> 
> public String getMailAddress() {
> return mailAddress;
> }
> }
> 
> (これをコンパイルし、テストを実行すると、テストもパスします。)
> 
> 花子:うまく行ったね。setMailAddress() は、書かないの?
> 
> 太郎:今は、必要がないから、書かなくてもいいんじゃない?ヤグニ(YAGNI)って
> やつ。
> 
> 花子:今度は、私がキーボードを持ちます。MemberListを書きますね。まずは、テス
> トから。
> 
> public void testNewMemberList() {
> MemberList memberList = new MemberList;
> assertEquals(memberList.getSize(), 0);
> }
> 
> public void testOneMemberList() {
> MemberList memberList = new MemberList;
> Member member = new Member("aaa@....ccc");
> memberList.add(member);
> assert(memberList.getSize(), 1);
> }
> 
> public void testTwoMemberList() {
> MemberList memberList = new MemberList;
> Member firstMember = new Member("aaa@....ccc");
> Member secondMember = new Member("ddd@....fff");
> memberList.add(firstMember);
> memberList.add(secondMember);
> assert(memberList.getSize(), 2);
> }
> 
> // ...
> 
> という感じでMemberListの続きとMemberAuthorizationを書いてみます。どなたか、
> 実際にコンパイル、実行していただけると嬉しいです。

# また、インデントが消えてしまいました。すみません。

太郎:MemberListの中身を書こうか?リストでインプリする事になるけど、
ArrayListとか使うのかな?

花子:ArrayListを使った事がないけど… The Simplest Thing That Could Possibly
Work (TSTTCPW)でしょうね。普通の配列もあるけど、動的にサイズを拡張するコード
を書くのは面倒ですね。

class MemberList {
    private List members = new ArrayList();

    public add(Member member) {
        members.add(member);
    }

    public getSize() {
        return members.size();
    }
}

太郎:ArrayListのサイズ取得メソッドは、size()だから、MemberListもsize()にし
た方がきれいだよ。

花子:そうしましょう。さて、addだけでは、ダメで、getも必要ですよ。テスト書き
ます。

    public void testGet0() {
        MemberList memberList = new MemberList;
        Member member = new Member("aaa@....ccc");
        memberList.add(member);
        assertEquals(member.getMailAddress(),
memberList.get(0).getMailAddress());
    }

    public void testGet1() {
        MemberList memberList = new MemberList;
        Member firstMember = new Member("aaa@....ccc");
        Member secondMember = new Member("ddd@....fff");
        memberList.add(firstMember);
        memberList.add(secondMember);
        assertEquals(secondMember.getMailAddress(),
memberList.get(1).getMailAddress());
    }

#すみません。Wordwrapがオフれず、変なインデントになっています。

花子:じゃ、中身を書きます。

    public get(int index) {
        return members.get(index);
    }

太郎:いいんじゃない。それから、メンバーリストが空の時のgetやindexがsizeより
大きい時のgetのテストも必要だね。

花子:書いてみますね。

    public void testEmptyGet() {
        bool exceptionThrown = false;
        MemberList memberList = new MemberList;
        try {
            Member member = memberList.get(0);
        } catch (NoSuchElementException e) {
            exceptionThrown = true;
        }
        assert(exceptionThrown);
    }

    public void testOutOfRangeGet() {
        bool exceptionThrown = false;
        MemberList memberList = new MemberList;
        Member member = new Member("aaa@....ccc");
        memberList.add(member);
        try {
            Member member = memberList.get(1);
        } catch (NoSuchElementException e) {
            exceptionThrown = true;
        }
        assert(exceptionThrown);
    }
    
…と続くわけですが、なんか自分の世界に浸っていると言う感じと、実際にコンパイ
ル、実行していないので、ちょっと続けるのがきついです。でも、太郎と花子と二つ
の頭で考えるのは悪くないような気がします。ただ、この会話形式でポストするのは
面倒ですね。

-- 
Kaoru Hosokawa
khosokawa@....com