継承とは誰かが作ったクラスを受け継ぐことです。技術の伝承です。
コンポジションは誰かが作ったクラスを取り入れるです。合成とか層化とかいいます。
この2つはよくis-aとかhas-aといった区別をします。

簡単に言えば
親クラスのすべてが子クラスに適用できるなら継承、
子クラスが親クラスを包含している場合や親クラスの一部を使いたいときはコンポジションを使うべきです。

この親子関係は大変ややこしいので、次のように子クラスから親クラスを求めることがあります。

ABのコントロール(スタチックとかエディットボックスとか)を簡単に扱うクラスがほしい!
このときこれらコントロールに共通する部分を抜き出します。
すると…
コントロールはすべてウインドウハンドルを持っている
コントロールはすべてキャプションを持っている
コントロールはすべて可視/不可視状態を設定できる
コントロールはすべてリサイズ可能である
…といった共通部分があります。(他にもあります)

これらを親クラスにもたせ、それ以外は子クラスに持たせます。
リストボックスなら特定のアイテムが選択されたとか、チェックボックスなら選択状態とか。

このような子クラスから親クラスを作る方法を汎化(または抽象化)などと言うらしいです。
まあ、N88BASICのころから当たり前のようにやってきたことをクラスとか継承なんてカッコつけてるだけですけどね!

継承とオーバーロード

C++ではオーバーロードは自分の中だけで機能します。
子クラスで親クラスの関数をオーバーロードすることはできません。。。
しかしABではオーバーロードできます。C++厨は気をつけてくださいね。C++使う人がABを使わないか…


#N88BASIC

Class B
Public
Sub x(i As Long)
Print "B::x"
End Sub
End Class

Class D
Inherits B
Public
Sub x(d As Double)
Print "D::x"
End Sub
End Class

Dim d As D

d.x(555)'"D::x"
d.x(12.354)'"B::x"

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2010年06月08日 05:22