繁体   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