將具有共同特性(包括屬性與操作)的一群物件的集合(sets),抽象化後稱之為類別(class)。分類可以說是物件導向的本質,因為這是解決軟體複雜度的最根本道理,軟體設計者將物件 “分門別類”,才能層次分明、井然有序的管理好在系統內各司其職、各負其責的眾生物件,也因為系統就是藉由各類型物件的互動、分工合作,才能完成越來越形複雜、所被賦予的一個個工作與任務。
那麼,又如何作分類? 分類其實是萬物與生俱來的本能。例如,看到電子琴、吉他、笛子等物件,自然而然就會聯想它們都是屬於 “樂器” 這個類別。那麼,電子琴是否也可以視為是單獨的一個類別? 當然可以! 當你想區別 “電子琴” 這個類別與其它也是屬於樂器、但卻又有個別的特色,如 “吉他” 類別時,就會將 “樂器” 這個類別再細分至 “電子琴”、”吉他”、”笛子” 等類別。當作了更細部的類別界定後,當你看到 “老賴家買了一部 Yamaha 電子琴”,就會知道這個物件是屬於 “電子琴” 這個類別,而不會是 “吉他” 這個類別了。另一個例子,跑去 “阿珠貓狗鳥兒專賣店”,你會看到 “各類” 的動物,然後,你會想成牠們 “都是”(抽象化) “寵物”(共同的類別),但,你該不會稱這些動物為 “禽獸” 吧? 這也代表著,分類會依據普遍價值觀的概念,找出適當的術語,來為其分類。
只有人類會分類嗎? 前述提及,分類絕對是萬物的本能。例如,跑去六福村隔著巴士車窗看一大群狒狒們,牠們會聚在一起,然後也隔著車窗看著你,如果你敢打開車窗,甚至跑出去,這些狒狒們鐵定會 “毆打” 你,因為牠們知道你是 “非我族類”,是兩種區隔明確的類別。
是否可以對類別作明確的定義與描述? 依據 J.Martin & J.Odell 的 “概念三部曲(concept triad)”,可以利用三角形的圖形表示法,將類別以內涵(intension)與延伸(extension)兩種表達方式,來作更為明確的定義及描述。例如,要解釋與定義 “車子” 這個類別:
“車子是可以在陸地上行進及載人的交通工具。”
“腳踏車、摩托車、汽車、巴士、坦克車 …等,都是車子的一種。”
① 是以定義的方式來表達類別,這樣的方式稱為 “內涵(intension)”; ② 則是以實際的實體為例,來說明類別,這樣的方式稱為 “延伸(entension)”,兩者都是類別的表示法,以 “概念三部曲” 的表達方式如下圖。
圖、範例—定義類別的概念三部曲表示法
可以請問一下,載你部落格裡提到
Object-Oriented Methods A Foundation 2nd
這本書,在哪邊才能買得到呢?
這本書在台灣大概買不到了吧? 要去天龍書局問問看。
最好是直接從 amazon 找尋訂購。
謝謝同人提供不錯的見解。 🙂
不過,個人比較不偏向使用如 “deduction”, “induction” 這類的用詞,
“intension” 與 “extension” 可以充分地來解釋 “概念”、”型態”、”類別” …
等,非常單純。
三言兩語來定義 “概念” ; 找出符合定義的實例來具化 “概念”,相當的簡單以及容易取得共識。
其實內涵(intension)就是deduction(演繹法);延伸(entension)就是induction(歸納法)。
在實際設計的思維過程中,我對複雜問題多先歸納後演繹,簡單問題多先演繹後歸納。前者為大題小作;後者則為小題大作。
供參考。