0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

プログラムを書くときの注意点:その3

Last updated at Posted at 2020-08-18

プログラムを書くときの注意点:その3

1.結論
2.リスコフの置換原則とは何か
3.なぜリスコフの置換原則が必要か
4.リスコフの置換原則はどう使うのか
5.ここから学んだこと

1.結論

リスコフの置換原則にも従う!

2.リスコフの置換原則とは何か

●リスコフの置換原則とは、

簡単にいいますと、親クラスは子クラスと
同じ動きにしないといけない

逆を言うと、子クラスが親クラスのメソッドの
挙動を変えてはいけないということです。

3.なぜリスコフの置換原則が必要か

結論としては、プログラミングを書く際の要は以下の
3つに集約されると思っています。

Ⅰ)保守性:修正(エラー発見のしやすさ)・管理のしやすさ
Ⅱ)拡張性:追加機能実装のしやすさ
Ⅲ)可読性:記述のわかりやすさ
が必要だと考えております。

上記3つのことは自分が他の4つの原則を説明する際に
同じことを言うので、5つの原則のうちどれかを読んでいただくと
結論はすべてこの3つに収まります。

つまり、上の3つを叶えるには
リスコフの置換原則に”も(他の4つの原則もあるので)”従う!!

4.リスコフの置換原則はどう使うのか

こちらも例を用いて説明いたします!

リスコフの置換原則
class A
 def initialize(aaa)
 end

 def a
 end
end

class B < A
 def initialize(aaa)
  @bbb = aaa
 end
 
 def b
 end
end

================

class C < A 
 def initialize(aaa)
 @bbb = aaa
 @ccc = aaa
 end
 
 def a
 end
 
 def c
 end

リスコフの置換原則ではない
class A
 def initialize(aaa)
 end

 def a
 end
end

class B < A
 def initialize(aaa)
  @bbb = aaa
 end
 
 def b
 end
end

class B < A 
 def initialize(aaa)
 @ccc = aaa
 end

================

class B < A
 def initialize(aaa)
  @bbb = aaa
  @ccc = aaa
 end

def a
 if ccc
 else
    ccc_a
 end

 def c
 end
end

”リスコフの置換原則ではない”の方に、
================の下に
classBにしていますが、
”リスコフの置換原則”の方に、
================の下に
classCに変換しています。

classBに一緒にするより、
classCに分けて原則に則っています。


5.ここから学んだこと

i)リスコフの原則自体、まったく知らなかったので
 調べること自体にすごく価値がありました!

ii)親クラスと子クラスを連動はさせるものの、
子クラスから親クラスに影響を受けないようにすることがポイントでした!


0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?