52
Acquiring Behavior Through Inheritance Rails新村讀書會#2015/10/05 Practical Object-Oriented Design in Ruby [Ch6]

Ch06 inheritance

Embed Size (px)

Citation preview

Page 1: Ch06 inheritance

Acquiring Behavior Through Inheritance

Rails新⼿手村讀書會#2015/10/05 Practical Object-Oriented Design in Ruby [Ch6]

Page 2: Ch06 inheritance

GitHub(@azi)

Page 3: Ch06 inheritance

書裡提到的重點繼承是幹嘛的 繼承 Inheritance

何時使⽤用inheritance

繼承怎麼⽤用,如何寫出好的繼承架構 找出抽象

範本⽅方法(Template Method)

⽗父類別與⼦子類別的耦合(coupling)管理

Page 4: Ch06 inheritance

depends on wish list 章節要快速帶過

Page 5: Ch06 inheritance

所以 書裡提到的重點

真的會很快速的帶過XD 請繫好安全帶

Page 6: Ch06 inheritance

before start

Page 7: Ch06 inheritance

OO的三⼤大基礎

Page 8: Ch06 inheritance

OO的三⼤大基礎

封裝 繼承 多型

Page 9: Ch06 inheritance

OO的三⼤大基礎

封裝 繼承 多型

Page 10: Ch06 inheritance

OO的三⼤大基礎

封裝 繼承 多型

Page 11: Ch06 inheritance

OO的三⼤大基礎

封裝 繼承 多型

ch2 設計具有單⼀一職責的類別

Page 12: Ch06 inheritance

OO的三⼤大基礎

封裝 繼承 多型

ch2 設計具有單⼀一職責的類別

ch3 管理依賴關係

Page 13: Ch06 inheritance

OO的三⼤大基礎

封裝 繼承 多型

ch2 設計具有單⼀一職責的類別

ch3 管理依賴關係

ch4 建⽴立靈活的介⾯面

Page 14: Ch06 inheritance

OO的三⼤大基礎

封裝 繼承 多型

ch2 設計具有單⼀一職責的類別

ch3 管理依賴關係

ch4 建⽴立靈活的介⾯面

ch5 Dock typing

Page 15: Ch06 inheritance

OO的三⼤大基礎

封裝 繼承 多型

ch2 設計具有單⼀一職責的類別

ch3 管理依賴關係

ch4 建⽴立靈活的介⾯面

ch5 Dock typing

Page 16: Ch06 inheritance

本章主題

封裝 繼承 多型

Page 17: Ch06 inheritance

我們先來想⼀一下 繼承是要⽤用來做什麼⽤用的? 繼承的⽬目的是什麼?

Page 18: Ch06 inheritance

繼承的⽬目的,是要達到 「程式碼再⽤用」(Code Reuse)

或「介⾯面再⽤用」。︒。

⽽而繼承的⼿手段, 就是「擴充」或「修改」。︒。 這是繼承的重點,請務必牢記。︒。

reference: http://www.jerry-tsai.com/2007/12/oo.html

Page 19: Ch06 inheritance

繼承的⽬目的,是要達到 「程式碼再⽤用」(Code Reuse)

或「介⾯面再⽤用」。︒。

⽽而繼承的⼿手段, 就是「擴充」或「修改」。︒。 這是繼承的重點,請務必牢記。︒。

reference: http://www.jerry-tsai.com/2007/12/oo.html

定義新的⽅方法

Page 20: Ch06 inheritance

繼承的⽬目的,是要達到 「程式碼再⽤用」(Code Reuse)

或「介⾯面再⽤用」。︒。

⽽而繼承的⼿手段, 就是「擴充」或「修改」。︒。 這是繼承的重點,請務必牢記。︒。

reference: http://www.jerry-tsai.com/2007/12/oo.html

定義新的⽅方法

針對超類別中的某⽅方法重新定義其⾏行為

Page 21: Ch06 inheritance

once upon a time....

Page 22: Ch06 inheritance

FastFeet boss : 來幫我寫程式吧!

⼩小明: 呵~呵~呵 呵~呵~呵~呵~呵~呵

Page 23: Ch06 inheritance
Page 24: Ch06 inheritance
Page 25: Ch06 inheritance
Page 26: Ch06 inheritance
Page 27: Ch06 inheritance
Page 28: Ch06 inheritance

就交給我吧!

Page 29: Ch06 inheritance
Page 30: Ch06 inheritance

沒有單⼀一職責

Page 31: Ch06 inheritance

沒有單⼀一職責

難以維護

Page 32: Ch06 inheritance

沒有單⼀一職責

難以維護

擴充困難

Page 33: Ch06 inheritance

沒有單⼀一職責

難以維護

擴充困難

code review 會被退回來 (泣)

Page 34: Ch06 inheritance
Page 35: Ch06 inheritance

重覆的code太多

Page 36: Ch06 inheritance

重覆的code太多

類別之間有⼀一定的關係

Page 37: Ch06 inheritance

重覆的code太多

類別之間有⼀一定的關係

繼承

Page 38: Ch06 inheritance
Page 39: Ch06 inheritance
Page 40: Ch06 inheritance
Page 41: Ch06 inheritance

move size

Page 42: Ch06 inheritance
Page 43: Ch06 inheritance
Page 44: Ch06 inheritance
Page 45: Ch06 inheritance
Page 46: Ch06 inheritance

依賴太多

Page 47: Ch06 inheritance
Page 48: Ch06 inheritance

決定處理時機

Page 49: Ch06 inheritance

決定處理時機

提供內容

Page 50: Ch06 inheritance

⼩小結 繼承解決了多種相關類型之間存在的問題。︒。它充許我們將共⽤用的程式碼隔離起來。︒。並在抽象類別裡實作共同的演算法,同時⼜又提供⼦子類別其特殊化。︒。

建⽴立抽象⽗父類別最佳辦法是:從具體的⼦子類別裡擷取程式碼。︒。從⾄至少三個具體類別裡找出正確的抽象是最為輕鬆的。︒。

抽象⽗父類別可以使⽤用範本⽅方法讓⼦子類別提供特殊化,並

可以使⽤用hook⽅方法降低層次結構中的耦合度。︒。

Page 51: Ch06 inheritance

End

Page 52: Ch06 inheritance

<< git clone https://github.com/square/maximum-awesome.git

<< cd maximum-awesome

<< rake

<< import solarized color scheme(file in maximum-awesome folder too) to iTerm2

<< open .vimrc  add  set background=dark

vim install