□投稿者/ Azulean (1153回)-(2020/05/24(Sun) 17:52:51)
|
■No94843 (c#初心者 さん) に返信 > はじめまして。 > 基本的な質問なのですが、privateなメソッドがあるクラスは、 > 継承に不向きでしょうか?
「private があるから継承に不向き」は違うと思います。 乱暴に書いてしまうと、virtual メソッドが 1 つもないなど、ポリモーフィズムを意識していないクラスであれば、継承する意味はないと言えます。
> 案1:流用するクラスをコピーして新機能メソッドを加えた新たなクラスを作成する > →流用クラスと新クラスで同じ事をするメソッドが重複するのでスマートな方法ではない?
できれば、再利用したいメソッドを抜き出したクラスを作り出すなど、リファクタリングをしたいところですね。 コピー(重複)は、同じ不具合を増やす、仕様変更の追随漏れを増やすなど、技術的負債を増やす要因になります。
検証工数が取れない、少しでもリスクを取りたくないなら、コピーすることになるかもしれませんが、 そのときは、今後のために、「まるっとコピーする」ではなく、「コピーしたコードを再利用しやすいようにリファクタし、今後のクラスではこれを使っていく…と考えたいですね。
> 案2:流用するクラスを継承して新機能メソッドを加えた新たなクラスを作成する > →流用クラスはprivateなメソッドがあるため、属性を変えないと継承できない > →流用クラスに変更が入るので設計的に良くない?
設計的に良いかどうかを議論するなら、「継承する理由」を落ち着いて考えてみましょう。 「private にしているメソッドを protected にして実装を使い回したいだけ」が理由なら継承はやめるべきです。
実装の共有のための継承は、継承を重ねていくごとに、基底クラスの変更がとても厳しくなります。 保守コストを増やすことにつながるので、クラスの分割を考え、継承は避けましょう。
|
|