[過去ログ] Rust part24 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
691(7): 2024/07/09(火)22:57 ID:/lHavWP5(1) AAS
>>685
リスコフの置換原則は設計的な原則だから言語仕様で違反を防ぐことはできないぞ
悪名高い長方形・正方形の問題はトレイトがあっても起こり得る
trait Rectangle {
fn set_width(&mut self, width: i32);
fn set_height(&mut self, height: i32);
fn width(&self) -> i32;
fn height(&self) -> i32;
fn area(&self) -> i32 { self.width() * self.height() }
}
省13
692(1): 2024/07/09(火)23:17 ID:dptasXVA(1) AAS
>>691
長方形がトレイトで正方形が構造体とか意味不明なんだが他の形はどっちにするんだ?
おかしいだろ
693: 2024/07/09(火)23:22 ID:J+Fyw0mO(1) AAS
>>691
トレイトは機能を表します
2つの異なる長さを持つ(受け取る)機能を定義しているのならば
正方形はその実装型にはなりえません
696: 2024/07/09(火)23:35 ID:h2DmPYHm(1/2) AAS
>>691
君はLSPを理解できていない
LSPはis-aの関係を持つ二つの型に対して遵守すべきルールだ
Rustのtraitとその実装型はis-aの関係ではなくhas-aの関係を持つ
したがってtraitとその実装型は明らかにLSPの対象外となる
697: 2024/07/09(火)23:40 ID:h2DmPYHm(2/2) AAS
>>695
LSPに違反する二つの型はis-aの関係を持つsupertypeとsubtypeでなければならない
>>691はhas-aの関係なのでLSPに違反する二つの型のコード例とはなっていない
699: 2024/07/09(火)23:59 ID:loMF79su(2/2) AAS
LSPはis-a関係に対して守るべき原則
has-a関係に対してLSPの適用は論外
コード>>691はLSPの違反例となっていない
703: 2024/07/10(水)00:33 ID:L/ekmjSC(1/2) AAS
>>701
それらインタフェースやトレイトを用いている時点でLSPの対象外となっている
LSPを満たす必要がないどころかそんな制限があったら支障が出る
>>691のコードをLSP違反例として出してきたのは明確に間違い
おバカな設計例としてならば理解する
713: 2024/07/10(水)03:06 ID:mzDH1NTP(1) AAS
>それらインタフェースやトレイトを用いている時点でLSPの対象外となっている
間違ってるよ
インターフェースだろうがトレイトだろうがサブタイピングは成立するよ
サブタイピングが成立すれば当然LSPの対象範囲だよ
>>691の例もLSPの違反例としては合ってるよ
間違った継承の使い方の例としてよく使われてるよね
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.031s