2010-03-03 5 views
2

다른 유형의 객체를 반환하는 클래스를 포함 할 때 반환 된 객체 유형의 클래스 파일을 가져올 때 모범 사례가 확실하지 않습니다. 그래서, 세 가지 클래스는 별도의 파일에있는 경우 :객체 지향 코드의 중복 가져 오기

class file A imports class file B 
class file B imports class file C 
class B returns an object of type C to class A 

클래스 A는 또한 더 명시하기 위해 클래스 C를 가져와야하거나, 클래스 B에 의해 가져온 그 클래스 C를 가정 괜찮아, 그리고 간접적으로 A 급?

+2

이 언어가 아닌가요? 언어에 따라 "수입"개념이 적용되지 않을 수도 있습니다. –

+1

좋은 지적입니다. 중복 수입시 코드가 두 번 포함되지 않으며 포함 된 파일의 가져 오기가 포함 파일에 액세스 할 수있는 언어에 대한 질문을 좁혀 야합니다. – jmans

답변

1

IMHO, OO 디자인 관점에서 (내가 좋은 것은 아닙니다), 클래스 A가 클래스 C에 대해 특별한 것을 알 필요가없는 한 가져 오기는 필요하지 않습니다 (모듈이 아닌 텍스트). 예 : 클래스 A가 클래스/인터페이스 D의 객체에 의존 할 때, 이것은 (factory 메소드에서) B에 의해 반환 될 것입니다. 이것은 클래스 D의 인터페이스/인터페이스 C의 객체가 될 것입니다. 이것은 factory 메소드 디자인 패턴의 포인트입니다 - 브레이크 생성 된 객체의 구체적인 클래스와 필요한 인터페이스 사이의 의존성.

+0

맞습니다. 그러나 저는 실제로 그보다 더 기본적인 것을 얻으려고합니다. 프로그래머가 다른 파일에 포함 된 라이브러리에 의존 할 수 있다는 것을 알고있을 때 해당 코드에서 세 번째 라이브러리를 참조하지 않는 것이 합리적일까요? 이것은 약간의 종속성을 만들지 만, 아마도 합리적인 것입니다. – jmans

+0

다른 파일을 통해 종속성을 사용하는 경우 명시 적으로 지정하지 않으면 해당 종속성이 뒤에서 손상 될 수 있습니다. –

1

저는 이것이 언어와 구현에만 해당한다고 생각합니다.

#include를 사용하면 #include 파일의 복사 및 붙여 넣기와 같은 효과가 있습니다. 그래서 당신이 그것을 할 때 본질적으로 수입을 가져 오는 중입니다 ... 네임 스페이스의 엔티티와 충돌하지 않는 한 괜찮습니다. 그냥 각 # .h 파일에 #pragma 또는 #ifndef 섹션이 있는지 확인하십시오.

자바에서는 명시 적이어야합니다. 내 개인적인 경험을 통해 모든 유형의 선언을 사용해야합니다. 백엔드에 대한 확신이 없지만 적어도 내 IDE는 javac에서 직접 온 것으로 믿고 불평합니다.

+0

이 좋습니다. 이 경우 PHP에서 require_once에 대해 생각하고 있습니다. – jmans