[過去ログ]
Rust part24 (1002レス)
Rust part24 http://mevius.5ch.net/test/read.cgi/tech/1716759686/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
701: デフォルトの名無しさん [] 2024/07/10(水) 00:10:24.05 ID:HryWiaEt 過去に見た (rust以外の) プロジェクトの失敗例だと ・もともとFooというクラスがあった ・新しく作るBooクラスについて、Fooクラスと同じように扱えれば既存コードをあまり変更しなくても済むぞ!と誰かが気づいた ・その人物は Foo クラスのメソッドを元に IFoo インタフェースを定義し、それを Foo と Boo に実装させた ことから混沌としたコードが生まれた例がある この失敗をやらかした人は、Rustでも同じように「既存の Rectangle クラスを元に IRectangle トレイトを作り、それを Rectangle と Square に実装させる」ことをやりかねない Rustではそれが不自然なパターンになりやすいし、起こりにくくはあるけど、本質的には設計の問題 http://mevius.5ch.net/test/read.cgi/tech/1716759686/701
702: デフォルトの名無しさん [] 2024/07/10(水) 00:29:11.77 ID:HryWiaEt 「Rustを書く人はみんな賢いからそのような問題は起こさないはずだ」というなら話は別たけど 実装者の設計能力は言語仕様によって担保できるものではない http://mevius.5ch.net/test/read.cgi/tech/1716759686/702
716: デフォルトの名無しさん [] 2024/07/10(水) 07:02:08.59 ID:HryWiaEt >>704 ずっと「オブジェクト指向言語のクラスが抱えている問題はRustでは起こらない」と主張してる人がいるでしょ それに対して、そんなことはないよと言ってるだけ http://mevius.5ch.net/test/read.cgi/tech/1716759686/716
732: デフォルトの名無しさん [] 2024/07/10(水) 22:01:49.20 ID:HryWiaEt >>721 「インタフェースを定義し、それに基づいて実装する」という設計なら問題ないのだけど、 これは「あるクラスに依存していたコード群が新しいクラスでも動くようにするため」という発想になっており、大規模な開発だとこのやり方はだいたい失敗するよという話 例を書きづらいけど、例えば「A社製の装置を制御するアプリ」があったとして、 新しく「B社製の装置も制御できるようにする」という追加の開発案件があったとする。 この時点ではまだADeviceControllerは抽象化されておらず、A社装置の仕様に強く依存したクラスであるとする。 これを「ADeviceController が持つメソッドを IDeviceController として取り出し、それを BDeviceControllerにも実装させる」とすると確実に事故る。 「B社装置にだけある機能Xを呼びたい」「A社装置にあった機能YがB社装置にはない」といった違いを吸収しきえれず、インタフェースがぐちゃぐちゃになったり、「呼んでも何もしない」とかの形で誤魔化したり、呼び出し元でサブクラスの判定が必要になったりする こうならないようにするには a. 具体的な機器に依存しない、機器の振る舞いを適切に抽象化したインタフェースを定義する b. 代数的データ型を使う という方法があり、 Rust では b. の方法も使いやすいので、個人的にはそこが良いなと思う http://mevius.5ch.net/test/read.cgi/tech/1716759686/732
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.039s