[過去ログ]
Rust part24 (1002レス)
Rust part24 http://mevius.5ch.net/test/read.cgi/tech/1716759686/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
721: デフォルトの名無しさん [] 2024/07/10(水) 13:29:52.02 ID:kPG9kWdt >>701 そのやり方がなぜ悪いのか理解できませんので、教えてください。 例えば、C++だと、以下の様にするのも別に悪いやり方ではないような 気がするのですが。 class Number {・・・}; Number add(Number &a, Number &b); Number mul(Number &a, Number &b); class Integer : public Number {・・・}; class Rational : public Number {・・・}; http://mevius.5ch.net/test/read.cgi/tech/1716759686/721
723: デフォルトの名無しさん [] 2024/07/10(水) 13:34:42.29 ID:kPG9kWdt >>721 改めて見てみると、add()やmul()の戻り値にNumberの実態を返しているのがおかしい気もしますが。 IntegerやRationalにadd()やmul()を仮想関数として定義するのが良いのかもしれません。 そのような点で改良の余地が沢山ありそうです。 http://mevius.5ch.net/test/read.cgi/tech/1716759686/723
726: デフォルトの名無しさん [sage] 2024/07/10(水) 15:49:38.80 ID:WriLZMcZ >>721 add(integer, rational)できる? http://mevius.5ch.net/test/read.cgi/tech/1716759686/726
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.026s