Article View: pl.comp.lang.java
Article #153754Re: jak to jest z tymi JavaBeans
From: Arivald
Date: Thu, 03 Jan 2013 22:40
Date: Thu, 03 Jan 2013 22:40
140 lines
5419 bytes
5419 bytes
W dniu 2013-01-03 23:20, x pisze:
> W dniu 2013-01-03 22:51, Arivald pisze:
>> W dniu 2013-01-03 21:54, Jadalbert pisze:
>>> W dniu 2013-01-03 21:33, x pisze:
>>>> W dniu 2013-01-03 09:40, Jadalbert pisze:
>>> W klasie Geom rzeczywiście nie ma to sensu ale to tylko prosty przykład.
>>> Inne klasy mają własności.
>>> Nie mam dużego doświadczenia w javie, ale pamiętam, że kiedyś czytałem,
>>> że pisze się jakby dwie klasy. Jedna to typowy beans z polami np. V_, a
>>> druga to klasa licząca to V i nie będąca beansem.
>>> i wtedy będzie 1.setV_(2.V);
>>> tak w uproszczeniu rzecz jasna.
>>> Ale jestem raz leniwy, a dwa nie wiem czy to aby na pewno jest sensowne
>>> i poprawne.
>>
>> To raczej miało tak wyglądać:
>>
>> klasa 1 to POJO (http://pl.wikipedia.org/wiki/Plain_Old_Java_Object),
>> ergo nie ma żadnego przetwarzania, tylko dane. Może być beanem (bez
>> serializacji).
>>
>> do tego druga klasa (lub kolekcja klas) realizująca jakieś przetwarzanie.
>>
>> pełny przykład:
>>
>> public class First {
>> private double x;
>> private double y;
>> private double z;
>>
>> public double getX() {
>> return x;
>> }
>> public void setX(double x) {
>> this.x = x;
>> }
>> public double getY() {
>> return y;
>> }
>> public void setY(double y) {
>> this.y = y;
>> }
>> public double getZ() {
>> return z;
>> }
>> public void setZ(double z) {
>> this.z = z;
>> }
>> }
>
> To ma ręce i nogi, oczywiście przy założeniu że koniecznie chcemy
> JavaBeana...
>
Oczywiście wystarczyły by publiczne pola, ale OP pytał o beany.
>>
>> public class Second {
>> private First first;
>>
>> public Second(First first) {
>> this.first = first;
>> }
>>
>> public double getV() {
>> return first.getX() * first.getY() * first.getZ();
>> }
>
> To jest bez sensu. Pojedynczą operację obliczenia V rozbiłeś na dwie:
> utworzenia nowego obiektu klasy Second (po co ???) i właściwego
> obliczenia. No i znowu wygląda na to, że V jest właściwością obiektu
> klasy Second, a nie jest.
Założenie jest takie że klasa Second realizuje wiele różnych obliczeń. W
przykładzie jest tylko jedno.
Osobiście lubię ten model że konkretną instancję klasy danych na stałe
wiąże się z instancją klasy obliczeniowej.
Choć nie zawsze jest to najsensowniejsze.
>
> Po prostu w ten sposób:
>
> public double computeV(First first) {
> return first.getX() * first.getY() * first.getZ();
> }
>
Też można.
Do OP: Oczywiście w tym wypadku zakładamy że konstruktor Second jest
domyślny, bezargumentowy, a jedna instancja klasy Second może być
używana do obsługi wielu obiektów First. Implikuje to także bezstanowość
klasy Second (tzn nie ma ona żadnych pól),
>> i użycie:
>>
>> First f = something.getFirst(); //skądś tam się bierz
>> Second sec = new Second(f);
>> double v = sec.getV();
>>
>> lub nawet
>>
>> double v = new Second(something.getFirst()).getV();
>>
>> W innej wersji, klasa Second jest statyczna (coś jak namespace z C++),
>> dostarcza obliczeń bez konieczności tworzenia instancji.
>
> To jest akceptowalne w przypadku naprawdę prostych funkcjonalności (tak
> jak Apachowe StringUtils. W ogólnym przypadku trochę śliskie, bo nie da
> się zamienić implementacji (np na mocka).
>
No cóż, to prawda. Coś za coś ;-)
>>
>> public class Second {
>>
>> public static double getV(First first) {
>> return first.getX() * first.getY() * first.getZ();
>> }
>> }
>>
>>
>> Wtedy używa się jej tak:
>>
>> double v = Second.getV(something.getFirst());
>>
>> Wszystko zależy od potrzeb.
>
> Należy róznież pamiętać o tym, że w Javie nie ma reguły mówiącej że
> wszystkie nazwy metod muszą się zaczynać od set lub get ;-)
A to już moje przyzwyczajenie kolidujące z konwencją beanów. Na co dzień
programuję w języku z właściwościami, i funkcje typu GetXX czy IsXX
używam to nie są gettery ;-)
--
Arivald
Technical Details
Message-ID:
<kc51ds$fn$1@news.dialog.net.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!opal.futuro.pl!szmaragd.futuro.pl!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!news.dialog.net.pl!not-for-mailReferences:
<50e54418$0$1298$65785112@news.neostrada.pl> <50e5eb16$0$26696$65785112@news.neostrada.pl> <50e5eff0$0$1295$65785112@news.neostrada.pl> <kc4uho$urh$1@news.dialog.net.pl> <50e60438$0$1306$65785112@news.neostrada.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!opal.futuro.pl!szmaragd.futuro.pl!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!news.dialog.net.pl!not-for-mail From: Arivald <NOSPAMarivald@interia.pl> Newsgroups: pl.comp.lang.java Subject: Re: jak to jest z tymi JavaBeans Date: Thu, 03 Jan 2013 23:40:26 +0100 Organization: Dialog Net Lines: 143 Message-ID: <kc51ds$fn$1@news.dialog.net.pl> References: <50e54418$0$1298$65785112@news.neostrada.pl> <50e5eb16$0$26696$65785112@news.neostrada.pl> <50e5eff0$0$1295$65785112@news.neostrada.pl> <kc4uho$urh$1@news.dialog.net.pl> <50e60438$0$1306$65785112@news.neostrada.pl> NNTP-Posting-Host: dynamic-78-8-99-8.ssp.dialog.net.pl Mime-Version: 1.0 X-Trace: news.dialog.net.pl 1357252860 503 78.8.99.8 (3 Jan 2013 22:41:00 GMT) X-Complaints-To: abuse@dialog.net.pl NNTP-Posting-Date: Thu, 3 Jan 2013 22:41:00 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20121128 Thunderbird/18.0 In-Reply-To: <50e60438$0$1306$65785112@news.neostrada.pl> X-Antivirus: avast! (VPS 130103-1, 2013-01-03), Outbound message X-Antivirus-Status: Clean Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit