2017-03-21 34 views
0

137頁的書軟件抽象有這些顯着的語句:數據類型是抽象的敵人嗎?

整數實際上是沒有多大用處。如果你認爲你需要他們, 再想一想;通常有更抽象的描述更好地匹配 屬性。僅僅因爲整數域出現在問題 域中並不意味着它們應該被建模。要計算出 是否需要整數,請問問自己 實際所依賴的屬性。例如,其編號爲其消息的通信協議可能僅依賴於不同的號碼;或者它可能依靠它們增加;或者甚至是完全有序的。 在這些情況下都不應使用整數。

哇!

這很重要。我想深刻理解這一點。

爲了幫助我理解,我創建了兩個通信協議版本。

第一個版本使用int數據類型:

sig Message { 
    number: Int 
} 

第二個版本不:

sig Message { 
    number: Number 
}  
sig Number {} 

是第二個版本更抽象的?它是如何更抽象?它是更抽象的,因爲數字不綁定到數據類型?第一個版本不太抽象,因爲它指定了一個數據類型(Int)?

數據類型是抽象的敵人嗎?

回答

1

不,第二是沒有更好的。假設你的消息沒有完全排序,但只是部分排序。然後重點是,與其給每個消息分配一個索引,你最好明確消息的部分排序:

sig Message {follows: set Message, ...}