数据类型是抽象的敌人吗?

时间:2017-03-21 20:23:00

标签: alloy

软件抽象一书的第137页有这些非凡的陈述:

  

整数实际上并不是很有用。如果你认为你需要它们,   再想想;通常有一个更抽象的描述匹配   这些属性更好。只是因为整数出现在问题中   域名并不意味着他们应该这样建模。想一想   无论整数是否必要,请问自己属性是什么   实际上依靠。例如,一种通信协议   数字,它的消息可能只依赖于不同的数字;要么   它可能依赖于它们增加;或者甚至可能完全被命令。   在这些情况下,都不应使用整数。

哇!

这很重要。我想深刻理解这一点。

为了帮助我理解,我创建了两个版本的通信协议。

第一个版本使用Int数据类型:

sig Message {
    number: Int
}

第二个版本没有:

sig Message {
    number: Number 
}    
sig Number {}

第二个版本更抽象吗?它是如何更抽象的?它是否更抽象,因为Number与数据类型无关?第一个版本不太抽象,因为它指定了数据类型(Int)?

数据类型是抽象的敌人吗?

1 个答案:

答案 0 :(得分:1)

不,第二个也不是更好。假设您的消息没有完全排序,但只是部分订购。那么关键是,不是为每条消息分配索引,而是更好地明确消息的部分排序:

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