On Jul 26, 11:20*am, r...@zedat.fu-berlin.de (Stefan Ram) wrote:
> Gene Wirchenko <ge...@ocis.net> writes:
> >>>What is wrong with something like:
> >>>FilePrinter r=new FilePrinter();
> >>>// General Options
> >>>r.SetPrinter("\\Boojum");
> >>>r.SetCopies(1);
> >>>r.SetDoubleSided(true);
> >>Before I can answer this, I need to know, whether there are
> >>setters in the code above. How do you define setter ? Is a
> >> setter any one-argument method, whose name begins with Set ?
> >In my example, yes. *In general, no.
>
> * There is nothing wrong with one-argument methods whose
> * name begins with Set (except that common Java naming
> * style is to use lower-case method names).
>
> >>(To apply my own definition, I would need to see the
> >>documentation of a method, to judge whether it is a setter .)
> >Are you going by whether the setter uncritically sets the value
> >or whether it checks the value?
>
> * According to
>
> http://c2.com/cgi/wiki?AccessorsAreEvil
>
> * * * accessors are methods that let you read and write the
> * * * value of an instance variable of an object .
>
> * My personal definition is similar:
>
> * * * An accessor is any method whose contract contains a
> * * * reference to an instance variable.
>
> * Since I do not know whether your methods set the value of an
> * instance variable, I do not know, whether they are setters
> * in the sense of my definition. I would need to be able to
> * read their contract (documentation) to learn about this.
>
> * When their contract (documentation) does not contain such
> * references, encapsulation is not broken.
Strictly speaking an accessor need not reference an instance variable
of the class that owns the accessor. It only needs to give the
appearance of doing so. Gene Wirchenko makes the excellent point that
accessors can and often should include sanity logic, i.e., logic to
preserve invariants.
--
Lew