我FOO()在类A中有一个方法,它从类的数据成员中获取其参数输入B(假设它们是两个浮点数和一个int).我理解这一点的方式,通常更好地实现这一点,如:
A->FOO1(B, other_data_x)
Run Code Online (Sandbox Code Playgroud)
而不是
A->FOO2(B.member1, B.member2, B.member3, other_data_x).
Run Code Online (Sandbox Code Playgroud)
我收集了一个,但不是唯一的优点是它留下了B访问哪些成员的细节,FOO1()因此有助于隐藏实现细节.
但我想知道的是,这是否真正引入了类A和之间的额外耦合B.类A在前者的情况下必须知道类B存在(通过类似include class_B_header.h),如果成员B变化或移动到不同的类或类B被完全消除,你需要修改A和FOO1()相应.相比之下,在后一种方法中,FOO2()并不关心类是否B存在,实际上它关心的是它提供了两个浮点数(在这种情况下由B.member1和组成B.member2)和一个int(B.member3).可以肯定的是,在后一个示例中也存在耦合,但是这种耦合在任何地方都可以处理FOO2()被调用或任何类正在调用FOO2(),而不是在A或的定义B.
我想这个问题的第二部分是,是否有解耦的好办法A,并B进一步当我们要实现类似的解决方案FOO1()?
我有一个C背景,并且是C++的新手.我有一个基本的设计问题.我有一个班级(我称之为"厨师"b/c我的问题似乎与此类似,无论是在复杂性还是问题方面)基本上都是这样的
class chef
{
public:
void prep();
void cook();
void plate();
private:
char name;
char dish_responsible_for;
int shift_working;
etc...
}
Run Code Online (Sandbox Code Playgroud)
在伪代码中,这可以通过以下方式实现:
int main{
chef my_chef;
kitchen_class kitchen;
for (day=0; day < 365; day++)
{
kitchen.opens();
....
my_chef.prep();
my_chef.cook();
my_chef.plate();
....
kitchen.closes();
}
}
Run Code Online (Sandbox Code Playgroud)
这里的厨师班似乎是一个怪物类,并有可能成为一个.厨师似乎也违反了单一的责任原则,所以我们应该有这样的事情:
class employee
{
protected:
char name;
int shift_working;
}
class kitchen_worker : employee
{
protected:
dish_responsible_for;
}
class cook_food : kitchen_worker
{
public:
void cook();
etc...
}
class prep_food : kitchen_worker
{
public:
void prep();
etc... …Run Code Online (Sandbox Code Playgroud)