处理组合关系中的变量

Handling variables in composition relationships

本文关键字:变量 关系 组合 处理      更新时间:2023-10-16

我目前正在重新设计一个c++项目,当具有"有一个"(组合)关系的类需要访问可能属于父类的变量时,我想知道应该如何处理变量,例如:

计算机对象有一个网卡对象。计算机对象有一个所有者变量。例如

class Computer {
        string get_owner(); // getter as an option?
    private:
        std::string owner = "baylesj";
        NetworkCard nic;
}
class NetworkCard {
    public:
       NetworkCard(Computer *parent);
       send_packet();
       broadcast_owner(send_packet(m_parent->owner)); // this is kind of ugly
    private:
        Computer *m_parent;
}

假设我在网卡中有一个函数需要所有者。当我在计算机中初始化时,是否最好将所有者作为网卡的成员变量传递,或者我是否应该在NetworkCard中有一个父指针,可以访问计算机的成员变量,Getter/Setter或其他关系?我知道这是相当普遍的做法,有一个指针到父在子,但这是一个好主意/适当的OOP?

**电脑的事情只是例如,IRL它是别的东西,所以不要太挂在它:)。

我看到您认识到尽量减少不必要的耦合是可取的。为此,可以将NetworkCard类设计为不知道父类的实现细节。下面是在网络构建时将名称传递给广播的一种方法:

class Computer {
    public:
        Computer(std::string const &owner) : m_Owner(owner), nic(owner)
        {
        }
    private:
        std::string m_Owner;
        NetworkCard nic;
};
class NetworkCard {
    public:
       NetworkCard(std::string const &owner)
       {
           broadcast_owner(owner);
       }
       send_packet();
       broadcast_owner(std::string const &owner);
    private:
};

如果您发现有太多这样的变量不能作为构造函数参数传递(我喜欢不超过两个或三个),那么您可能会发现组合是解决问题的错误工具。通常参数的数量很少,除非它实际上是一个"is-a"关系,在这种情况下继承可能是一个更好的工具。