저는 커다란 C++ 프로젝트를 사용하여 제조 공정을 자동화하는 제조 공장에서 일합니다.중첩 클래스의 C++ 릴레이 멤버 함수?
필자는 불필요하게 길게 코드를 작성하는 것으로 보이는 특정 사례를 보았으며이 연습이 사용되는 구체적인 이유가 있는지 궁금해하고있었습니다.
이 연습을 보여주는 간단한 예제는 아래를 참조하십시오.
첫 번째 파일 :
class A {
private:
int a;
public:
int get_a()
{ return a; }
void set_a(int arg)
{ a = arg; }
};
두 번째 파일 :
class B {
private:
int b;
public:
int get_b()
{ return b; }
void set_b(int arg)
{ b = arg; }
};
세 번째 파일 :
class C {
private:
A obj1;
B obj2;
public:
int get_a()
{ return obj1.get_a(); }
int get_b()
{ return obj2.get_b(); }
void set_a(int arg)
{ obj1.set_a(arg); }
void set_b(int arg)
{ obj2.set_b(arg); }
};
이 크게 감소 할 수 디자인 철학에 약간의 변화처럼 날 것으로 보인다 제 3 파일의 코드 양. 이런 식으로 뭔가 :
class C {
public:
A obj1;
B obj2;
};
는 A
및 B
클래스는 각 안전하게 점점 자신의 멤버 변수의 설정을 처리하기 때문에 obj1
및 obj2
에서, C
클래스 public
멤버 안전하지 않은 될 것 같지 않습니다 수 가졌어요.
나는이 방법은 함수를 호출하는 C
클래스의 인스턴스가 대신 obj.get_a()
의 obj.obj1.get_a()
같은 것을 할 필요가 있다는 것입니다 그 일을 생각할 수있는 유일한 단점하지만이 것보다 불편의 훨씬 적은 것 같아 개인 A
및 B
개체 인스턴스가 C
클래스에 있고 모든 수동 멤버 함수를 "릴레이"해야합니다.
이 간단한 예제에서는 코드가 많지 않지만 우리 회사에서 사용하는이 대형 프로젝트의 경우 말 그대로 수만 개를 추가합니다. 줄의 코드입니다.
내가 누락 된 항목이 있습니까?
getters와 setters는 약간의 냄새가 있지만 원래 개발자가 [Demeter의 법칙] (https://en.wikipedia.org/wiki/Law_of_Demeter)을 적용한 것처럼 보입니다. 거기에 장단점이 있습니다. –
단점은 분명해 보입니다. 더 많은 코드가 추가되었습니다. 죄수 팀은 무엇입니까? (이미 언급 한 것, 즉'obj.obj1.get_a()'과'obj.get_a()') – ImaginaryHuman072889
위키피디아 페이지는 꽤 잘 설명합니다. 감사! – ImaginaryHuman072889