😈

継承は悪か?

2023/03/30に公開

継承のデメリット

1. 結合度が高くなる

継承をすると派生クラスは基底クラスと、結合度が非常に高くなる。
それにより基底クラスを変更するとその影響が派生クラスに波及し、派生クラスのモジュールを壊す可能性がある。

2. 柔軟性と拡張性の低下

基底クラスと派生クラスの責務分担が非常に難しい。
上手く設計しないと、すぐに「スパゲッティプログラム」が生まれてしまう。

皆が使う共通処理を基底クラスに書くと、基底クラスは、巨大且つ影響範囲が広い「神クラス」になってしまう。
もはや、グローバル変数のクラスバージョンみたいな感じ。
神クラスが一旦できると、変更できなくなり柔軟性の喪失に繋がってしまう。

3. 可読性の低下

基底クラスを読まないと派生クラスの内容がいまいち理解できない。
いちいちソースが別れているので可読性が低下。

4. いらないメソッドも派生クラスで使えてしまう

基底クラスでは必要なメソッドも、派生クラスでは必要ないというケースの発生。
親クラスは親クラスの事情でどんどんメソッドは今後増えていきます。
その度に子クラスはその親クラスの必要ないメソッドが自動で追加されていく...

継承が好ましくない場合何を使えば?

  • 共通の振る舞いはinterfaceで強要
  • 共通のアルゴリズムは専用クラスを作成し委譲

などなど。

まとめ

「継承は悪か?」の答えは、
「悪にもなりうるので継承のご利用は計画的に」

参照

https://jp.quora.com/オブジェクト指向の問題点の一つとして継承が挙げ

https://www.infoworld.com/article/2073649/why-extends-is-evil.html

Discussion