Article View: pl.comp.lang.java
Article #153742Re: jak to jest z tymi JavaBeans
From: x
Date: Thu, 03 Jan 2013 20:47
Date: Thu, 03 Jan 2013 20:47
91 lines
4106 bytes
4106 bytes
W dniu 2013-01-03 11:15, Arivald pisze:
> W dniu 2013-01-03 11:03, Jadalbert pisze:
>> W dniu 2013-01-03 10:18, Arivald pisze:
>>> W dniu 2013-01-03 09:40, Jadalbert pisze:
>>>> problem (czy raczej moja niewiedza) jest taki
>>>> Mam program liczący pewne wielkości i, dajmy na
>>>> to w uproszczeniu, w
>>>> klasie Geom metodę
>>>> public double V(double x, double y, double z) {
>>>> return x * y * z;
>>>> }
>>>> gdzieś tam jest to wywoływane:
>>>> V_ = Geom.V(2,3,4);
>>>> czyli trzeba wstawić trzy argumenty. Wszystko
>>>> działa bez zarzutu.
>>>> Teraz, z klas liczących chcę zrobić beans'y.
>>>> Czyli powinno być tak (opierając się na
>>>> powyższym przykładzie):
>>>> private double v;
>>>> ...
>>>> public double getV() {return v};
>>>> public void setV(double v) {this.v = v;}
>>>
>>> To jest tylko para sette/getter. W zamyśle razem
>>> tworzą jedną właściwość obiektu.
>>>
>>>> i tu, zgodnie z konwencją, metoda set ma tylko
>>>> jeden argument, a ja
>>>> potrzebuję przekazać 3. Jak wybrnąć sensownie z
>>>> takiej sytuacji? Osobna
>>>> klasa licząca + osobna typu beans? W beans'ie
>>>> dodatkowe metody liczące?
>>>> Można oczywiście już w implementacji dołożyć
>>>> odpowiednie zmienne, ale co
>>>> wtedy przekazywać jako argument?
>>>> Najchętniej wszystko co dotyczy liczenia i, że
>>>> tak powiem, formalnej
>>>> struktury beans'ów chciałbym mieć w jednej klasie.
>>>
>>> Możesz to zrobić np tak
>>>
>>> //property X
>>> public double getX() {return x};
>>> public void setX(double x) {this.x = x;}
>>> //property Y
>>> public double getY() {return y};
>>> public void setY(double y) {this.y = y;}
>>> //property Z
>>> public double getZ() {return z};
>>> public void setZ(double z) {this.z = z;}
>>>
>>> //property V
>>> public double getV() {return x * y * z;}
>>>
>>>
>>> Jak widzisz, właściwość V nie ma settera, jest
>>> tyko do odczytu. A jednocześnie jej getter
>>> wykonuje potrzebne obliczenia.
>>>
>>> Zauważ że w ciałach setterów/getterów nie musisz
>>> wcale pisać/czytać ze zmiennych. Możesz na
>>> przykład przekazywać wartości do innych obiektów,
>>> lub bazy danych, albo wołać jakieś funkcje API
>>> odwołujące się do realnego świata (np. sterować
>>> robotem).
>>>
>> Dziękuję za odpowiedź.
>> Tyle, że dane do getV pochodzą z innej klasy, u mnie z takiego kontenera
>> danych. Nie ma więc (potrzeby?) get/set właściwości x,y,z w klasie
>> liczącej.
>>
>> Z tego by wynikało, że aby zachować konwencje beans'a wystarczy mi
>> jedynie odczytywać wartość:
>>
>> private double v;
>> ...
>> public double getV() {
>> return kontener.x * kontener.y * kontener.z;
>> }
>> Czy dobrze rozumiem?
>
> Dokładnie tak.
>
Oj to nie wygląda za dobrze. Przede wszystkim dlatego, że większość
programistów zinterpretuje nazwę getV() jako "zwracam pole V". Tymczasem
metoda nawet nie operuje na polach obiektu na rzecz którego jest
wywoływana, tylko na obiekcie "kontener"...
Pozdrawiam,
Marcin Jaskolski
Technical Details
Message-ID:
<50e5ee6f$0$1210$65785112@news.neostrada.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed2.plix.pl!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mailReferences:
<50e54418$0$1298$65785112@news.neostrada.pl> <kc3ieu$a39$1@news.dialog.net.pl> <50e5578d$0$1213$65785112@news.neostrada.pl> <kc3loo$bga$1@news.dialog.net.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed2.plix.pl!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail Date: Thu, 03 Jan 2013 21:47:39 +0100 From: x <x@x.x> User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:16.0) Gecko/20121010 Thunderbird/16.0.1 MIME-Version: 1.0 Newsgroups: pl.comp.lang.java Subject: Re: jak to jest z tymi JavaBeans References: <50e54418$0$1298$65785112@news.neostrada.pl> <kc3ieu$a39$1@news.dialog.net.pl> <50e5578d$0$1213$65785112@news.neostrada.pl> <kc3loo$bga$1@news.dialog.net.pl> In-Reply-To: <kc3loo$bga$1@news.dialog.net.pl> Lines: 93 Message-ID: <50e5ee6f$0$1210$65785112@news.neostrada.pl> Organization: Telekomunikacja Polska NNTP-Posting-Host: 178.43.244.214 X-Trace: 1357246063 unt-rea-b-01.news.neostrada.pl 1210 178.43.244.214:2461 X-Complaints-To: abuse@news.neostrada.pl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit