Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!news.albasani.net!eternal-september.org!feeder.eternal-september.org!.POSTED!not-for-mail From: Gene Wirchenko Newsgroups: comp.lang.java.programmer Subject: Re: A question about some long java code that has getters/setters Date: Tue, 26 Jul 2011 11:56:55 -0700 Organization: A noiseless patient Spider Lines: 69 Message-ID: References: <1672e2f1-a963-4fcf-b651-41b69432c9d7@p29g2000pre.googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Injection-Info: mx04.eternal-september.org; posting-host="7Qrvczazr82YckO5XW8Vtw"; logging-data="1651"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/9JG1Qlp5izM4R40AFut1gkVzElRqcjys=" X-Newsreader: Forte Agent 4.2/32.1118 Cancel-Lock: sha1:HMIJC1EEKMeO/a0XnQ8jalc3EqY= Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:6591 On 26 Jul 2011 18:20:41 GMT, ram@zedat.fu-berlin.de (Stefan Ram) wrote: >Gene Wirchenko 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.« Then, the answer is no. However, the contract for such a method of mine would have reference to the concept that the instance variable embodies. I might write the contract for .SetCopies() as: .SetCopies() takes one parameter, an integer which is the number of copies of the file to be printed that will be made when .Print() is called (assuming sufficient valid printing parameters have been set). The number of copies must be non-negative. If I am reading you correctly, for the above, the answer is no, but if I change the contract to refer to the instance variable, say .NumCopies, then it would be a setter. This distinction strikes me as rather less than useful. "So, is it a setter?" "I can not tell. I have not read the contract." > 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. Read my example contract above. It does not mention an instance variable, but any reasonable implementation that I am likely to do would use one. > When their contract (documentation) does not contain such > references, encapsulation is not broken. They set something. Whether it is an instance variable or not is irrelevant to their use. Sincerely, Gene Wirchenko