首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何保持封装性?

问如何保持封装性?
EN

Stack Overflow用户
提问于 2014-03-15 23:53:07
回答 2查看 50关注 0票数 1

让我们想象一个图结构。每个节点都有输入和输出,一个节点的输出可以通过连接连接到另一个节点输入。如下所示:

代码语言:javascript
复制
public class Node
{
    public IReadOnlyList<Input> Inputs
    {
        get { ... }
    }

    public IReadOnlyList<Output> Outputs
    {
        get { ... }
    }
}

public class Connection
{
    public Connection(Input input, Output output)
    {
        ...
    }
}

我想将这个结构存储在某种文件中。如果我想存储连接,我必须获取信息,哪个节点是输入和输出的所有者-否则我以后将无法恢复它。

最简单的方法是将节点存储在输入和输出中。但是IMO破坏了封装,因为输入和输出不应该知道使用它们的节点的任何信息。另一种解决方案是强制搜索所有节点,以找到一个拥有这些元素的节点。但是它太脏了,我不喜欢这个解决方案。

我如何才能在不破坏封装的情况下解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2014-03-16 00:50:48

假设两个节点之间的连接与输入和输出之间的连接一样多,那么将这两个节点以及输入和输出存储在connection对象中可能是合理的。这就是:

代码语言:javascript
复制
public class Connection
{
    public Connection(Node inNode, Input input, Node outNode, Output output)
    {
        ...
    }
}

这是比理想情况下更多的构造函数参数,但是您描述Connection类的方式确实表明它应该知道它正在连接哪些节点以及要使用哪些输入和输出。

票数 1
EN

Stack Overflow用户

发布于 2014-03-16 01:29:34

查看你的代码,这是我想到的:

​

(方框表示连接对象)

如果你不想改变你的代码,这是一个可能的文件结构:

代码语言:javascript
复制
#CONNECTIONS
0 16
1 21
2 20
3 17
4 18
5 19
6 12
7 14
8 15
9 13
10 11
#NODES
0 16 12 14,9 10
1 11 13,8 2 7
3 17 21, 6
4 18,0
5 15,5 3
6 19 20,1 4

#CONNECTIONS部分:

存储输入输出边的id。当然,您可以添加有关边的更多信息(weight...etc)。就像这样

代码语言:javascript
复制
10 11 0.4238 82 "weight"

#NODES部分:

代码语言:javascript
复制
node_id <inputs>*,<outputs>*

为了加载它,您可以将边存储在字典中,并可以稍后将它们添加到相应的节点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22426056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档