LoginSignup
0
0

More than 5 years have passed since last update.

VBSで作ったオブジェクト指向プログラミング体感用の簡易計算機オブジェクトの紹介

Last updated at Posted at 2016-11-01
1 / 5

オブジェクトの体感用に計算機オブジェクトを作りました。
ウインドウズ上で手軽に扱えるように、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


まあ、実用性というよりはコンピュータ教室での実習でオブジェクト指向プログラミングの本質を体験させるために開発した教材です。
ウインドウオブジェクトの操作も書いていますが、この計算機オブジェクトは簡単なので、実際のプログラミングの授業でもインスタンス化やコンストラクタ(イニシャライザ)の振る舞いなどが分かりやすいという感想が出ていました。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0