- 391 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 00:03:38.50 ID:UesQSoYk.net]
- 継承は基底クラスと派生クラスの役割(責務)の分担が非常に難しいです。
よほど上手く設計しないと、すぐに「スパゲッティ・オブジェクト・プログラム」ができあがります。 継承は実装の再利用という面があるので、得てしてコピペの代わりに使われがちでもあります。 既存のあるクラスの振る舞いをちょっとだけ変えたいから継承を使おうってやってしまうと、 派生クラスのソースを見ただけでは何をやってるのか全くわからない最悪のコードになります。 まだコピペのほうがマシなことも。 最初はちゃんとクラス階層の設計がされていたとしても、だんだん皆が使う共通ルーチンを基底クラスに持たせよう、としてしまうとか、 基底クラスは、すぐに、巨大かつ影響範囲が広すぎてイジれない「神クラス」になるでしょう。 この場合の基底クラスの役割は、グローバル変数そのものと言ってよいですね。 とにかく、継承を使うと、コピペ、グローバル変数の使用、といった「禁じ手」と実質的に同じことが簡単にできてしまいかねません。 もし継承を使うのであれば、かなり注意が必要です。 その一方で、継承でないと絶対にダメという用途もあんまりないのです。 継承を一律禁止してしまってもそんなに困らないところがあります。 そのため最近ではGoやRustなど言語の仕様として継承(インタフェースではない実装を持つクラスの継承)を禁止している言語が増えているという有り様です。
|

|