On 17 August 2012 12:15, Gilles Sadowski <gil...@harfang.homelinux.org> wrote:
> On Fri, Aug 17, 2012 at 11:46:22AM +0100, sebb wrote:
>> On 17 August 2012 11:24, Gilles Sadowski <gil...@harfang.homelinux.org> 
>> wrote:
>> > On Fri, Aug 17, 2012 at 09:40:49AM +0100, sebb wrote:
>> >> On 17 August 2012 07:40, Luc Maisonobe <luc.maison...@free.fr> wrote:
>> >> > Le 16/08/2012 23:48, sebb a écrit :
>> >> >> On 16 August 2012 21:58, Gilles Sadowski 
>> >> >> <gil...@harfang.homelinux.org> wrote:
>> >> >>> Hello.
>> >> >>>
>> >> >>> In classes "HarmonicFitter" and "GaussianFitter" (in package
>> >> >>> "o.a.c.m.optimization.fitting"), there is an inner class 
>> >> >>> "ParameterGuesser".
>> >> >>> All the necessary input for the guessing procedure is passed to the
>> >> >>> constructor; I thus propose that the guessing is performed at object
>> >> >>> construction rather than at the call to the "guess()" method. This 
>> >> >>> will
>> >> >>> allow to declare all the fields "final". Moreover, all that can go 
>> >> >>> wrong
>> >> >>> will be located in the constructor, turning the "guess" method into a 
>> >> >>> mere
>> >> >>> accessor.
>> >> >
>> >> > +1 to Gilles suggestion.
>> >> >
>> >> >>
>> >> >> On the face of it, it sounds like the class does not even need to be
>> >> >> instantiated.
>> >> >> Could the guess method be turned into a static utility method to which
>> >> >> the parameters are passed?
>> >> >> Why bother creating an instance only to return the guess later?
>> >> >
>> >> > It could be. There are a bunch of methods involved and they exchange
>> >> > data which is now stored in a few class fields (observation arrays and
>> >> > the three estimated parameters), so these data should be added as
>> >> > parameters to the static functions.
>> >> >
>> >> > I'm not sure whether it is cleaner to have a small instance created for
>> >> > a short time to perform some difficult preprocessing or to have a bunch
>> >> > of static methods.
>> >>
>> >> Instances need to be disposed of by GC whereas parameters
>> >> automatically disappear when a called procedure returns.
>> >
>> > As a short-lived object, I guess that performance will not be improved
>> > greatly (especially w.r.t. the time taken for the fitting itself).
>> >
>> >> A class with no fields is guaranteed immutable.
>> >
>> > The class will be immutable.
>> >
>> >>
>> >> But for large numbers of parameters, class data is perhaps cleaner.
>> >
>> > Being "public", the inner class cannot disappear now; so I'll do the first
>> > cleanup, and we'll see later if further changes are in order.
>>
>> Is the class directly usable by 3rd parties?
>
> Yes.
>
>> Would it make sense for a 3rd party to use it directly?
>
> Maybe. They could compare the guessed values with the optimized ones.
> Admittingly, this is not very useful... if everything works fine.
>
>>
>> If not, then although it would break strict binary compat., it would
>> be possible to consider changing it.
>> If it's not directly used by 3rd party code, I don't think changes can
>> break their code.
>
> I don't understand: the class is public. Someone can have instantiated it in
> his code...

Not if the following is true:

>> If it's not directly used by 3rd party code

>>
>> Ideally any such helper classes should be private or package protected
>> ab initio.
>
> I agree.
> However in this case, the boundary between helper and utility (that could be
> useful on its own) is not clear-cut.
>
>
> Gilles
>
> ---------------------------------------------------------------------
> 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