VBオブジェクト指向プログラミング講座 第7回 プロパティとメソッドの違いを知る
VBの記事らしく、サンプルプログラムを提示した後で解説します。
Imports System
Imports System.Windows
Imports System.Windows.Controls
Public Class MessageWindow
Inherits Window
'インスタンスを識別するための定義
Private Shared ID As Integer
'Windowのサイズを指定するための定義
Private Shared random As Random =
New Random(DateTime.Now.Ticks Mod Integer.MaxValue)
'使用するメッセージ
Private m_message As String
Private Function CheckMessage(ByVal value As String) As Boolean
If value Is Nothing OrElse value.Length = 0 Then
Return False
Else
Return True
End If
End Function
Public Property Message() As String
Get
Return Me.m_message
End Get
Set(value As String)
If Me.CheckMessage(value) = False Then
Throw New ArgumentException(
"1文字以上の文字列を指定して下さい。")
End If
Me.m_message = value
End Set
End Property
'各種コントロール
Dim input As TextBlock
Dim text As TextBox
'メッセージを指定してインスタンスを生成する
Public Sub New(Optional ByVal msg As String = "Hello World")
'Windowの設定
Me.Height = random.Next(100, 1000)
Me.Width = random.Next(100, 1000)
Me.Message = msg
'ボタン上のコントロール
Me.input = New TextBlock()
Text = New TextBox()
Dim panel As New StackPanel()
Dim createBtn As New Button()
createBtn.Content = "作成"
Dim endBtn As New Button()
endBtn.Content = "終了"
AddHandler endBtn.Click,
Sub() Application.Current.Shutdown()
panel.Children.Add(input)
panel.Children.Add(text)
panel.Children.Add(createBtn)
panel.Children.Add(endBtn)
'ボタン
Dim btn = New Button()
btn.Content = panel
Me.Content = btn
AddHandler btn.Click, Sub() Me.CreateWindow()
'その他の処理
Me.SetMessages()
MessageWindow.ID += 1
End Sub
'新しいウインドウを作成する
Private Sub CreateWindow()
If Me.CheckMessage(Me.text.Text) = False Then
Call New MessageWindow().Show()
Else
Call New MessageWindow(Me.text.Text).Show()
End If
End Sub
'指定されたメッセージを各種要素に反映する
Private Sub SetMessages()
Dim str As String =
Me.Message & "(ID:" &
MessageWindow.ID.ToString() & ")"
Me.Title = str
input.Text = str
End Sub
End Class
このサンプルは、自由にメッセージを指定して、ウインドウを作成できるプログラムです。Windowにプロパティを設定している点に注目して下さい。プロパティは一見すると関数と手続きです。しかし、それはあくまでも実装上の都合です。プロパティは、オブジェクト指向プログラミングの属性を表しています。属性を簡単に言うとデータの事です。オブジェクトは、インスタンスごとにデータを持つ事があります。それらのデータを表すのが属性であり、プロパティであります。つまりプロパティとメソッドの違いは、データを表すものか、操作を表すものかの違いなのです。
プロパティとメソッドの違いは大きいです。WPFの様にプロパティを多用するスタイルを採用すると、マークアップ言語の様な宣言型プログラミングになります。例えば、WPFがプロパティを重視しているのは、XAMLとの連携および、宣言型プログラミングにするためです。宣言型プログラミングのサポートはWPFの設計方針であり、プロパティを多用する設計にしています。
プロパティを使用するのか、メソッドを使用するのかは設計の問題です。しかも、それは大きな違いです。プロパティを多用するスタイルを採用すると、理解しやすい宣言型プログラミングへと進みます。WPFの様な美しい設計にしたいと誰しも思うでしょう。しかし、何事も一長一短があります。プロパティはロックの対象となりがちなので、並列プログラミングでは頭痛の種です。一方メソッドを多用するスタイルは、並列プログラミングで必要とされています。どちらを採るのかよく考えて設計しましょう。
プログラミング=文法だと考えている人もいます。しかし実際のところは、文法は概念を表すものであり、概念を知らずとして文法だけを見ていても、プログラミングの腕は上達しません。概念をしっかりマスターしましょう。続く。