软件抽象一书的第137页有这些非凡的陈述:
整数实际上并不是很有用。如果你认为你需要它们, 再想想;通常有一个更抽象的描述匹配 这些属性更好。只是因为整数出现在问题中 域名并不意味着他们应该这样建模。想一想 无论整数是否必要,请问自己属性是什么 实际上依靠。例如,一种通信协议 数字,它的消息可能只依赖于不同的数字;要么 它可能依赖于它们增加;或者甚至可能完全被命令。 在这些情况下,都不应使用整数。
哇!
这很重要。我想深刻理解这一点。
为了帮助我理解,我创建了两个版本的通信协议。
第一个版本使用Int数据类型:
sig Message {
number: Int
}
第二个版本没有:
sig Message {
number: Number
}
sig Number {}
第二个版本更抽象吗?它是如何更抽象的?它是否更抽象,因为Number与数据类型无关?第一个版本不太抽象,因为它指定了数据类型(Int)?
数据类型是抽象的敌人吗?
答案 0 :(得分:1)
不,第二个也不是更好。假设您的消息没有完全排序,但只是部分订购。那么关键是,不是为每条消息分配索引,而是更好地明确消息的部分排序:
sig Message {follows: set Message, ...}