C#の継承について質問します。 できるだけprivateやprotectedにしておかなければ、思わぬ変更をされてしまう。よって、全部publicにしておくのはよくない。

ベストアンサー

0

ThanksImg質問者からのお礼コメント

他のかたも、ご回答ありがとうございました! 選ぶのが遅くなり、申し訳ありません。 理解できるよう、各回答者様の文章を繰り返し読ませていただきます。 ありがとうございました!

お礼日時:6/30 20:20

その他の回答(3件)

0

>>できるだけprivateやprotectedにしておかなければ、思わぬ変更をされてしまう。よって、全部publicにしておくのはよくない。 というのは私も感覚から外れます。 クラス設計をする際は、クラスの使い手にどんなサービスを公開するかが重要で、すべて丸見えだと混乱をきたします。クラス内の関数として作ったのに、勝手に使われてしまうと、変更できなくなります。本来 private 関数は自由に仕様変更できるものですからね。

1

動物で考えない方が良いでしょう。 車の運転の場合、オートマのレバーを、Parking -> Drive と変えるのがpublic method になります。運転手が変更できます。 発進する時は、車の内部で、1速->2速->3速とクラッチ操作しながらギアを変えていきます。この変更は、運転手には見せる必要はないので、private methodとしておきます。 public method を少ない方が運転手からみても、操作しやすくなります。 クラッチ操作などをpublicにして運転手から操作できるようにすると、下手な運転手ではクラッチが、すぐに擦り減るなど問題が出るので、隠しておいた方が無難となります。

1人がナイス!しています

0

オブジェクト指向の根幹にカプセル化という考え方があります。 オブジェクトは一つ一つがカプセルに包まれていて、その中身には直接触れられない。 全く触れられないのでは困るので、必要最低限な例外に限り、外部との接続箇所を用意しておく。 そんな感じです。 なぜ、そんな事が必要なのか? 大きなシステムを作る程に重要になるのですが、システムが複雑になればなるほど、 各オブジェクト間のつながりは密接になり、複雑になってゆきます。 一度そうなってしまうと、何か一つのオブジェクトに問題が起きて、 それを修正した時に、その部分に接続していた他のオブジェクトにも修正が必要になったりします。 それを直したら、今度はさらにそこに繋がっているオブジェクトが…… と、連鎖的に修正の必要なオブジェクトが現れて、収集がつかなくなります。 そういうことを防ぐ為に、各オブジェクト間の繋がりは最低限に抑え、 さらに、もし仮にオブジェクトの中身を大幅にイジるようなことがあったとしても、 この外部に繋がっている部分の仕様は絶対に変えないようにします。 そうしておけば、オブジェクトの中身をどれだけ変更しても、それこそ、そっくりそのまま、全くの別のものに入れ替えてしまっても、 外部とのやり取り部分さえ同じであれば、それはそのまま、他に影響を与える事はありません。 そういう事ができるのは、内部の仕組みそのものと、外部とのやり取り部分とが しっかり切り離されていることが重要です。 一度publicで公開したメソッドは、どこかで誰かが使っている可能性があります。 もし、そのメソッドの使用を変えた場合、その何処かで問題が起きる可能性があります。 その可能性を完全に比定する為の指定が、private等です。 privateなメソッドは、内部専用ですので、自分でどう書き換えるのも自由です。 極端な話、自分が使わなければ、消してしまっても構いません。 publicなメソッドはそうはいきません。もし使わなくなっても、誰が使ったときに問題が起きないように答えられるように作らなくてはいけません。 publicがふえればふえるほど、しがらみが増えて面倒くさいことになるのです。

過去の、誰かが作ったプログラミングコードを読めば、publicとprivateが共用されていますが、publicで書かれているところは、多少ぐちゃぐちゃにしてしまってもよいということですか? Privateのところには、触りません。