Thanks Luc and Ted,
that's clear enough.
I'm looking forward to keep on working on linear operators and iterative solvers when I'm back.
Sebastien

Le 14/07/11 10:24, Luc Maisonobe a écrit :
Hi Sébastien,

Le 14/07/2011 09:44, Ted Dunning a écrit :
Because when the interface changes, an abstract class can add default
implementations (even if the implementations only throw unimplemented
operation exceptions).

That means that code that has used the abstract class won't have to break.
  If you change an interface, the implementing code inevitably breaks.

To explain a little further what Ted means above, [math] tries to keep compatibility between releases, except for major releases. We have already been hit by interfaces problems due to this management rule: we did a wrong design on interfaces, but could not fix our errors without breaking compatibilities. With abstract classes, when the error was simply something forgotten, it is easy to add without breaking existing user implementation that extend this: they will inherit the added method implementation when they are compiled against the new version of [math].

This does not mean interfaces are evil and should be avoided. There are many places where interfaces are very well suited. One of the use of interface we still promote is for user code that represent some problem to be passed to a [math] algorithm. Examples are functions that are passed to root solvers or integrators (interface UnivariateRealFunction and similar), ordinary differential equations (interface FirstOrederDifferentialEquation), visitors for matrices elements (interface RealMatrixChangingVisitor and similar) ... In these cases, we really have nothing we can implement at [math] level and more importantly the user object will implement our [math] interface, but they still have the freedom to extend some other user base class at the same time, to suit user needs. forcing user to extend a [math] abstract class in this case would really be cumbersome for users.

So you see there is no silver bullet, sometimes we use interface, sometimes we don't. We used a lot more interfaces before and are changing our minds on some use cases.

best regards,
Luc


2011/7/13 Sébastien Brisard<sebastien.bris...@m4x.org>

We would then have had an empty abstract class. So why not an interface?



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to