上一篇文章說明「建模」,但文章最後留下一個尾巴「抽象」,因為抽象和建模彼此之間是有密切關係的。這一篇文章會完成這個部分的解釋。一方面作為前情提要,二方面是重要的事情值得重複,我再說一遍:良好建模的重點在於 1. 記錄「目的」相關的要點、 2. 記錄有「差異」的點。

差異是比較出來的。兩個事物比較的結果就是某些方面「相同」且某些方面「相異」。當我們把「一群事物」集中在一起做比較,再把它們相同的資訊集合起來,這個過程就是抽象(abstraction),而抽象的結果是概念(concept)。比方說,糖果、甘蔗、巧克力可以抽像出「甜」的概念;跑步、跳繩、舉重可以抽像出「運動」的概念;你、我、愛因斯坦可以抽像出「人」的概念。

概念是有意義的,概念本身可以單獨存在,我們也可以把概念擴充為類型(type)。類型包含了概念,但比概念多了「對某些關鍵訊息的要求」。也就是說,某個事物想要屬於某種類型,就必須滿足這個類型的概念,同時提供這個類型要求的關鍵訊息。例如:人是一個概念(有自身的意義),也可以是一個類型(除了概念的意義,還必須要具備身分證字號、地址、電話...等訊息)。

當然,概念自身的意義是什麼,以及類型需要的關鍵訊息有哪些,都要根據明確的目的才能得知。這就是為什麼我認為 Schema.org 很難成功,你可以上 Schema.org 網站看看。Schema.org 試圖把現代社會需要的類型(以及概念)整理出來,變成規範。例如:人、交通工具、行為、地點,但 Schema.org 為了通用,沒有限定使用目的,這就會導致訊息繁雜,導致最終難以使用。20 年前的 IBM San Francisco 專案試圖對各種企業內的各種事物做通用的抽象,最後過於複雜而失敗,殷鑑不遠。

建模的方式有兩種,一種是使用類型,一種是不使用類型。當建模沒有基於類型時,需要記錄很多資訊;而基於類型的建模只需要記錄類型要求的關鍵訊息(也就是和基本概念有差異的部分),這就是本文章第一段所說的:良好建模的第二個重點在於記錄有「差異」的點,所以在建模之前,最好先抽象,把一些概念和其擴充出來的類型確定下來。另外,類型本身是有意義的,所以基於類型的建模,不只是紀錄資料,也具有意義。因此,我建議最好一定要在類型的基礎上建模。

任何一群事物都可以被抽象為概念並擴充為類型,但近似的一群事物抽象起來意義才大,否則會很籠統。例如:地毯、桌子、米飯只能被抽像出的概念大概就是「東西」,東西是非常籠統的,概念(和類型)太泛太模糊,所以價值很低。

所以在抽象的過程中,往往牽涉到「分類」(classification)。把這一大堆我們想要建模的東西「依據某些特質」分成幾類,再為每一類抽象出概念,擴充出類型,這麼一來,可以降低概念和類型的模糊,提升概念和類型的價值。這裏提到「依據某些特質」,對「特質」的選擇,靠的也是對目的的理解。

做任何事情都不要忘了當初的目的,分類的目的是為了更好地抽象,抽象的目的是更好地建模,良好建模的第一個重點在於記錄目的相關的要點。所以我們在抽象和分類時,要持續思考:我們現在進行抽象和分類的行動,未來要如何能夠滿足建模的目的。

當你試圖把一群概念或類型集合在一起,對它們繼續抽象時,階層(hierarchy)就出現了。這就是你在 Schema.org 看到的階層關係。對於這方面,我簡單地總結:採用階層設計,好處是重複使用定義,缺點是稍微變複雜了。

一定要記得:對「一件」事物做建模,對「一群」事物做抽象。不管是東西、動作、想法、或其他,只要目的清楚,任何一群事物都可以被抽象為概念,擴展為類型。在讀過這兩篇文章後,你已經清晰地理解模型、建模、抽象、概念、類型、分類。

作者簡介


Advertisement

更多 iThome相關內容