今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

カプセル化・情報隠蔽・データ抽象化

あちこちのサイトを見てると、間違った解釈をしてるのが多い。カプセル化なんて、情報隠蔽まで含んでるのが常識になりつつあるような。。。ここまで一般化してると情報隠蔽してるのがカプセル化というのが常識なのかも。
とりあえず、本来の意味を書いておく。アクセス修飾子は意図的に最小限だけつけてある。

カプセル化

関連の深いデータとメソッドを1箇所にまとめること。

class Person {
    String firstname;
    String familyname;
    Date birthday;
    String askNickname() {
        ..
    }
    int getAge() {
        ..
    }
}

情報隠蔽

データに対する外部からの直接アクセスを遮断すること。

class Person {
    private String firstname;
    private String familyname;
    private Date birthday;
    String askNickname() {
        ..
    }
    int getAge() {
        ..
    }
}

データ抽象化

データに対するアクセスをメソッドを経由してのみできるようにすること。

class Person {
    private String firstname;
    private String familyname;
    private Date birthday;
    public String getName() {
        return familyname + " " + firstname;
    }
    pubic Date getBirthday() {
        return (Date)birthday.clone(); // 変更防止のためそのものを返さない
    }
    String askNickname() {
        ..
    }
    int getAge() {
        ..
    }
}