C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 継承使用有無


(過去ログ 164 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■94843 / inTopicNo.1)  継承使用有無
  
□投稿者/ c#初心者 (2回)-(2020/05/24(Sun) 13:18:50)

分類:[.NET 全般] 

はじめまして。
基本的な質問なのですが、privateなメソッドがあるクラスは、
継承に不向きでしょうか?
あるプロジェクトで新機能を追加するために以下の方法で迷っています。

案1:流用するクラスをコピーして新機能メソッドを加えた新たなクラスを作成する
→流用クラスと新クラスで同じ事をするメソッドが重複するのでスマートな方法ではない?

案2:流用するクラスを継承して新機能メソッドを加えた新たなクラスを作成する
→流用クラスはprivateなメソッドがあるため、属性を変えないと継承できない
→流用クラスに変更が入るので設計的に良くない?
引用返信 編集キー/
■94844 / inTopicNo.2)  Re[1]: 継承使用有無
□投稿者/ Azulean (1153回)-(2020/05/24(Sun) 17:52:51)
No94843 (c#初心者 さん) に返信
> はじめまして。
> 基本的な質問なのですが、privateなメソッドがあるクラスは、
> 継承に不向きでしょうか?

「private があるから継承に不向き」は違うと思います。
乱暴に書いてしまうと、virtual メソッドが 1 つもないなど、ポリモーフィズムを意識していないクラスであれば、継承する意味はないと言えます。


> 案1:流用するクラスをコピーして新機能メソッドを加えた新たなクラスを作成する
> →流用クラスと新クラスで同じ事をするメソッドが重複するのでスマートな方法ではない?

できれば、再利用したいメソッドを抜き出したクラスを作り出すなど、リファクタリングをしたいところですね。
コピー(重複)は、同じ不具合を増やす、仕様変更の追随漏れを増やすなど、技術的負債を増やす要因になります。

検証工数が取れない、少しでもリスクを取りたくないなら、コピーすることになるかもしれませんが、
そのときは、今後のために、「まるっとコピーする」ではなく、「コピーしたコードを再利用しやすいようにリファクタし、今後のクラスではこれを使っていく…と考えたいですね。



> 案2:流用するクラスを継承して新機能メソッドを加えた新たなクラスを作成する
> →流用クラスはprivateなメソッドがあるため、属性を変えないと継承できない
> →流用クラスに変更が入るので設計的に良くない?

設計的に良いかどうかを議論するなら、「継承する理由」を落ち着いて考えてみましょう。
「private にしているメソッドを protected にして実装を使い回したいだけ」が理由なら継承はやめるべきです。

実装の共有のための継承は、継承を重ねていくごとに、基底クラスの変更がとても厳しくなります。
保守コストを増やすことにつながるので、クラスの分割を考え、継承は避けましょう。
引用返信 編集キー/
■94845 / inTopicNo.3)  Re[2]: 継承使用有無
□投稿者/ c#初心者 (4回)-(2020/05/24(Sun) 18:46:46)
No94844 (Azulean さん) に返信
回答ありがとうございます。
参考になりました。
一応継承については勉強しましたが、いざ仕事で
使用するとなると使いどころの判断が難しく
質問させてもらいました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -