/note/tech

リスコフの置換原則がいう互換性とは、より厳しい入力ルールとよりバリエーションに富んだ出力を持つ派生がNG

リスコフの置換原則がいう互換性とは、より厳しい入力ルールとよりバリエーションに富んだ出力を持つ派生がNG。これ逆にいうと、基礎になるほうが十分に厳しい入力と豊かな出力の可能性を持ってないかぎり、後に続くものはみな、防衛的プログラミングを迫られてセコい結果しか出せなくなる

@tanakahisateru

どのように派生するかではなく、どのように抽象を設計してリファレンス実装の仕様を定めるかのことを言っていることに、ようやく気づいた。継承した方が非互換やってしまったら事故って直せばいい。でもベースがザルだと永久に子孫に禍根が残るから超やばい。

@tanakahisateru

リスコフこれまで SOLID の中でひとり枠外の異色な存在だなと思ってたんですが、こう考えると、安定度抽象度等価原則のクラス版ってハイレベルなポジションに来るのかも。安定した抽象をデザインするとは、どんな派生でも壊れない完全な一般化が必要で、それはコードどう書くかのレベル超えてる話

@tanakahisateru

なるほど