2017-03-21 9 views
0

ページ137は、これらの顕著文ました:データ型は抽象化の敵ですか?本<em>ソフトウェア抽象化</em>の

整数は実際には非常に有用ではありません。あなたがそれらが必要だと思うなら、 をもう一度考えてください。 のプロパティをよりよく一致させる、より抽象的な記述がしばしばあります。なぜなら、整数が問題 に現れるということは、そのようにモデル化されるべきではありません。 整数が必要かどうかを調べるには、 が実際に依存しているプロパティーを自分自身に問い合せてください。例えば、 がそのメッセージに番号を付ける通信プロトコルは、区別されている数字にのみ依存することができます。または それはそれらに依存するかもしれません。または完全に注文されていることさえあります。 これらのいずれの場合も整数は使用されません。

ワウ!

これは重要です。私はこれを深く理解したい。

私の理解を助けるために、私は通信プロトコルの2つのバージョンを作成しました。

最初のバージョンはintデータ型を使用しています。

sig Message { 
    number: Int 
} 

番目のバージョンがありません:

sig Message { 
    number: Number 
}  
sig Number {} 

は、より抽象的な番目のバージョンですか?どのように抽象的ですか? Numberはデータ型に結びついていないので、より抽象的ですか?最初のバージョンはデータ型(Int)を指定するため抽象度が低いですか?

データ型は抽象化の敵ですか?

答えて

1

いいえ、2番目は良くありません。あなたのメッセージが完全に注文されたわけではありませんが、部分的にしか注文されていないとします。つまり、各メッセージにインデックスを割り当てるのではなく、メッセージの部分的な順序付けを明示的に指定する方がよいでしょう:

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