それっこその、「反転」
「社会実装を伴う、数学的抽象化の禁忌 3」で、何の説明も無しに、
- 型の事を、「便利なはずの継承が、社会実装を伴うと、禁忌に触れてしまう」のと同じに見える
と書きましたが、
継承が悪い理由は、
- 制御の反転(Wikipedia 日本語版)の、
- 上位モジュールはただ「抽象(インターフェース)」に依存する
- は、
- 「社会実装を伴う、数学的抽象化の禁忌」すなわち、
- 抽象(インターフェース)以外の「データの作りの制約」などについて、消えたのでは無く、隠しただけとし、
- 抽象化して、何かを隠す(「本質的でない細部を削ぎ落す」)場合、
- ダメな、出来ない事を隠すのは禁忌
- なのは確かだが、
- 継承は、(禁忌で有る)制御の反転を言語仕様として極端な形で強制するから、本当の禁忌となる。
と整理出来るのでは無いでしょうか?
制御の反転は禁忌に触れているが、それを徹底した継承はもっと強く禁忌に触れるのです。
これぞ、「発想の反転」に他なりません。
データの意味は”使う側の総意”で、それを隠すな
インターフェースに
- 「良い名前を付け」、
- それのみに依存する
というのは、
- 継承の亜流で有り、
- 継承の悪さを一部緩めただけで、
- やはり悪い
という整理なら、一気通貫に話が通ると思います。
データの意味とは、
- ドメインの知識にも通じ、
- インターフェースでは、それらを代表しない
- 型もダメで、
- 実クラスからしか発しない
し、それゆえ、
- 『上位モジュールはただ「抽象(インターフェース)」に依存する』
というのは、貴公、継承の尻尾に過ぎない、と断じられても、当然だと思います。
結論
これからも「社会実装を伴う、数学的抽象化の禁忌」でプログラミングが嫌いになる人は存在し続けることでしょう。