2009-11-25 2 views
0

대부분 OO 개념 질문/상황 :상속보다 라이브러리를 맞춤 설정하는 더 좋은 방법은 없을까요?

나는 내 프로그램에서 사용할 수있는 소스 파일이있는 라이브러리를 가지고 있습니다. 필자는 필요에 따라 라이브러리를 맞춤화해야한다는 것을 깨달았습니다. 클래스 C에서 단일 함수 F의 동작을 수정해야하며 필요할 때 원본 라이브러리의 소스를 손상되지 않고 업그레이드 할 수 있어야합니다.

나는

myObj = new C(); 

의 모든 항목을 대체, 내가, C1은 C에서 상속 내 자신의 클래스를 만들어 내 소스 트리에 배치하고, 나는 그것이 맞는 볼 방법이 함수 F를 작성할 수 실현

myObj = new C1(); 

내 코드 전체에 걸쳐.

이 작업을 수행하는 '적절한'방법은 무엇입니까? 나는 내부 클래스의 라이브러리가 여전히 내 C1 :: F 대신 C :: F를 사용할 것이므로 문제가 있다고 의심합니다. 여전히 C : F를 참조 할 수 있다면 더 시원 할 것입니다. 내 코드에서 C1 :: F. 걱정하는 사람들을 위해

- 언어는 PHP5이고, 나는 좀 OOP 초보자 :

답변

1

나는 서브 클래스는 거의 외부 라이브러리에 기능을 추가하는 가장 좋은 방법이라고 생각 해요.

C 클래스의 모든 메서드를 래핑해야하는 decorator pattern이 대안입니다. (이 데코레이터 패턴에 대한 시간과 장소,하지만 난이이 아니라고 생각) 당신이 말하는

: 그 내부에 도서관이 여전히 대신 C : F를 사용합니다

로 내 C1 :: F

반드시 그렇지는 않습니다. C1 클래스의 인스턴스를 라이브러리 함수에 전달하면 메서드 F인 모든 개체는이고 여전히 C1::F 메서드를 사용합니다. C 클래스가 $this->F()을 호출하여 자신의 메서드에 액세스 할 때도 마찬가지입니다. 이는 여전히 C1 개체이기 때문입니다. 이 속성은 라이브러리의 코드 자체가 클래스 C새로운 객체를 인스턴스화 할 때이 적용되지 않습니다 물론

polymorphism라고합니다.

관련 문제