2. "Implementing QuantLib"の和訳
Chapter-IV Cash Flows and Coupons
4.1 The CashFlow Class
これまで通り、クラス階層の一番上の部分から始めたいと思います。‘CashFlow’クラスは、あらゆるキャッシュフローの為の基本的なインターフェースを提供します。このような抽象的な階層では、保有する情報は、当然ながら限られたものです。従って、提供されている inspectorメソッドも限られています。その内のひとつは、キャッシュフローの日付と金額を返すだけのものです。また別のメソッドは、キャッシュフロー日付を、実際の日付と、いちいち比較する手間を省く為(後で“aside”で説明する通り、整合性を保つためでもありますが)、与えられた日付に対してキャッシュフローがすでに発生したか否かを教えてくれます。最後に、もうひとつのメソッドは、CashFlowクラスが Acyclic Visitorパターンの役割を果たせるようにしています(下記[1]参照)。このクラスをどのように使うかは、後々の章で説明します。
この Libraryの初期の頃のバージョンでは、これらすべてのメソッドは CashFlowクラスの中で宣言されていました。後々のバージョンで、これら日付に関するメソッドは Eventクラスに移され、CashFlowクラスはこの Eventクラスから継承するように変更しました。(注:すみません、階層の一番上からの説明になっていませんでした。それでも、Cash Flowを取り扱うクラス階層の中で言えば、一番上に位置します。) Eventクラスは、もちろん Libraryの他の所でも再利用されています。この2つのクラスのインターフェースを、下記 Listing 4.1に示します。
Listing 4.1: Interfaces of the Event and CashFlow classes.
class Event : public Observable {
public:
virtual Date date() const = 0;
bool hasOccurred(const Date &d) const;
virtual void accept(AcyclicVisitor&);
};
class CashFlow : public Event {
public:
virtual Real amount() const = 0;
virtual void accept(AcyclicVisitor&);
};
Libraryは、簡単なインターフェースを、SimpleCashFlowクラスの中で実装しています。退屈で簡単な内容なので、ここでは詳しく説明しませんが、(コンストラクターが)日付と金額の情報を受け取ってインスタンスを生成し、date( )と amount( )メソッドを使って、その情報を取り出せるようになっています。もっと興味をそそるクラスとして、次のセクションのテーマである interest-rate couponsに進みます。
< Aside:支払い遅延の取扱い >/p>
Event::hasOccurred( )メソッドの実装は、極めて簡単で、日付の比較を行っているだけです。しかし、仮に、キャッシュフローの日付と、Evaluation Date(一般的には本日)が同じだった場合、どうするのか(本日発生する支払いを、この商品の現在価値計算に含めるべきか否か)については、どうすべきでしょうか? 答えは、使う人次第としか言いようがないでしょう。QuantLibでは、ユーザーがそれを選択できるように、いくつかの Global Setting(プログラムの全体設定)を用意しています。そこでの選択は、hasOccurred( )メソッドに bool変数を渡すことによって、任意に変更できるようになっています。
[1] R.C. Martin, Acyclic Visitor. In Pattern Languages of Program Design 3. Addison-Wesley, 1997.
<ライセンス表示>
QuantLibのソースコードを使う場合は、ライセンス表示とDisclaimerの表示が義務付けられているので、添付します。 ライセンス