先日、「リスコフの置換原則」について学ぶ機会がありました。自分が聞いた話では、整理術に近いような印象で、システムだけでなく実生活にも適用できる考えなのでは?と熱いものを感じたので、自分なりに言語化してみました。
この記事の対象者
- ある程度のポエムが混じっていても、許容できる方
- リスコフの置換原則を感覚で捉えたい方。
- タイトルに共感できる方
#目次
1.リスコフの置換原則とは?
2.リスコフの置換原則の考えは現実にも適用できる?
3.リスコフの置換原則の考えが使われているシステム?
4.まとめ
5.参考
リスコフの置換原則とは?
リスコフの置換原則はよく以下のように説明されます。
S が T の派生型であれば、プログラム内で T 型のオブジェクトが使われている箇所は全て S 型のオブジェクトで置換可能であれ
もっと短く言うと
派生型は基本型と置換可能でなければならない
頭の中にたくさんの「?」が湧き出たと思います。この記事は上記の文章の言っている事を紐解きながら、私たちの生活役に立ちそうな考えを抽出する試みです。
リスコフの置換原則の考え方は現実にも適用できる?
リスコフの置換原則で大事なのは、基本型から生まれた派生型は、基本型にできない事をすべきではないという所です。
この考えは、会社の組織で例えると仕事の属人化に似ています。
新入社員のAさんと先輩社員のBさん、その他の社員Cで仕事をしていたとします。
ある業務は数年前までは、社員C全員が担当できる、統一されたものでした。しかし、Bさんが「だいたい任されるの、俺だから俺流でいいや」的な発想で「統一業務マニュアル」を無許可で「俺流マニュアル」に書き換えてしまいました。
〜そして、現在へ〜
Bさんが退社してしばらく経ち、新入社員のAさんが入社しました。Bさんはもう居ないので、代わりに社員Cの中の一人がAさんの研修を担当しました。業務がうろ覚えなので、マニュアルを見つつ教える必要がありましたが、マニュアルを開くと超効率化されて訳の分からないことになっている「俺流マニュアル」がありました。これでは研修どころではありません。社内は小さな騒ぎになりましたとさ...。
現実には一つの業務が変わるだけで会社全体がパニックになることは考えにくいかも知れませんが、「部分最適」が「全体最適」の支障になりかねない一つの例として考えていただければと思います。
最初の文章をもう一度見てみましょう。
「派生型は、基本型と置換可能でなければならない」
今回出てきた「統一マニュアル」が基本型にあたり、「俺流マニュアル」が派生型に当たります。
ここで、「置換可能」かというふうに考えるともはや原型は残っていないように思えます。なんせ「全体で統一」から「超部分的で俺」に置き換わってしまっていますからね。
小さなマニュアルであれば、新しく作り替えるのは容易かも知れませんが大きなマニュアルであるほど、どこまでが「俺流」になっているのかを特定する労力は計り知れません。
ここまでの話を整理すると、リスコフの置換原則を適用しない事で以下のような
デメリットがある事が分かります。
- 全体の中で一部が部分的に特化している事で、全体で歪みが生まれる。
- 部分が担当する範囲が大きくなることで、部分の変化に全体が大きく影響を受ける
ここまでは、やや現実寄りで考えてきましたが、もう少しシステム寄りで「リスコフの置換原則」について考えていきましょう。
リスコフの置換原則の考えが使われているシステム?
例えば、Linuxのファイルシステムは「ファイル」と「ディレクトリ」というとてもシンプルな構成で成り立っていると思います。ルートディレクトリには/binや/dev、/tmpなどのディレクトリがあると思いますが、これらは個々のディレクトリに役割を与えたものであり、極論を言えばどのような名前でもシステムには影響が出ないと思います(多分...)。現実にはないと思いますがLinuxに大きく変更が必要な場合でもLinuxのファイルシステムの考え方には「小さなものを組み合わせて大きくする」というものが根底にあり、個々が統一感を持って独立しているため、「機能を追加することで他のシステムの修正が必要になる」という事がないと思います。
こう考えると「コマンド」という仕組みは完成度が高いですね...。
(Linuxの場合は、「全体最適」の範囲を狭めて、部分の中に全体最適の考えを適用することで、個々の独立性を高めてシステム全体で部分が部分個々を認識しなくてもいいようにしているかもしれないですね。)
ここまでの話を整理すると、リスコフの置換原則を適用する事で以下のような
メリットが得られる事が分かります。
- 全体で統一感を持てる
- 個々が統一感を持つ事で特定の部分だけが特別という事が無くなる
まとめ
派生型は基本型と置換可能でなければならない
この記事では上記の言葉を通じて、置換可能ではないケースとはどんなケースか?というのを現実寄りの視点で見てきました。
「リスコフの置換原則」を知ることで、「部分個々」の暴走を防ぐ事ができ、「統一感を持って全体最適」な考えを持つ事ができる。
「置換可能か?」という考えは「再現可能か?」という考えに置き換えると多くの物事に適用させる事ができそうですね。
他にもシステムで適用されていて、現実でも適用できそうな考えはあると思うので、考え方のひきだしを増やしていきたいです。
参考