簡體   English   中英

添加到我的程序中的導入功能破壞了OOP封裝。 如何恢復封裝?

[英]Import feature added to my program breaks OOP encapsulation. How do I restore encapsulation?

我有一個程序將其信息存儲在XML文件中。 讀取該文件,並創建相應的對象模型。 對象模型具有樹層次結構。 我們將對象類型稱為BigHierarchy。

現在,我的程序具有允許用戶導入另一個文件的功能。 因此,當他選擇他要導入的文件時,我讀了該文件,並構造了另一個BigHierarchy類型的對象來表示導入文件。 因此,現在我有了原始的BigHierarchy對象和需要合並的新對象。 由於它是一個層次結構,因此某些數據是私有的並且不可訪問。

如果我無權訪問私有數據,該如何將導入對象與原始對象合並? 我應該使用什么技術? 葉子節點是否應該與更高的朋友打交道,這樣我就可以從頂部完全看到它們? 我應該添加重載所有葉子和重載加運算符,以便可以合並所有內容,還是應該在復制所有私有數據的每個級別中使用成員函數。 每個選項似乎都很混亂。 我該如何以最好的方式做到這一點?

為了進行精確的設計,您需要首先定義什么是合並策略,以防私有成員之間在其最原子級別上發生沖突。

  1. 用最新覆蓋
  2. 保持原始
  3. 合並變更

如果采用方法1,則將用新方法覆蓋現有的BigHierarchy。 在這種情況下,您將需要允許設置私有成員的訪問方法。 這樣封裝不會受到影響。

如果您選擇方法2,那么您將根本不會碰私人成員。

對於選項3,如果可能的話,向所有私有成員提供合並功能是明智的。 相反,我將授權我的對象實現合並,並在合並時通過新對象調用它。

希望這可以幫助。

暫無
暫無

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

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