プロパティへのアクセス

 システムの大まかなプロトタイプをつくり、先輩に見てもらった。

クラスを作り、それらのプロパティを外部からアクセスする箇所で質問が。 [vbnet]Public Class AAAAAA Private foo As Integer Private baa As Integer Public Property pFoo() As Integer Get pFoo = foo End Get Set(ByVal Value As Integer) foo = Value End Set End Property

    Public Property pbaa() As Integer
        Get
            pbaa = baa
        End Get
        Set(ByVal Value As Integer)
            baa = Value
        End Set
    End Property

End Class[/vbnet] Javaにはプロパティは無いが、似たようなことをするなら [java]public class AAAA { private int foo; private int baa;

public int getBaa() {
    return baa;
}
public void setBaa(int baa) {
    this.baa = baa;
}

public int getFoo() {
    return foo;
}
public void setFoo(int foo) {
    this.foo = foo;
}

}[/java] と書く。

先輩から「変数 foo, baa自体をpublicにして外部からアクセスすればよいのに、何でGetterやSetterを書くのか?」と質問されたが、答えることが出来なかった。ので、調べてみた。

メンバ変数をクラス外部から直接アクセス出来ないようにして、状態の変更はすべてメソッドを通して行うというやり方は、 カプセル化 という概念です。利点として、

  • アクセス方法を制限する事により、オブジェクトがより独立したものとなる
  • セットした値の妥当な値かをオブジェクト内でチェックしたり、変更したりできるので、望まない値が変数に格納されない
  • そういう「作法」を作っておくと、大規模開発でもみんなが同じ作法でコードを書く事ができる
  • 上手くまとめられない…。プロパティのアクセスというより、オブジェクト指向でシステムを作るという事の利点を勉強しなおさないといけないような気がしてきました。

    以下は参考にしたサイト

  • @IT / Insider.NET / オブジェクト指向プログラミング超入門
  • CavalierLab / クラスモジュール講座 / プロパティ
  • ++C++;// Unindentified Flying C++ / C# で学ぶオブジェクト指向 / プロパティ
  • Visual Basicプログラマのためのオブジェクト指向プログラミング入門 - .NETの前に押さえておきたいVisual Basic的オブジェクト指向について