VBオブジェクト指向プログラミング講座 第16回 継承の背景を知ろう
継承を使いこなすには、継承が生まれた背景や目的を知らねばなりません。継承はそもそも何をするものなのでしょうか?それは、前回に述べたように、「同じことを何度も書かない」を実現するためのものです。しかしながら、実現はかなり難しいです。何故ならば、機械を相手に察しろというのは土台無理な話だからです。
機械はバイナリ(0と1)を解釈しながら動いています。ですから、Methodという名前のメソッドが何度も定義されていてもわかりません。機械よりも上位層であるVBコンパイラのレベルで考えても、ただの文字の羅列にすぎません。それを同じだと伝える方法のうちの1つが継承です。
継承について知る前に、継承の対象であるメソッドとは何かを知らねばなりません。メソッドを一言でいうと、データを暗黙で渡す手続きもしくは関数です。サンプルを見ればよくわかると思います。
Class Foo
Public Property Name As String
Public Sub Print()
Console.WriteLine(Me.Name)
End Sub
End Class
Module MethodSample
'FooのPrintメソッドと同様の手続き
Public Sub Print(ByVal obj As Foo)
Console.WriteLine(obj.Name)
End Sub
Sub Main()
Dim obj As New Foo
obj.Name = "ピヨ"
'どちらも結果は同じ
Print(obj)
obj.Print()
End Sub
End Module
Meキーワードの部分に注目してください。これが暗黙的に渡されているデータです。これで、先ほど言ったことが実感できたと思います。手続き・関数・データを、メソッドという一つの概念にまとめました。これで人が管理をしやすくなりました。次にするべきことは、定義したメソッドの再利用です。
Class Foo
Public Property Name As String
Public Sub Print()
Console.WriteLine(Me.Name)
End Sub
End Class
'同じメソッドを使う
Class FooFoo
Inherits Foo
'他のメソッドも定義している・・・
End Class
Module MethodSample
'FooのPrintメソッドと同様の手続き
Public Sub Print(ByVal obj As Foo)
Console.WriteLine(obj.Name)
End Sub
'FooFooのPrintメソッドと同様の手続き
Public Sub Print(ByVal obj As FooFoo)
Console.WriteLine(obj.Name)
End Sub
Sub Main()
Dim obj As New FooFoo
obj.Name = "ピヨ"
'どちらも結果は同じ
Print(obj)
obj.Print()
End Sub
End Module
このサンプルが示したように、継承という概念を定めておくとメソッドの再利用ができます。ちなみに、モジュール内のFooFoo用の手続きは定義する必要がありません。しかしながら、これが動くのもVBがオブジェクト指向プログラミング言語であるからであって、非オブジェクト指向言語では、名前を変えて改めて定義する必要があるのであえて示しています。今回の記事を読んで、「なんだ継承って簡単じゃないか」と思われた方もいるかと思います。しかし、ここからが恐怖の始まりです。お楽しみに。