ArchitectureColoredPainting/元素改变导致结构性变化是否安全的证明.md

3.5 KiB
Raw Permalink Blame History

图层删除

当删除一个节点时,该节点一定满足且只满足以下条件中的一条:

  1. 是一个Leaf节点引用了其他的Element
  2. 是一个Folder节点没有GroupElement引用没有引用任何其他节点因为是Folder
  3. 是一个Folder节点存在对应的GroupElement引用。

其中对于第1条由于Leaf节点被删除只影响其父亲Folder的属性所以显然在删除Leaf节点时是绝对安全的。

对于第2条对于其父亲Folder其被删除只影响其父亲Folder的属性所以不会影响其父亲对于其孩子有可能存在以下情况

  1. 孩子中不存在任何被引用的情况:删除安全;
  2. 孩子中存在Folder节点被GroupElement引用不安全需要手动将情况转换为第1条后才可以删除。

对于第3条必须首先手动解除其本身的引用然后将转变为第2条。

图元删除

显然无论是什么种类的图元删除一个图元会影响到的元素只有引用它的图层所以我们将SimpleElement与GroupElement合并成一种情况讨论。

当删除一个图元时,该图元一定满足且只满足以下条件中的一条:

  1. 是一个GraphicElement未被其他图层引用
  2. 是一个GraphicElement被其他图层引用。

对于第1条删除绝对安全。

对于第2条将引用关系手动解除后删除安全。

图层移动

条件分析

图层移动时,显然,被移动的节点只影响它本身及它的子图层, 移动的目标节点只影响它本身及它的父图层,那么:

(1) 被移动的图层一定满足且只满足以下条件中的一条:

  1. 是一个Folder节点无对应的GroupElement引用子节点无引用GroupElement
  2. 是一个Folder节点无对应的GroupElement引用子节点存在引用GroupElement
  3. 是一个Folder节点存在对应的GroupElement引用
  4. 是一个Leaf节点引用了GroupElement
  5. 是一个Leaf节点未引用GroupElement。

(2) 目标FolderLayer一定满足且只满足以下条件中的一条

  1. 自身无对应的GroupElement引用无父节点有GroupElement引用
  2. 自身无对应的GroupElement引用存在父节点有GroupElement引用
  3. 自身存在对应的GroupElement引用。

显然,以上条件的全组合可以覆盖所有情况。 由于:

  • (1) 1(2) 中的任一条件进行组合显然是绝对安全的;
  • (1) 3 中自身提供的GroupElement并不会影响移动
  • (1) 5(2) 中的任一条件进行组合显然是绝对安全的;
  • (1) 中的任一条件(2) 1 进行组合显然是绝对安全的。

所以接下来对于除去以上情况的所有组合情况进行讨论。

讨论证明

(1) 2 - (2) 2

当且仅当被移动的图层的子节点引用的GroupElement 与 目标图层父节点提供的GroupElement 相同时,移动不安全。

(1) 4 - (2) 2

当且仅当被移动的图层引用的GroupElement 与 目标图层父节点提供的 GroupElement 相同时,移动不安全。

(2) 3 的特殊讨论

当且仅当自身提供的GroupElement 被 被移动图层或其子节点引用时需要处理其自身情况否则无视其自身提供的GroupElement(2) 1(2) 2 视为同情况处理。

结论

当且仅当被移动的图层或其子节点所引用的GroupElement 与 目标图层或其父节点所提供的GroupElement 相同时,移动不安全;其余情况均安全。