C#, C♯, C#相談室 Part98 (518レス)
1-

210: (ワッチョイ 47d7-InQL) 2024/12/12(木)13:06 ID:ZQ0BgCqv0(3/4) AAS
鳥以外にも飛ぶ(正確には滑空だが滞空することに変わりはない)動物は居るし
鳥だって地面をRunするヤツは居る
鳥にも、猿程でなくてもその辺に落ちてる物を道具的に使うヤツも居る

お前の例題がそもそもめちゃくちゃなんだよ
211: (ワッチョイ 47d7-InQL) 2024/12/12(木)13:06 ID:ZQ0BgCqv0(4/4) AAS
あといい加減余所でやれ
C#直接関係ない
212: (ワッチョイ 4793-Ahcx) 2024/12/12(木)17:51 ID:pRQ+cocj0(1) AAS
ここの住人はC#を使っていてSOLID原則に悩まされたことなど無いのだろうか
213: (ガックシ 06eb-7Ydj) 2024/12/12(木)18:08 ID:A8Z2cdQL6(1) AAS
>>203
ある動物が飛べることと、鳥であることは独立なんだから、
「飛べる鳥がいる」という情報はなくても仕方なくない?
統計的な相関関係はあるかもしれないが、包含関係でないなら仕方ない。
飛べる他の動物を無視するのなら、IBirdを継承したインタフェースでIFlyableBirdを作ればいいのでは?
214
(1): (ワッチョイ 474b-Ahcx) 2024/12/12(木)18:40 ID:m/Fq7DtI0(3/4) AAS
ISP自体はC#でよく出てくる問題じゃないの?
これなんかまさにそう
外部リンク:dev.to

だけどこういった解説はISP単体の説明になっていて、泳ぐ、走るといった能力の異なるものを Animal として抽象化する方法を教えてくれない
綺麗な方法でなくても「C#ではこうすることが多い」のようなプラクティスがあれば知りたかったんだけど、そういうのは無さそうなんですかね
215: (ワッチョイ bf79-/9Tr) 2024/12/12(木)19:18 ID:j5Bpxje00(1/2) AAS
実装を伴わない抽象化の話ってなんの身にもならないからやめなさい
それとインターネットサービスプロバイダの話は他所でやってくれ
216: (ワッチョイ 7f10-InQL) 2024/12/12(木)19:18 ID:F/GYmEjD0(1/2) AAS
求めてそうなプラクティスは見た事ないなぁ
個人的には、飛ぶにしても走るにしても動物という存在の態様のひとつだから
動物IFのプロパティに含めるでいいんじゃないかと思うけどね
217
(1): (ワッチョイ 7f95-AGOF) 2024/12/12(木)19:36 ID:uARXvv9l0(1) AAS
var unko = new Unko()

より

Unko unko = new()

の方が良くね?
218: (ワッチョイ bf79-/9Tr) 2024/12/12(木)19:46 ID:j5Bpxje00(2/2) AAS
もっと地球規模の視野で考えろよ
うんこも地球の一部だろ?つまりうんこは地球とも言える
わかるか?
219: (ワッチョイ 7f10-InQL) 2024/12/12(木)19:55 ID:F/GYmEjD0(2/2) AAS
>>217
まぁ、後者ができるようになったの後になってからだから
220
(1): (ワッチョイ bf01-aPXN) 2024/12/12(木)22:38 ID:VQmaeBIU0(1) AAS
>>214
それISP単体の説明にもなってない
class Penguin : IAnimalにNotImplementedExceptionでFly()を実装すれば即ISP違反だというのは間違い
まずは原典にあたってISPを理解してきたほうがいい
謳われてる原則をどう活用するかはその後
221: (ワッチョイ df2b-2fXw) 2024/12/12(木)22:49 ID:cbjQHW3y0(2/3) AAS
そもそも
そんな鳥のプログラムなんか一般的じゃねーし
222: (ワッチョイ 474b-Ahcx) 2024/12/12(木)22:59 ID:m/Fq7DtI0(4/4) AAS
>>220
「クライアントが『泳ぐ、飛ぶ、もしくは走る動物』として使うことを想定するのなら、そのインターフェースであるIAnimalにその情報を含めるのは適切」ということですかね
class Penguin としては Fly や Run などのメソッドの実装はノイズに思えるけど、IAnimalとして使われるなら、その契約に従えという感じかな
(それだと後から「道具を使う」がIAnimalに追加された際に Penguine もメソッド追加が必要で、そこがモヤモヤしてる)

こういう場合にアダプタ (ラッパー?) を使うのって適切?
純粋に Penguine としての機能を提供するクラスと、それを IAnimal として使うためのアダプタみたいなの
それだと更に複雑さを増すだけ?

