2011-01-31 25 views
1

我有一个程序将它的信息存储在XML文件中。读入该文件并创建相应的对象模型。该对象模型具有树形层次结构。我们将称之为BigHierarchy的对象类型。添加到我的程序中的导入功能会破坏OOP封装。我如何恢复封装?

现在,我的程序有一个功能,允许用户导入另一个文件。所以,当他选择他希望导入的文件时,我在该文件中读取并构造另一个BigHierarchy类型的对象来表示导入文件。所以现在我有了原始的BigHierarchy对象和我需要合并的新对象。由于它是一个层次结构,因此某些数据是私有的,无法访问。

如果我无法访问私有数据,如何合并导入对象与原始对象?我应该使用什么技术?叶子节点是否应该与上层的朋友相处,这样我就能从上面看到完整的知名度?我是否应该为所有叶子和超载加运算符添加重载,以便我可以合并所有内容或者应该在每个级别中复制所有私有数据的成员函数。每个选项似乎都很麻烦。我如何以最好的方式解决这个问题?

+2

这两个对象都是BigHierarchy类的,所以你应该访问私有数据。我在这里错过了什么吗? – Naveen 2011-01-31 09:13:51

+0

BigHierarchy的私人成员拥有我无权访问的私人成员。 – hd112 2011-01-31 09:21:02

回答

0

要获得确切的设计,您需要先定义什么是您的合并策略,以防私人成员在其最原子级别之间发生冲突。

  1. 覆盖与最新
  2. 保留原始
  3. 合并更改

如果你去与方法1,那么你将会用新的一个现有的BigHierarchy。在这种情况下,您将需要允许设置私人成员的访问方法。这样封装不会受到影响。

如果您选择方法2,那么您根本不会碰到私人成员。

对于选项3,如果可能的话,向所有私有成员提供合并函数是明智的。相反,我会强制我的对象实现合并,并在合并时调用它传递新对象。

希望这会有所帮助。