OOPには親クラスの機能を子クラスが引き継ぐ、「継承」という概念がある。たとえばJavaでは、継承を次のように記述する。
class Child extends Parent
こう記述することにより、Parentのメソッドも利用することが出来るクラスChildを宣言できる。これが継承である。
継承では、通常、子は親が誰なのかを知ることが出来るが、親は子の存在を知ることはできない。子クラスは、自分の親が誰なのかを調べることができる。しかし、親クラスは、通常、自分が継承されているかどうかを知ることはできない。つまり、OOPの世界では親と子の関係は、子から親への一方通行なのである。切ない話である。
Child --(is-a)--> Parent
UMLにおけるクラス図でも、継承は子から親への矢印で表現する。
しかしRubyでの継承は次のように記述する。
class Child < Parent
矢印の方向がUMLとは逆である。Parentのメソッドを、リダイレクト感覚で、Childに埋め込んでいる感覚なのだろう。
え? オチ? ありません。