從物件導向的術語來看,物件繼承是一種 「is a」的關係,但我個人比較偏好解釋成「is a kind of」,也就是「是一種」的關係,例如,男人是一種人類;女人是一種人類;人類是一種動物。這樣的形容比較精確,否則很容易和物件混淆。例如我們說,「欣郁是個人」,並不是說欣郁是人的子類別,而是說欣郁是人的一個物件,因此有必要釐清語意上的模糊。
將「男人是一種人類」、「女人是一種人類」、「人類是一種動物」的關係與特性以UML類別圖描述,則如下:
從類別圖的表示中,我們可以很清楚看見類別的階層關係。
一般而言,我們會很直觀的把上述類別圖轉換為如下的定義域圖,將每一個類別的定義視為一個集合。
但是我得告訴你一個壞消息:從這種角度思考,對物件導向概念的釐清沒什麼幫助。原因是:你最多只能從這張圖看出男人與女人處於類別階層的何種位階。物件導向著重的是類別所提供的操作,因此你最好將你的角度顛倒過來,像下圖一樣改為從功能性的角度去思考每個類別提供什麼樣的操作。
從這張圖你可以看見,男人與女人的功能裡包含著男人或女人特有的功能,加上人類及動物的功能。這樣你就不會期望男人與女人在交談上必須有一樣的表現,因為雖然交談是「人類」類別提供的功能,現在男人與女人都有自己的「人類」功能區塊,雖然都有「人類」的功能,卻可以提供不同的實作。這種Overriding(覆載)的概念,從功能性的角度才看得出來。
沒有留言:
張貼留言