VBオブジェクト指向プログラミング講座 第8回 アクセス修飾子を上手く使って情報を隠蔽しよう
オブジェクト指向プログラミングの概念に情報の隠蔽というものがあります。これは、オブジェクトを使用する人は、実装の詳細を知らなくても使用できる事を意味しています。情報の隠蔽の概念はいたるところにあります。TVや電話だって自分で作れないよね?もし情報の隠蔽がなければ、TVや電話を作る知識が無いと使用できない事になります。オブジェクトも同じです。下手なオブジェクトをプログラミングすると、他のプログラマーや未来の自分が困ってしまいます。情報の隠蔽が有用な概念であると分かって頂けると思います。
しかし、情報の隠蔽を守るプログラミングは、知らなくても出来るというものではありません。正しい知識が無いと、情報の隠蔽がなされていないオブジェクトを実装してしまいます。具体例を挙げます。前回のサンプルは、Messageプロパティを誰からも書きかえられる状態でした。これは情報の隠蔽に反しています。特に理由がない限り、プロパティの値を自由に書き換えられる状態は好ましくありません。何故ならば、プログラム間の結合度が高まってしまうからです。プロパティは極力リードオンリーにしましょう。
しかし、プロパティのセッターには、チェックロジックを含められるので、非常に便利です。値は誰から読まれてもいい、だけど書き換えられるのはごめんだと言う場合は、アクセス修飾子を上手く使います。
Public Property Message() As String
Get
Return Me.m_message
End Get
'セッターにアクセス修飾子を指定
Private Set(value As String)
If Me.CheckMessage(value) = False Then
Throw New ArgumentException(
"1文字以上の文字列を指定して下さい。")
End If
Me.m_message = value
End Set
End Property
以上の様にアクセス修飾子を自由自在に使いこなしましょう。ところで、Messageプロパティは必要とされているのでしょうか?一層の事、Messageプロパティを公開しないほうが得策かもしれません。こうした疑問を持つ事が重要です。オブジェクト指向プログラミングの概念に情報の隠蔽がある事からも分かりますが、基本的に公開する要素は最小限にするのが最善です。どうしても必要な要素(プロパティやメソッドなど)だけ公開しましょう。こういった事があるので、オブジェクト指向設計をしっかりしないと駄目なのです。オブジェクト指向プログラミングは、オブジェクト指向設計をしないと真価を発揮しません。続く。