Design question on virtual methods in QuantLib classes

Posted by Luca Berardi on
URL: http://quantlib.414.s1.nabble.com/Design-question-on-virtual-methods-in-QuantLib-classes-tp10845.html


Hi all

I have a question regarding the declaration of some methods in QuantLib classes.

Before asking the question I would like to describe my problem. I'm trying
to integrate my QuantLib-based pricers and models in the position-keeping
software being used in the bank where I work.

This is what I would like to do: I would like to derive my position-keeping
software classes from QuantLib "basic" classes, like e.g. YieldTermStructure,
BlackVolTermStructure, CapVolatilityStructure, and so on. In such a way I
would be able to trasparently use QuantLib classes in the code I write, when
porting my proprietary pricers and models to the bank position-keeping software.

But there is a problem in doing so: I would take as an example the class
YieldTermStructure, yet the same issue could go for many other QuantLib classes
as well. Basically the class YieldTermStructure only requires that I write
the discountImpl() method, which take as input a year-fraction. BUT -unfortunately-
the position-keeping software APIs only allow to compute discount factors
using dates (not year-fractions) as inputs.
I have temporarily solved this issue by writing a function converting a year
fraction to a date (once the day-counting convention has been specified).
But this is somewhat "inelegant", and also inefficient for day-counters where
a direct inversion formula could not be applied.

Neverthless, there could be a simpler approach: if YieldTermStructure methods
were all declared as virtual (like it always happens in Java) I could redefine
in my derived classes all the methods I need to, without worrying about if
the inputs I can use are dates or year-fractions. Unfortunately, however,
YieldTermStructure (and many other similar classes) declare as virtual only
discountImpl(), and not the other methods like discount(), zeroRate(), forwardRate()
and so on.
Is there a rationale for not declaring all the methods in an "abstract" class
-like YieldTermStructure- as virtual?

Sorry if I was bit long.
Thanks in advance.

Luca





__________________________________________________________________
TISCALI ADSL 1.25 MEGA
Solo con Tiscali Adsl navighi senza limiti e telefoni senza canone Telecom
a partire da  19,95 Euro/mese.
Attivala entro il 28 luglio, il primo MESE รจ GRATIS! CLICCA QUI.
http://abbonati.tiscali.it/adsl/sa/1e25flat_tc/