2011. 6. 20. 16:10 quantlib/Implementation
Aside: a friend in need
PiecewiseYieldCurve 선언을 보면서 당신은 이말을 할지도 모른다. "Wait a minute, wasn't friend considered harmful?" 답은 yes - friend 선언은 encapsulation을 깨고 클래스의 tight coupling을 강요한다.
그러나 대안을 살펴보자. Bootstrap 클래스는 curve data로의 write 접근이 필요하다. 이것을 friend로 선언하는데다가 이것에 세가지 접근 방법을 준다. 반면 우리는 데이터를 Bootstrap instance로 넘겨야 할지도 모른다; 그러나 이것은 두개의 클래스를 tightly coupled할지도 모른다(the curve internals는 bootstrap 코드를 바꾸지 않으면 바뀔수 없다). 반면 public interface를 통해 curve data를 노출해야될지도 모른다; 그러나 이것은 encapsulation을 더욱 위반하게 된다(우리는 write 접근이 필요하다는 것을 기억하라). 우리는 데이터를 각각의 클래스에서 encapsulate하거나 접근을 제어하기 위해 private 상속을 사용할지도 모른다. 릴리즈 1.0에서 우리는 friend 선언이 두개의 대안보다 더 좋다고 생각했다. 세번째(and best) 대안이 다음 릴리즈에서 구현될지도 모른다.
그러나 대안을 살펴보자. Bootstrap 클래스는 curve data로의 write 접근이 필요하다. 이것을 friend로 선언하는데다가 이것에 세가지 접근 방법을 준다. 반면 우리는 데이터를 Bootstrap instance로 넘겨야 할지도 모른다; 그러나 이것은 두개의 클래스를 tightly coupled할지도 모른다(the curve internals는 bootstrap 코드를 바꾸지 않으면 바뀔수 없다). 반면 public interface를 통해 curve data를 노출해야될지도 모른다; 그러나 이것은 encapsulation을 더욱 위반하게 된다(우리는 write 접근이 필요하다는 것을 기억하라). 우리는 데이터를 각각의 클래스에서 encapsulate하거나 접근을 제어하기 위해 private 상속을 사용할지도 모른다. 릴리즈 1.0에서 우리는 friend 선언이 두개의 대안보다 더 좋다고 생각했다. 세번째(and best) 대안이 다음 릴리즈에서 구현될지도 모른다.
'quantlib > Implementation' 카테고리의 다른 글
4. Cash flows and coupons (0) | 2011.06.27 |
---|---|
Aside: Cinderella method (0) | 2011.06.27 |
TTP: Template template parameter (0) | 2011.06.20 |
Aside: twin classes (0) | 2011.06.20 |
Aside: symmetry break (0) | 2011.06.19 |