tetsunosukeのnotebook

tetsunosukeのメモです

復習。というわけでオブジェクト指向の続編

id:hiko_s のところで学習中のオブジェクト指向。ちょうど良いので自分も復習しておく。

なんか「userTale」になっているというのはややスルーして。

containsKeyというメソッドをHashTableに対して使いたいらしいのだが、containsKeyはJavaでいうところのMap、.NETではHashTableなのかもしれないけど、その要素が複数以上ある場合にのみ意味を持つ。

ということは「あるキーが存在するか」を調べるのは「複数のユーザのクラス」に対してであり、さしずめUsersListといったようなクラスを作ってしまった方がいいかもしれない。

そして

User user1 = new User();
user.name = "なまえ1";
user.age = 10;

User user2 = new User();
user.name = "なまえ2";
user.age = 20;

UserList.add(user1);
UserList.add(user2);

的な。

ほいでUserListクラスの中だが(文法はもはや何の言語かわけわかw)

class UserList {
    private Hashtable h = new Hashtable();
    public void add(User u){
        // 本当は既にそのキーの値を持つデータがないことを保証する
        h[u.name] = u;
    }

    public boolean containsKey(String key) {
        return h.containsKey(key);
    }

    public User getUserByKey(String key) {
        return h[key];
    }
}

な感じになるんじゃないでしょうか。

この場合、名前が「なまえ1」のユーザの年齢を取得するには

UserList ulist;
ulist = getAllUser(); // なんかわかんないけどユーザ全体をインスタンスに取る関数があるものとする
if(ulist.containsKey("なまえ1")) {
    // User u = ulist.getUserByKey("なまえ1");
    // Integer age = u.getAge();
    Console.writeln( ulist.getUserByKey("なまえ1").getAge());
}

みたいになる。