C#, C♯, C#相談室 Part98 (392レス)
C#, C♯, C#相談室 Part98 http://mevius.5ch.net/test/read.cgi/tech/1719656321/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
207: デフォルトの名無しさん (ワッチョイ 476d-Ahcx) [] 2024/12/12(木) 09:20:56.04 ID:m/Fq7DtI0 >>206 Nullableな IFrayable? をプロパティとして持たせて、飛ぶ鳥の場合はthisを返すようにするということ? http://mevius.5ch.net/test/read.cgi/tech/1719656321/207
209: デフォルトの名無しさん (ワッチョイ 476d-Ahcx) [] 2024/12/12(木) 10:34:43.14 ID:m/Fq7DtI0 鳥とペンギンだと近すぎて例えとして微妙だった 例えば「動物のリスト」のようなデータを持ち、動物には鳥のように飛べるクラス (Flyメソッドを持つ) と、トラやライオンのように走るクラス (Runメソッドを持つ) があるといった場合 動物の一覧を持つには List<IAnimal> のような型を使うと思うけど、これは合ってるよね? その上で動物によって違うアクションを行わせたいとする IAnimal側に CanFly のようなメソッドを追加していくと、例えばサルのように「道具を使う動物」が後から追加された場合、IAnimalにメソッド追加が必要になり、それはBirdなどの各クラスにも影響する Birdクラスは「道具を使う」なんてことは知らないのに、インターフェースのために CanUseTool のようなメソッドを後から追加するのは違う気がする そうするとやっぱインターフェース分離の形になりそうで、そうなると利用側で is でキャストするのが落としどころなのかと http://mevius.5ch.net/test/read.cgi/tech/1719656321/209
214: デフォルトの名無しさん (ワッチョイ 474b-Ahcx) [] 2024/12/12(木) 18:40:52.28 ID:m/Fq7DtI0 ISP自体はC#でよく出てくる問題じゃないの? これなんかまさにそう https://dev.to/fabriziobagala/interface-segregation-principle-452m だけどこういった解説はISP単体の説明になっていて、泳ぐ、走るといった能力の異なるものを Animal として抽象化する方法を教えてくれない 綺麗な方法でなくても「C#ではこうすることが多い」のようなプラクティスがあれば知りたかったんだけど、そういうのは無さそうなんですかね http://mevius.5ch.net/test/read.cgi/tech/1719656321/214
222: デフォルトの名無しさん (ワッチョイ 474b-Ahcx) [] 2024/12/12(木) 22:59:54.30 ID:m/Fq7DtI0 >>220 「クライアントが『泳ぐ、飛ぶ、もしくは走る動物』として使うことを想定するのなら、そのインターフェースであるIAnimalにその情報を含めるのは適切」ということですかね class Penguin としては Fly や Run などのメソッドの実装はノイズに思えるけど、IAnimalとして使われるなら、その契約に従えという感じかな (それだと後から「道具を使う」がIAnimalに追加された際に Penguine もメソッド追加が必要で、そこがモヤモヤしてる) こういう場合にアダプタ (ラッパー?) を使うのって適切? 純粋に Penguine としての機能を提供するクラスと、それを IAnimal として使うためのアダプタみたいなの それだと更に複雑さを増すだけ? OOP難しい…… http://mevius.5ch.net/test/read.cgi/tech/1719656321/222
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.022s