我有一个C++架构设计问题。我试图在电路模拟器上工作,我已经定义了3个类。节点类、组件类和电路类。下面是这些类的简化布局
https://gist.github.com/Nick0412/0b9a0ba8848cb5225d5bd663dad8fd77
现在我的印象是,当我创建一个特定的组件,比如说电阻,它将继承组件类。但是,当我在电路中添加一个任意的组件时,我希望电路根据添加的是哪种组件来做特定的事情。
所以我有两个问题。首先,访问者类型模式是否是解决这一问题的最合适方法?第二,是否有人对这个布局是否合理有任何反馈?
编辑:
我的描述不够清楚,这是我的错。仅就上下文而言,我将在这里链接存储库,https://github.com/Nick0412/Circuit。
长话短说,我一直试图从https://www.swarthmore.edu/NatSci/echeeve1/Ref/mna/MNA5.html等资源中了解改进的节点分析(MNA)。
在此基础上,我的程序思维过程如下。
所以我认为这主要涉及电路求解器如何工作的基本思想。现在是更具体的细节。因此,为了像上面描述的那样设置矩阵A,在我看来,我有一个电路类,它包含一组没有重复的组件,例如
// circuit.h
class Circuit
{
private:
std::unordered_set<Component*> m_components;
// ... public methods
};
现在,组件应该是所有实际组件(电阻器、盖帽、电感)继承的基类。组件类应该非常小,并且只保存所有组件共享的数据,例如附加到其中的节点列表。
// component.h
class Component
{
private:
std::unordered_set<Node*> m_nodes;
// ... public methods
};
组件继承的示例
// resistor.h
class Resistor : public Component
{
private:
double m_resistance;
// ... public methods
};
我设计的节点类非常简单,我在这里不包括它,但是可以在回购中找到它。因此,要向电路中添加一个组件,用户可能会执行以下操作
// Circuit::addComponent(Component* c, Node* n1, Node* n2)
Circuit c1;
Node* n1 (new Node());
Node* n2 (new Node());
// 10 is suppose to be resistance in ohms that we init r with
Resistor* r (new Resistor(10));
c1.addComponent(r, n1, n2);
// add some other components here ...
// solve the circuit for DC (direct current) state lets say
c1.solve();
因此,当我们调用add组件时,它将组件添加到电路中,并将节点添加到组件中。但是正如您所看到的,由于addComponent采用了一个通用组件,因此可能很难更新电路,因为我们可能想知道要添加的特定组件。这就是为什么我询问访客模式的原因。如何适当地向电路中添加通用组件并进行更新?
很抱歉,这个冗长的帖子,我希望它消除了任何误解,如果没有,我可以继续增加它。谢谢。
发布于 2019-12-03 15:22:30
我只想简单地将电阻、电容器等定义为component
的子类.因为它们通常都是“可以连接到电路中的东西”。不要过分抽象事物。
还有..。“节点”是电路设计术语中通常使用的词吗?相对于,比如说,“电线?”
发布于 2019-12-03 16:10:13
与其侧重于面向对象的电路分析方法,不如将复杂元件分解为等效的基本元件,基于数学模型的设计,参数eqv等,从基本电路开始,但以后可扩展。
https://stackoverflow.com/questions/59160172
复制相似问题