tl:drデカップリングはどのように機能しますか? ちょっとした例が必要かもしれません
Ruby のプログラミング - The Pragmatic Programmer's Guide を読んでいます。(http://ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html)
Song のサブクラス KaraokeSong にto_sを実装する方法の例があります。
class KaraokeSong < Song
# ...
def to_s
"KS: #{@name}--#{@artist} (#{@duration}) [#{@lyrics}]"
end
end
aSong = KaraokeSong.new("My Way", "Sinatra", 225, "And now, the...")
aSong.to_s » "KS: My Way--Sinatra (225) [And now, the...]"
今、彼らはそれを行うのは悪い方法だと言います:
Song をミリ秒単位で保存するように変更したとします。突然、KaraokeSong はばかげた値を報告し始めました。「My Way」のカラオケバージョンが 3750 分間続くというアイデアは、あまりにも恐ろしくて考えられません。
代わりに、to_s を super で定義する必要があります。
def to_s
super + " [#{@lyrics}]"
end
@duration 変数がまだミリ秒単位で曲の長さを保存している場合、親のメソッドを呼び出すだけの新しいto_sはどのように問題を解決するのでしょうか? それでも 3750 分を返しますね。
私はそれらの2つの違いを本当に理解していないと思います。