OOP難しい……
223: (ワッチョイ df2b-2fXw) 2024/12/12(木)23:02 ID:cbjQHW3y0(3/3) AAS
適切とか
とりあえず作ればよくね?

適切かどうかなんてエグゼにしたら関係なくね?

それとも論点だけ考えて実際のプログラム作らないの?

それ何したいの
224: (ワッチョイ df6a-B4jd) 2024/12/12(木)23:31 ID:RbZTiiBk0(1) AAS
例が不適切だから混乱してるだけにしか見えないなぁ
225: (ワッチョイ ff70-Ahcx) 2024/12/12(木)23:50 ID:cAk5An+50(1) AAS
SOLIDが現実のコードで使われなかったり、「オブジェクト指向は問題を複雑にするだけ」みたいなことを言われる原因
226: (ワッチョイ 6714-oAsD) 2024/12/13(金)01:16 ID:sFncMVeV0(1) AAS
>>203
インターフェース分離の原則は「クラスが必要としないメソッドを実装しない」ってだけ
ペンギンのような飛べない鳥が IFlyable を実装しないのは正しい
あとは「飛べる鳥」をインターフェースで分かるようにしてやればいい
isを使う羽目になったのは飛べるかどうかわからない IBirdをListにしてるから
---
interface IBird { string Name { get; } }
interface IFlyable : IBird { void Fly(); }
// ペンギンは飛べない
class Penguin : IBird {
public string Name => "Penguin";
}
// ワシは飛べる
class Eagle : IFlyable {
public string Name => "Eagle";
public void Fly() => Console.WriteLine($"{Name} is flying!");
}
// 飛べる鳥だけを扱うリストを作る
List<IFlyable> flyableBirds = new List<IFlyable> { new Eagle() };
foreach (var bird in flyableBirds) {
bird.Fly(); // 明示的に飛べる鳥しか扱わない
}
227: (ワッチョイ e701-5/pq) 2024/12/13(金)01:54 ID:aJRVKPMX0(1) AAS
こいつら病気なんか
228: (ワッチョイ df2b-2fXw) 2024/12/13(金)01:55 ID:0Vp4NoOf0(1) AAS
だね
229: (ワッチョイ 7f10-InQL) 2024/12/13(金)06:18 ID:ooVm180t0(1) AAS
SOLIDにしても所詮理想論であって現場に即してるわけじゃないしなぁ
230: (ブーイモ MMff-RQnm) 2024/12/13(金)07:39 ID:WeveN3pQM(1) AAS
せやな
231: (ワッチョイ 27a0-tB0+) 2024/12/13(金)17:30 ID:LAtQrsJV0(1) AAS
サイコパスの脳の違いを発見。一般の人に比べ線条体が大きいことが判明
karapaia.com/archives/52313287.html
232: (スププ Sdff-AHQg) 2024/12/13(金)20:28 ID:DLDRNjlrd(1) AAS
関数型がいいんだね!
233: (ワッチョイ 7f6e-VwYf) 2024/12/14(土)09:23 ID:9hmM95L70(1) AAS
後から増えた「道具を使う」には何かいい感じにデフォルト実装つけとけば既存のクラスには影響しないんじゃない
234: (ワッチョイ bfe7-AHQg) 2024/12/14(土)12:26 ID:vNNE6Utb0(1) AAS
それを派生というのでは?
235: (ワッチョイ 4783-Ahcx) 2024/12/14(土)12:52 ID:/3oGIJ400(1) AAS
C# 8 からはインターフェースのデフォルト実装が使える
236
(1): (ワッチョイ bf79-/9Tr) 2024/12/14(土)14:27 ID:TQJHLK8K0(1) AAS
Win10や11のOS付属のpowershell5.1でインラインで書けるC#ってバージョンちょっと古くね
できれば新しいRoslynのC#をpowershellから使いたいのだが
なんか昔の記事しか見つからん
237: (ワッチョイ bf19-xj7L) 2024/12/14(土)15:05 ID:uE892PPx0(1) AAS
どうせ別に入れる必要があるならPowerShell 7入れれば良くね
238
(1): (ワッチョイ a78e-4Hmg) 2024/12/14(土)16:09 ID:SXm2TFHi0(1) AAS
>>236
起動時に出て来るメッセージすら読めないのか
239
(2): (ワッチョイ 2679-qWVo) 2024/12/15(日)03:52 ID:c6iml+qS0(1) AAS
>>238
お前はこれでも読んどけ
外部リンク[4]:learn.microsoft.com
Roslyn単体で使うだけならビルドツール拾ってくるだけだが
Powershell上げるとなると仕様も大幅に変わってたりして無理だし俺が出した要件の解にもなってない
1-
あと 279 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.014s