[英]How to identify invariant in a class in java?
我了解 Invariant 是什么,但我遇到的問題是從類中識別它。 不好解釋-當課堂上的老師向我們展示Java代碼並詢問我們什么是不變量時-這是我摔倒的時候,我不知道如何識別它。
再次 - 我知道它是什么 - 只是很難識別它。 如果你能解釋或給我一個提示如何做,我會很高興聽到。 謝謝你。
編輯:添加了示例圖片。 這里的不變量是什么,但對我來說重要的是為什么。
一個不變式適用於類的所有實例,無論如何。 查看您的示例以查找所有這些情況,例如,為類的每個實例初始化一個屬性。
不幸的是,沒有系統的方法來查看一段代碼並計算出它的不變量。 一種技術是考慮實例狀態可能無效的方法,然后檢查這些不會發生; 在這種情況下,使狀態“有效”的每個規則都是不變量。 但是你需要使用直覺和經驗來做到這一點。
對於您的示例,此類有兩個不變量:
很容易驗證構造函數是否建立了兩個不變量,並且addCard
方法保留了它們:
addCard
僅將在范圍內的數字添加到堆棧中。 需要注意的是,構造函數和addCard
方法是僅有的兩種更改實例狀態或其堆棧的方法,因此我們不必檢查任何其他代碼是否保留了不變量。 如果堆棧不是private
那么它會有所不同; 其他代碼可以將超出范圍(或null
)的數字放入堆棧,或者其他代碼可以從堆棧底部刪除 5。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.