ADT にからめて、OOP とは何か?を単純化して分類・整理してみる

  • OOP は ADT のたんなる別の呼び名だよ。(現在主流。本質寄り)
  • OOP とは ADT を「クラス」という言語機能で実現するものだよ。つまり、クラスの特徴である“継承”やそれに付随して使える“多態性”が、 他の方法で ADT(“カプセル化”)を実現したプログラミングや言語との差だよ。(ストラウストラップによる定義)
    • クラスだけだと派生型を安全に実装できないことがあるので、クラスの機能を限定して用いたり(抽象クラス)、新しく「インターフェイス」を使うよ。(現在主流。実装寄り)
    • クラスなど特定の言語機能による実装に限る必要はないよ。OOP とは 手続きをユーザー定義型に属させるスタイルの ADT のことだよ。(一般化。クックを一部改変)
      • 属させるのでは駄目だよ。属させずとも、手続きの総称化でうまく解決できるよ。(CLOS)
  • OOP と ADT は関係ないよ。メッセージングによる動的結合の実践だよ。(ケイによる元々の定義)
    • メッセージングの介在は不要だよ。プロトタイプチェーンをたどって動的アクセスが可能なスロットを自在に脱着できるオブジェクトがあれば十分だよ。(JavaScript など)