簡體   English   中英

如何在java中識別類中的不變量?

[英]How to identify invariant in a class in java?

我了解 Invariant 是什么,但我遇到的問題是從類中識別它。 不好解釋-當課堂上的老師向我們展示Java代碼並詢問我們什么是不變量時-這是我摔倒的時候,我不知道如何識別它。

再次 - 我知道它是什么 - 只是很難識別它。 如果你能解釋或給我一個提示如何做,我會很高興聽到。 謝謝你。

編輯:添加了示例圖片。 這里的不變量是什么,但對我來說重要的是為什么。

圖片

一個不變式適用於類的所有實例,無論如何。 查看您的示例以查找所有這些情況,例如,為類的每個實例初始化一個屬性。

不幸的是,沒有系統的方法來查看一段代碼並計算出它的不變量。 一種技術是考慮實例狀態可能無效的方法,然后檢查這些不會發生; 在這種情況下,使狀態“有效”的每個規則都是不變量。 但是你需要使用直覺和經驗來做到這一點。

對於您的示例,此類有兩個不變量:

  • 堆棧僅包含 1 到 10 范圍內的整數。
  • 堆棧底部的元素是整數 5。

很容易驗證構造函數是否建立了兩個不變量,並且addCard方法保留了它們:

  • 構造函數只將范圍內的數字 5 相加,而addCard僅將在范圍內的數字添加到堆棧中。
  • 數字永遠不會從堆棧中移除,數字只會添加到堆棧頂部,因此堆棧底部的 5(由構造函數放置在那里)將留在堆棧底部。

需要注意的是,構造函數和addCard方法是僅有的兩種更改實例狀態或其堆棧的方法,因此我們不必檢查任何其他代碼是否保留了不變量。 如果堆棧不是private那么它會有所不同; 其他代碼可以將超出范圍(或null )的數字放入堆棧,或者其他代碼可以從堆棧底部刪除 5。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM