オブジェクトの体感用に計算機オブジェクトを作りました。
ウインドウズ上で手軽に扱えるように、VBSで書いていますが、Java版、PHP版、Ruby版で作ったコードもあります。
"計算機オブジェクト操作_加減算限定.vbs"
' オブジェクト指向プログラミングモデル 計算機クラス
Option Explicit
Class keisanki_class
Private namae,kotae
' 計算機クラスの実体時動作
Private Sub Class_Initialize
namae=""
kotae=0
End Sub
' 計算機クラスの解放時動作
Private Sub Class_Terminate
MsgBox "計算機オブジェクト " & namae & " 解放",vbOKOnly+vbInformation,"計算機オブジェクト インスタンス " & namae
End Sub
' 計算機クラスの名称指定
Public Sub set_namae(meisyou)
namae = meisyou
End Sub
' 計算機クラスの名称獲得
Public Function get_namae()
get_namae = namae
End Function
' ゼロにする
Public Sub zeronisuru()
kotae = 0
End Sub
' 足す
Public Sub tasu(kazu)
kotae = kotae + kazu
End Sub
' 引く
Public Sub hiku(kazu)
kotae = kotae - kazu
End Sub
' 答える
Public Sub kotaeru()
MsgBox "計算機 " & namae & " の答えは " & kotae & " です",vbOKOnly+vbInformation,"計算機 " & namae & " の値"
End Sub
End Class
' ---------------------------------
' | 計算機オブジェクトを操る |
' ---------------------------------
Dim kazu
Dim dentaku1
Set dentaku1 = new keisanki_class
dentaku1.set_namae("電卓くん")
dentaku1.tasu(5)
dentaku1.kotaeru()
dentaku1.hiku(2)
dentaku1.kotaeru()
dentaku1.zeronisuru()
dentaku1.kotaeru()
Set dentaku1 = nothing
これを継承したクラスに乗除算メソッドを追加して、継承の考え方を示すVBSコードです。
VBSでのメソッドの継承は凡長なのが特徴で、先にこれをお手本に考えてしまうと、
JavaやRubyの継承を学ぶときに混乱するかも知れません。
"継承させた計算機オブジェクト操作_乗除算機能追加.vbs"
' オブジェクト指向プログラミングモデル 計算機クラス
Option Explicit
' 計算機オブジェクト1
Class keisanki_class
Private namae,kotae
' 計算機クラスの実体時動作
Private Sub Class_Initialize
namae=""
kotae=0
End Sub
' 計算機クラスの解放時動作
Private Sub Class_Terminate
MsgBox "計算機オブジェクト " & namae & " 解放",vbOKOnly+vbInformation,"計算機オブジェクト インスタンス " & namae
End Sub
' 計算機クラスの名称指定
Public Sub set_namae(meisyou)
namae = meisyou
End Sub
' 計算機クラスの名称獲得
Public Function get_namae()
get_namae = namae
End Function
' ゼロにする
Public Sub zeronisuru()
kotae = 0
End Sub
' 足す
Public Sub tasu(kazu)
kotae = kotae + kazu
End Sub
' 引く
Public Sub hiku(kazu)
kotae = kotae - kazu
End Sub
' 答の値を応答する
Public function kai()
kai = kotae
End function
' 答える
Public Sub kotaeru()
MsgBox "計算機 " & namae & " の答えは " & kotae & " です",vbOKOnly+vbInformation,"計算機 " & namae & " の値"
End Sub
End Class
' - - - - - - - - - - - - - - - -
' 計算機オブジェクト2
Class keisanki_class2
Private kmoto,namae,kotae
' 計算機クラスの実体時動作
Private Sub Class_Initialize
Set kmoto = new keisanki_class
kmoto.set_namae("")
kmoto.zeronisuru()
End Sub
' 計算機クラスの解放時動作
Private Sub Class_Terminate
MsgBox "計算機オブジェクト " & namae & " 解放",vbOKOnly+vbInformation,"計算機オブジェクト インスタンス " & namae
End Sub
' 計算機クラスの名称指定
Public Sub set_namae(meisyou)
kmoto.set_namae(meisyou)
End Sub
' 計算機クラスの名称獲得
Public Function get_namae()
kmoto.get_namae()
End Function
' ゼロにする
Public Sub zeronisuru()
kmoto.zeronisuru()
End Sub
' 足す
Public Sub tasu(kazu)
kmoto.tasu(kazu)
End Sub
' 引く
Public Sub hiku(kazu)
kmonto.hiku(kazu)
End Sub
' 掛ける
Public Sub kakeru(kazu)
kotae = kmoto.kai() * kazu
kmoto.zeronisuru()
kmoto.tasu(kotae)
End Sub
' 割る
Public Sub waru(kazu)
kotae = kmoto.kai() / kazu
kmoto.zeronisuru()
kmoto.tasu(kotae)
End Sub
' 答える
Public Sub kotaeru()
MsgBox "継承 計算機 " & kmoto.get_namae() & " の答えは " & kmoto.kai() & " です",vbOKOnly+vbInformation,"継承 計算機 " & kmoto.get_namae() & " の値"
End Sub
End Class
' ---------------------------------
' | 計算機オブジェクトを操る |
' ---------------------------------
Dim kazu
Dim dentaku1,dentaku2
Set dentaku1 = new keisanki_class
dentaku1.set_namae("コンピュータ1")
dentaku1.tasu(5)
dentaku1.kotaeru()
Set dentaku2 = new keisanki_class2
dentaku2.set_namae("継承コンピュータ")
dentaku2.tasu(12)
dentaku2.waru(4)
dentaku2.kotaeru()
Set dentaku1 = nothing
まあ、実用性というよりはコンピュータ教室での実習でオブジェクト指向プログラミングの本質を体験させるために開発した教材です。
ウインドウオブジェクトの操作も書いていますが、この計算機オブジェクトは簡単なので、実際のプログラミングの授業でもインスタンス化やコンストラクタ(イニシャライザ)の振る舞いなどが分かりやすいという感想が出ていました。