SlideShare una empresa de Scribd logo
1 de 13
物件導向範型
Ted
• 講師與學生,老師的責任就是讓學生知道
下堂課要去哪上課
– 獲取聽課名單
– 針對每個人
• 找到每個人要去聽的課
• 找到聽課的地點
• 找到前往路徑
• 告訴他們
• 但是實際上我們真的會這樣做嗎?
責任的轉移
• 講師告訴學生下堂課在哪,剩下的就是學
生的責任了
差別在哪
• 第一種方法講師必須關注許多細節,因為
所有的事情都由講師負責
• 第二種方法講師只負責告知,接著學生負
責前往所屬課堂
• 第二種方法的好處在於
– 假設今天增加了助教研究生,助教需要在下堂
課前收集本堂課的學生對課程的評價
– 對講師來說依然只需要告訴學生下堂課的位置,
學生各自會負責該做的責任,研究生會蒐集評
價並前往下堂課,普通學生會前往下堂課,翹
課的學生會自行翹課….etc
– 各司其職(負責自己的責任)
• 第二種方法有以下三方面不同
– 人們對自己的行為負責
– 講師將不同類型的人(普通學生&研究生),一視
同仁,把他們都視為學生,並且告知他們必須
前往下一堂課
– 講師不需要知道學生如何前往下一間教室
• 用術語來說明的話就是
– 概念
• 軟體要負責甚麼(abstract)
– 規約
• 怎麼使用軟體(interface)
– 實作
• 軟體怎麼履行責任(implementation)
• 講師要負責甚麼
– ClassRoom getnextClassRoom()
• 學生必須做甚麼
– gotoNextClassRoom(ClassRoom room)
多型
• Abstract class 學生
• Concrete class 普通學生、研究生
• 講師只需要針對學生做處理即可
• 普通學生與研究生會負責自己該負責的責
任
封裝的概念
• 講師不知道哪些是一般學生,哪些是研究
生,對講師隱藏了學生的類別(也就式封裝
了學生)
• 雖然學生都是前往下堂課堂,但是行為卻
不同
封裝的好處
• 使用者不需在操心實做的部分,使用者只
需要知道想要做甚麼,剩下的交由被呼叫
者去處理
• 可以在不考慮呼叫者的情況下實作(testable)
• 其他物件對該物件內部是未知的,例如講
師呼叫gotonextClassRoom,但是講師並不
知道普通學生、研究生實際做了哪些事情
Q&A

Más contenido relacionado

Más de Ted Liang

Android Activity Transition(ShareElement)
Android Activity Transition(ShareElement)Android Activity Transition(ShareElement)
Android Activity Transition(ShareElement)Ted Liang
 
無標題簡報
無標題簡報無標題簡報
無標題簡報Ted Liang
 
Android Gradle about using flavor
Android Gradle about using flavorAndroid Gradle about using flavor
Android Gradle about using flavorTed Liang
 
Dagger & rxjava & retrofit
Dagger & rxjava & retrofitDagger & rxjava & retrofit
Dagger & rxjava & retrofitTed Liang
 
Strategy Pattern
Strategy PatternStrategy Pattern
Strategy PatternTed Liang
 
Adapter Pattern
Adapter PatternAdapter Pattern
Adapter PatternTed Liang
 
設計模式的解析與活用 -開拓視野
設計模式的解析與活用 -開拓視野設計模式的解析與活用 -開拓視野
設計模式的解析與活用 -開拓視野Ted Liang
 
Design pattern intro
Design pattern introDesign pattern intro
Design pattern introTed Liang
 

Más de Ted Liang (9)

Android Activity Transition(ShareElement)
Android Activity Transition(ShareElement)Android Activity Transition(ShareElement)
Android Activity Transition(ShareElement)
 
無標題簡報
無標題簡報無標題簡報
無標題簡報
 
Android Gradle about using flavor
Android Gradle about using flavorAndroid Gradle about using flavor
Android Gradle about using flavor
 
Dagger & rxjava & retrofit
Dagger & rxjava & retrofitDagger & rxjava & retrofit
Dagger & rxjava & retrofit
 
Strategy Pattern
Strategy PatternStrategy Pattern
Strategy Pattern
 
Adapter Pattern
Adapter PatternAdapter Pattern
Adapter Pattern
 
設計模式的解析與活用 -開拓視野
設計模式的解析與活用 -開拓視野設計模式的解析與活用 -開拓視野
設計模式的解析與活用 -開拓視野
 
Design pattern intro
Design pattern introDesign pattern intro
Design pattern intro
 
Git簡報
Git簡報Git簡報
Git簡報
 

物件導向範型