2012-03-12 27 views
2

正如标题所示:创建函数来访问类变量是否是一种好的做法?创建函数来访问类变量是不是很好的做法?

我见过不少的代码块做类似如下的:

class MyClass { 
public: 
void setx(int a); 
void sety(int b); 
int read_x; 
int read_y; 

private: 
int x; 
int y; 

}; 

void MyClass::setx(int a) { 
x=a; 
} 

void MyClass::sety(int b) { 
y = b; 
} 

int MyClass::read_x() { 
return x; 
{ 

int MyClass::read_y() { 
return y; 
} 

因此而不是访问变量直接(MyClass.x),他们使用函数读取和设置变量值等。

这是一个标准或良好做法?

回答

4

是的,访问者函数被优先指导成员访问的原因有几个。它们提供了一个独特的接入点,更容易跟踪和调试。

例如,您可以在MyClass::setX()中设置单个断点,而不是在其中MyClass.x被更改的代码中的任何地方设置断点。

但是,虽然比直接成员访问更好,但访问器方法不是没有缺点,如果滥用。有关详细信息,您可以访问Getters and Setters are bad OO design?

+1

是的,访问器也减少了接口(公共方法)和实现(私有领域)之间的耦合。 – 2012-03-12 23:49:36

+0

有一个例外(国际海事组织):如果你有一个变量,你知道永远不需要警卫,这是一个简单的类型,然后继续,只是公开。添加函数来获取/设置它只是代码膨胀。 – 2012-03-12 23:49:46

+0

@EdS .:为了保持一致性,我添加了一个简单的访问器,它返回一个非''cont'参考,所以访问保持不变。 – Xeo 2012-03-12 23:53:03

1

是的,他们都可以,但是我也会说,你应该保持你的班级比你说的Java小,而不是你最终不会以类型为主的getter和制定者。

通常,一个类拥有一个(理想情况下是单个)状态(如果需要可以获得),并且具有理想情况下应该保持私有的实现。

2

而不是直接访问变量?绝对。创建一个编程接口层将您从这些内部变量本身的实现细节中分离出来。然后你为自己提供了额外的灵活性,比如创建有问题的类的模拟实现(用于测试),创建代理类(用于装饰功能,如日志记录等)

我会警告不要自动创建所有你可能不需要它们的地方。但这是一个不同的问题。

就像在健身房锻炼:这还给超过它需要;)

1

这是重要的,因为它的类从底层数据模型的界面分离。您经常会看到像您发布的示例这样的基本代码,并且起初很多代码看起来像是不必要的复杂因素。但是,它提供了一个(自我记录)框架,可以在不破坏通过定义的接口访问类的对象的代码的情况下更改对象的实现。

+0

绝对。很难解释它有多重要,直到你发现自己没有做过几千行;) – 2012-03-13 00:28:31

相关问题