曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
• 步驟1——標識事物,并對它們進行命名和定義。
• 步驟2——將事物組織為類層次。
• 步驟3——定義關系、元組數和約束。
• 步驟4——通過添加特性,將與對象相關的值詳細化。
1. 步驟1:命名事物
開始信息建模的最好方法是為系統中的事物設置名稱。其中“事物”通常是指實體、對象、
類或數據元素;這一步并不十分重要。我們將以上“事物”稱為對象類型。
首先要列出與系統相關的所有事物,例如:客戶、帳號、假期、旅館、度假勝地、國家、
預定或付款。有人建議首先對系統進行文本描述,然后從中選出所有名詞。不管采用哪種方法,
這一步都不太困難;通常在較短的時間內就能夠完成。
下一步是產生對象類型的定義,它可能需要耗費更多的時間。以“假期”一詞為例,它的
定義要保證當你看到假期時能夠識別它,而且對于某個事物是否是假期沒有爭論的余地。比如
你可以問以下問題:
• 如果兩個人一起旅游,應該算作一個假期還是兩個假期?
• 未出售的假期是否仍然能夠算作假期,或者稱為其他事物?
• 如果客戶預定了一個假期,后來調整到其他日期,這是否仍然算作同一假期?
在建立這些定義時,我發現有兩類問題總是很有意義的。第一個是以下形式的問題:
• X是一個假期嗎?
通過測試一些不太確定的例子,能夠明確概念的邊界。第二個問題是:
• X和Y是相同的假期,還是不同的假期?
在此,我們不再討論X和Y是否是真正的假期,而是尋找能夠明確地區分特定假期的規則。
對于無形的對象,例如:飛行、頻道、服務或廣告活動,這類問題尤其重要。
你也許會發現不同的人對于這些問題的答案截然不同。有些人或許對什么是假期有完全不同的
看法,例如,他們可能認為2 0 0 1年的復活節是一個假期。這就體現出信息建模的價值:它能夠排除
可能的誤解。在我曾經工作過的一個機構中,由于一個部門認為零售商意味著位于特定位置的一個
商店,而另一個部門認為是一家公司,它可能擁有多個商店,結果造成了數據的丟失。如果問這樣
一個問題:“達拉斯的Q u i c k F o o d與匹茲堡的Q u i c k F o o d是相同的零售商嗎?”,就能夠暴露這種誤解。
經過上述過程,你有可能得到一長串的對象類型列表,其中某些可能有較長的名字,例如:
h o l i d a y - i n v e n t o r y - i t e m和p a r t y - h o l i d a y - r e s e r v a t i o n。如果有可能的話,選擇業界人士能夠正確理
解和解釋的名稱,因為他們不是總有時間查看你精心編寫的定義。
在本階段,由于我們側重于事物的標識,因此除了命名對象類型之外,如何識別每個實例
也是值得考慮的。如何標識單獨的假期?目前可能已經存在用于標識實例的代碼,你需要了解
這些代碼;或者你不得不重新發明一個新代碼;或者你可以使用某些特性的組合—例如:假
第4章數據建模與XML使用83 下載
期可能由客戶編號和起始日期的組合來標識。在本階段中,常常能夠發現現有編碼機制中存在
的問題,例如:公司旅游部門可能用一個客戶編碼標識來自特定公司的所有職員,而客戶服務
部門會給每個參加旅游的職員分配一個獨立的客戶編號。
因此在本步驟的結尾,我們將得到一個對象類型列表,其中的名稱和定義都獲得了一致的
同意。
2. 分類
分類是生物學中的術語,它是指分類系統;在信息建模中,我們也將它稱為類型層次(有
人愿意將它稱為本體論)。既然已經列出了所有對象類型,并給它們命名,現在,我們要將它們
組織到一個層次化的分類體系中。當我們編寫對象類型的定義時,通常會形成這些層次關系。
以下定義都是很常見的,例如:
• 當天往返假期是一個不包括預訂食宿的假期。
• 有三類食宿:旅館食宿、自備食物的食宿和營地食宿。
在這些定義中,關鍵詞是“ is a(是一個)”(或“is a kind of(是一種)”)。團體假期是一個
假期,取消是一個事務,定金是一個付款,素食菜單選擇是一個免費項。如果你能寫下類似“ A
是一種B”或者“每個A都是B”的語句,就能夠在分類中標識子類關系。
這有時被稱為i s - a測試:但是一定要謹慎,因為在英語中我們也常常用i s - a表示單個實例與
它的類型之間的關系:“Benidorm is a resort(B e n i d o r m是一個旅游勝地)”。實際上,在這里用
i s - a - k i n d - o f來表述更加安全。
正如我們將在后面看到的,標識子類非常有用,但是更重要的,它有助于理解對象類型定
義。舉例來說,如果你的類層次錯誤地將客戶標識為旅游者的子類,很可能有人會迅速發現錯
誤,并指出I B M是一個客戶,但是仍然要登飛機。
如果你習慣于面向對象編程,你就已經在定義類型層次中領先了,然而,你仍然面臨著潛在的
威脅,因為程序員通常主要依據系統中的功能模塊考慮對象類,而忽略了它們在外部世界中所表示
的內容。如果你發現自己使用動詞而不是名詞來命名對象類型,那么你可能已經落入了這個陷阱。
下面的例子顯示了我們將在假期業務中使用的類型層次的部分結構(參見圖4 - 1)。它使用
U M L表示法,其中箭頭從子類指向超類。
圖4-1
84使用XML 高級編程
下載
客戶
提供者
個人客戶
公司客戶
旅游提供者
推薦提供者
飛機航線圖表
旅游車公司
飛機航線日程表
要了解更多有關U M L和表示法的信息,參見《Instant UML》(I S B N:1 - 8 6 1 0 0 - 0 8 7 - 1)。
你可以進一步細化這張示意圖,但是在本階段,保持它的簡明性有助于理解它要傳達的主
要信息,并且幫助你從用戶那里獲得反饋,說明他們是否正確理解了你要表述的概念。使用
Vi s i o等工具繪出這張示意圖是非常有價值的,它使你能夠擴展或壓縮細節的層次,以便將同一
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(35)