2012-10-05 28 views
3

對於OOP,是不可變的和不變的同義詞嗎?對於OOP,是不可變的和不變的同義詞?

我有一種模糊的感覺,存在差異,但我不確定。

我認爲不可變通常應用於對象,而不變則通常應用於屬性/值。

在這兩種情況下,對象或變量將保持未修改和「真實」,所以它們看起來非常相似。

感謝任何反饋,因爲我正在努力提高對這些術語的理解的準確性,我想我忽略了細微的差異。

回答

4

不知道這些是否是正確的定義,但對我來說「不可變」意味着數據結構不會改變,而「不變」是一個不會改變並保持爲真的設置條件 (但它不相關到特定的數據實例)

現在使用不可變的數據結構有助於確保不變量保持爲真,因爲它們不會變異,它們不會突然破壞之前爲真的不變量。

+0

+1,因爲它基本上總結了它,只是它們都與特定的數據實例有關。 –

+0

不變量的一些例子是:is_positive,x.is_positive意味着y.is_positive,colour.is_blueish –

0

不可變指的是一個對象在其生命週期中不會改變。

  • 一個不可變的字符串。如果連接,它會創建一個新的字符串。原來的一個沒變。

不變量是保證不會在指定的時間內發生變化。他們不必顯式地作爲屬性或值存在。

  • 對象必須處於有效狀態,在任何時候。
  • 對象必須處於狀態-X才能執行操作-Y。
  • 如果調用操作-X,則保證該對象處於狀態-X。
  • 實體可以是公司或人員,但不能同時存在。
  • 文件不能同時打開和關閉。
+0

-1,因爲不明白關於不變量的位(我知道它們是什麼)。持續時間與它無關,除非它是與時間有關的不變量。 –