不變式與根物件

2022-09-08 18:24:07 字數 656 閱讀 7520

乙個大型的複雜專案而言,模型趨向於越來越大。 當模型發展到了某個規模,將 它作為整體來討論很困難,理解不同部件之間的關係和互動變得很困難。

因此,強化不變數通常也是有必要的。 不變數是在資料發生變化時必須維護的那些規則。 在許多物件持有正在發生變化的資料物件的引用時,不變數是很難實現和維護的

使用 根物件可能會將內部物件的臨時引用傳遞給外部物件,作為限制,當操作完成之後,外部物件不能再持有這個引用。 一種簡單的實現方式是向外部物件傳遞值物件的副本。 

在這些副本物件上發生了什麼將不再重要,因為它不會以任何方式影響到聚合的一致性。 

如果乙個聚合中的物件被儲存到資料庫中,可以通過查詢來獲得的應該只有根物件。 其他的物件只能通過從根物件出發導航關聯物件來獲得。 聚合內的物件可以被允許持有對其他聚合的根物件的引用。 根實體擁有全域性的識別符號,並且有責任維護不變數。 內部的實體擁有內部的識別符號。

問題是現在客戶程式必須先擁有乙個對根的引用。 對大型的應用而言,這會變成乙個問題,因為我們必須確保客戶程式始終持有所需要物件的引用,或者持有另乙個物件的引用,這個物件持有所需要物件的引用。 在設計中使用這樣的規則將強制要求物件持有一系列它們並不需要持有的引用。 這增加了耦合性,建立了一系列並非真正需要的關聯。

------ddd quikly

迴圈不變式

先看引用自由cay horstmann寫的 computing concepts with c essentials 3rd 一書的,用以計算a n的例子 double power double a,int n else return r 粗看一下,用此方法計算a n時比原始方法進行迴圈次數要少很多...

迴圈不變式

在演算法中,有乙個重要的概念就是迴圈不變式,迴圈不變式主要用來幫助我們理解演算法的正確性。關於迴圈不變式,我們必須證明三條性質 1.初始化 迴圈的第一次迭代之前,它為真。2.保持 如果迴圈的某次迭代之前它為真,那麼下次迭代之前它仍為真。3.終止 在迴圈終止時,不變式為我們提供了乙個有用的性質,該性質...

插入排序與迴圈不變式

首先,給出本文要使用的例子,對乙個陣列a進行公升序的插入排序 演算法的c語言描述 cpp view plain copy void insersort inta,intlength a j 1 key 迴圈不變式是用於檢驗演算法的正確性的。在演算法中,有一些特定的性質 也是我們我們實現這個演算法最關...