2008/08/25

UML物件裏的Generalization

在 UML 裏,有一種關係叫 "Generalization"。一般而言,我們把這個關係當作物件「繼承」的表達。不過,在此之前,一直對 "Generalization" 圖示的方向性有疑惑:為什麼他的方向是從 "子類別" 指向 "父類別" 呢!?

很早以前,大概從高中剛始,自己對哲學就一直很有興趣,還曾一度想以哲學系為目標;只是因為自己對科學"更"有興趣 (也有未來出路的考量),所以選了電子系。然而,自己對哲學的興趣一直沒有消失,所以大概從三年前開始,跑去洪建全基金會上傳佩榮教授的「西洋哲學」課程。這個課程,對我有很大的幫助;其幫助不是在人生觀或人生態度的建立,而是在「思考過程」的進步。是的,我特別強調了「思考過程」這個概念,這個概念表意著一個「活動」,而這個活動體現了我的「存在」...

上面那一段其實是廢話。我在學哲學的時間,跟我在學 UML 的時間差不多剛好重疊;這也讓我在學 UML & OO 時,有了一些與他人不同的思考視野 (也不知道是好還是不好)。針對本文一開頭的問題來說,一般多數的"華語"人士,大概都是這麼解釋:「祖先不知道子孫的存在,可是子孫卻知道祖先的存在...」(此段文句取自 "OCUP UML初級認證攻略";另外,我大學時的 C++ 老師也是這麼解釋)。

一般而言,這樣說應該也沒錯,而且,知道怎麼用就好了,不是嗎?? 不過呢,在我上過哲學課程之後,我卻對 "Generalization" 有了些不同的看法。引述一段黑格爾 (Georg Hegel) 的話:「An idea is always a generalization, and generalization is a property of thinking. To generalize means to think. 」。我想,應該很少人知道 "Generalization" 在哲學領域裏所代表的意思 (大概也沒人像我這麼無聊吧!?)。這裏留下 Wiki 的連結:Wiki百科 - Generalization

我想說的是,正因為 UML 想表達的是 "Generalization" 而不再是 "Inheritance",所以箭頭方向會從子類別指向父類別;從 "實體(implementation)" "抽出(generalize)" "概念(notion)"。而這樣也更能表達英美實證主義哲學,其 "由實體歸納出概念" 的思考方向...(上面這一段文句,我還不知道該怎麼描述比較好...)。好啦,我的意思就是,"Generalization"的方向,其實是有其哲學上的意涵 - 當然,是不是真的有這種意涵,我也不知道 - 反正,知道怎麼用就好了啦~~~~

不過,我也想知道,一開始的時候,為什麼是用 "Inheritance" !!?? 個人的猜測,一開始時候,也就是 "Inheritance" 的時代,物件導向的 "學術概念" 還沒很完備。一直到 Java 時代,也差不多是 "Generalization" 時代,物件導向概念與方法才算比較成熟,所以才把 "Inheritance" 換成了 "Generalization"。當然,直到今日,這些東東仍然不斷在演進,就像 UML 的版本仍不斷在更新。未來,這些概念的用詞,是否會再改變,我想答案是肯定的吧!?

PS:我個人其實不怎麼喜歡 "知道怎麼用就好了" 這一段話,這樣的態度,某種程度上的阻礙了學術的進步。不過,那是另一個issue了...


沒有留言:

張貼留言