多態と総称

しかし、多態(または総称)まわりは面倒くさくって、「胡散臭い」以上のことをいうときっと嘘になります。ここら辺はジェネレーティブプログラミングの表がわかりやすいかな、と思うので引用しちゃいます

表6-1 不変的な多態の分類

文献に見る名称 閉じている/いない (明示的に指定されるか否かにかかわらず、パラメータから要求されるインターフェイス 型パラメータのバインディングモード 利用できる言語
閉じていない多態 閉じていない 動的 Smalltalk
パラメータによる閉じていない多態(制約されない総称性) 閉じていない 静的 C++
サブタイプによる多態 閉じている 動的 C++Java、 Eiffel
パラメータによる閉じた多態(制約された総称性) 閉じている 静的 Eiffel、 Ada


ジェネレーティブプログラミング (IT Architects’Archive CLASSIC MODER)

ジェネレーティブプログラミング (IT Architects’Archive CLASSIC MODER)

  • 作者: クシシュトフ・チャルネッキ,ウールリシュ・W・アイセンアッカ,津田義史,今関剛,朝比奈勲
  • 出版社/メーカー: 翔泳社
  • 発売日: 2008/04/23
  • メディア: 大型本
  • 購入: 7人 クリック: 399回
  • この商品を含むブログ (45件) を見る

* * *


余談ですが、ジェネレーティブプログラミングと言えば、わたしにとって印象深いのが、昔わたしが「ダックタイピングは何処に当てはまるの??」と酷く混乱した 多態性の分類

                         / パラメータによるもの
             普遍性    /   (Parametoric)
          /(Universal)\
        /               \ 包含によるもの
 多態性                     (Inclusions)
(Polymophism)
         \               / 多重定義によるもの
           \ 一時的    /   (Overloading)
             (Ad Hoc)   \
                          \ 型の上位変換によるもの
                             (Coercion)

について、非常にわかりやすくザックリ切っていた説明。

Smalltalkのように、動的に型づけを行う言語ではこの状況は大きく異なります([Eis99])。動的に型づけを行う言語は静的な型づけという能力を持たないため、パラメータによる多態というのは意味をなしませんJavaC++ に見られるような継承による多態もできません

(強調はわたし)

に、無理矢理この分類に SmalltalkRuby のようなダックタイピングの落としどころを探していたわたしは、「あ、意味ないんだぁ」と、とてもスッキリしたのを覚えています。

この本にとって 総称や多態はサブトピックにすぎないのですが、これらについてとてもハキハキとしたわかりやすい解説が得られます。本書はテンプレートメタプログラミングアスペクト指向プログラミングなど、ここらへんの境界が隣接するプログラミングにおける概念を包括的に扱っていて、こういうのは個別にアタックするより纏めてドーン!の方がわかりやすいのだなぁ、と思いました。個別の概念についても用語が混乱していれば混乱していることを明記し、それの解消に努めている本で、なんというか、これはプログラマだったら必読の書だなぁ、とわたしは思っちゃうのです。