2012-12-18 4 views
-1

기본 OOP 개념에 대해 약간 혼란 스럽습니다. 이것은 OO 프로그래밍 및 디자인에 대한 초보자 질문의 다소입니다. 아마도이 질문에 더 나은 표현 방법이있을 것입니다. 그러나 더 명확하게 설명하려고 노력할 것입니다 ...구성원 개체가 해당 개체를 소유 한 클래스의 메서드를 호출해야합니까?

'Engine'클래스가 인 경우 'Subsystem'이라는 구성원 개체의으로 구성되었지만 서브 시스템 은 엔진의 메서드를 호출 할 수 있어야합니다. 순환 종속성입니까?

내 '엔진'클래스에는 다른 엔진 하위 시스템에서 액세스 할 수 있어야하는 'Window'개체가 있습니다. 내 독창적 인 계획은 엔진 클래스 내에서 해당 윈도우 객체에 대한 참조를 반환하는 함수를 만드는 것이었지만 엔진 서브 시스템 객체 중 하나에서 함수를 호출하는 방법을 알지 못했습니다. 'Engine'클래스는 'Window'객체와 'Subsystem'객체로 구성되며 이러한 클래스 중 하나 사이에는 상속 관계가 없음을 명심하십시오.

엔진이 # 서브 시스템을 포함하고 서브 시스템이 엔진을 # 포함하면 원형 의존성이 발생합니다. 그렇습니까? 'Subsystem'객체의 생성자를 통해 'Window'객체를 전달해야합니까? 모든 'Engine'객체에 대한 참조를 모든 하위 시스템에 전달해야합니까? 내 서브 시스템이 OOP에 대한 설계 또는 이해의 결함을 '소유하고있는'클래스에 액세스하기를 원합니까?

답변

1

나는 Law of Demeter을 적용하고 창을 생성자에서 직접 전달합니다. 좋은 설계 원칙에 따라 엔진을 하위 시스템에 노출시키지 마십시오. 향후 다른 곳에 Window를 배치 할 수 있습니다.

+0

: 당신은 객체 및 하위 객체에서 모두 액세스 할 수 있어야합니다 특정 기업이있는 경우 circular dependency

, 당신은 순환 종속성, 예를 깨고 다른 개체에이 개체를 추출 할 수 있습니다 시원한. 새롭고 독학적인 프로그래머로서 몇 가지 핵심 개념을 저에게 설명해 줄 수 있습니다. 일반적으로 나는 서브 시스템에 대한 엔진 호출 메소드를 가지고 있었지만 다른 방법은 사용하지 않았습니다. 이 문제는 엔진의 두 개 이상의 하위 시스템 (하위 개체)이 서로 어떻게 통신해야하는지에 대한 이해가 부족하기 때문에 발생합니다. 현재 상황에서는 렌더링 및 이벤트 하위 시스템 모두 창이 액세스해야합니다. 이러한 '사물'세 가지 모두 모 놀리 식 엔진 클래스의 하위 객체입니다. 그래서 내 엔진이 윈도우의 위치를 ​​필요로하는 서브 시스템에 전달하도록해야합니까? – MrKatSwordfish

+1

예. 내 견해로, 당신은 하위 시스템이 필요로하는 Window와 다른 의존성을 통과시켜야합니다. 대안으로, 의존성을 마지막 순간까지 전달하는 것을 연기 할 수 있습니다. 말할 것도없이 합리적이고 교육 된 답변을 제공하기 위해 각 구성 요소의 요구 사항과 책임에 대해 더 많이 이해해야합니다. –

1

예, 순환 의존성입니다. 당신이 현재 가지고 것은 : no circular dependency

+0

답변을 주셔서 감사합니다, 다이어그램도 많이 도움이됩니다! 나의 현재의 경우, 나는 '엔진'이 다양한 서브 시스템을위한 포괄적 인 집이라고 생각하고 있었다. 그런 식으로 엔진 외부의 어떤 것이 완료되어야 할 때마다 엔진이 엔진을 요구하고 엔진이 해당 작업을 적절한 서브 시스템에 위임합니다. 문제는 엔진 서브 시스템을 서로 상호 작용시키는 방법을 잘 모르는 것입니다 (예를 들어, 윈도우 이벤트를 처리하는 객체가 윈도우 객체를 볼 필요가 있습니다) ... – MrKatSwordfish

+0

... 현재 내 디자인은 다음과 같습니다. 당신이 올린 두 번째 다이어그램처럼. 'subsystem'과 'window'는 모두 'engine'객체의 하위 객체입니다. 하지만 내가 겪어 온 문제는 '서브 시스템'이 '윈도우'하위 객체가 있는지조차 알지 못한다는 것입니다.'서브 시스템'서브 객체가 '윈도우'서브 객체의 기능성에 접근하기 위해서는 그것이 생성 될 때 윈도우 서브 객체에 대한 참조를 전달해야 하는가? (다른 답변 중 하나가 제안했다.) – MrKatSwordfish

+1

생성자 (또는 설정자)로부터 의존성을 전달하면 @icepack이 그렸던 디자인에 착륙 할 수있다. –

관련 문제