tag:blogger.com,1999:blog-24419026.post8426698645931814848..comments2024-03-22T17:03:22.754+01:00Comments on przemelek: Giń konstruktorze! Giń! ;-)przemelekhttp://www.blogger.com/profile/14956032882265621104noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-24419026.post-29992955101673797342009-11-17T19:16:10.837+01:002009-11-17T19:16:10.837+01:00Akurat ciężar decyzji jak powinny być tworzone obi...Akurat ciężar decyzji jak powinny być tworzone obiekty powinien spoczywać na barkach autora obiektu, który wie co się dzieje w jego środku.<br />Dodatkowo takie podejście pozwala na łatwy refaktoring i łatwą zmianę sposobu tworzenia obiektów. Przykład ;-) mamy kod, który "rozmawia" z bazą danych, to taka warstwa abstrakcji między aplikacją, a bazą, i niestety często jest tak, że ten sam rekord pobierany jest kilka razy w czasie jednego requesta. Gdyby zamiast tworzenia obiektów przy pomocy konstruktora można było używać w tym przypadku metod fabrykujących to łatbiej byłoby zaimplementować cache. A tak trzeba kombinować jak koń pod górę ;-)<br /><br />Co do modyfikatorów dostępu to są one świetne, ale mało kto ich używa, bo mało kto myśli o API dla pakietu czy w ogóle biblioteki, a zwykle myślimy na poziomie klasy.<br />A na poziomie klasy wystarczą private i public, i w bardzo żadkich przypadkach protected. Ale już widoczność default ma sens dopiero gdy patrzymy na API z perspektywy pakietu.<br />Widzisz to rozwiązanie, które pokazałeś ma tą wadę, że Twoje obiekty tworzone będą na 2 sposoby, musisz więc oprogramować obie strony [i jeszcze 3 czyli serializację].<br />A co do refleksji, to one są jednak głównie do rzeczy niezwykłych. I co jest też doradzane w Effective Java, lepiej w przypadku refleksji robić tak, że jak już masz stworzony obiekt to lepiej go rzutować na znany interfejs, bo i wywoływanie będzie szybsze i bezpieczniejsze.przemelekhttps://www.blogger.com/profile/14956032882265621104noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-50882666058207851022009-11-17T18:39:18.316+01:002009-11-17T18:39:18.316+01:00Przemku, takie podejście ma więcej wad. Najpoważni...Przemku, takie podejście ma więcej wad. Najpoważniejszą jest utrata kontroli nad procesem tworzenia obiektów. Mniejsza jeżeli to nasz obiekt, ale jeżeli korzystamy z biblioteki to możemy się bardzo boleśnie nadziać na jakieś niestandardowe rozwiązanie lub niespodziewanego i nigdzie nie udokumentowanego singletona. Względnie na jakiś hak z refleksją.<br />Co do dziedziczenia to pamiętamy, że są 4 modyfikatory dostępu, a nie tylko dwa;)<br />[code]<br />class A {<br /> protected A(int i) {<br /><br /> }<br /><br /> static A a() {<br /> return new A(10);<br /> };<br />}<br /><br />class B extends A {<br /><br /> protected B(int i) {<br /> super(i);<br /> }<br /><br /> static A a() {<br /> return new B(10);<br /> };<br />}<br />[/code]<br />Nie wiem dlaczego wszyscy zapominają o protected.<br />Co do odróżniania metod to zostaje tylko nieśmiertelna Konwencja nad Konfiguracją ;)<br /><br />Pozdrawiam<br />KoziołekKoziołekhttps://www.blogger.com/profile/17083309584011564718noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-13581656554455298552009-11-17T16:28:59.347+01:002009-11-17T16:28:59.347+01:00Gust, a ładność oznacza tutaj tyle że nie trzeba p...Gust, a ładność oznacza tutaj tyle że nie trzeba parametryzować klasy w trakcie jej tworzenia. Java sama domyśli jak wywołać tą metodę na podstawie typu zmiennej do której jest przypisywany wynik.przemelekhttps://www.blogger.com/profile/14956032882265621104noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-2925151503839333902009-11-17T16:21:49.246+01:002009-11-17T16:21:49.246+01:00100% racji, widzę że warto sięgnąć po tę książkę. ...100% racji, widzę że warto sięgnąć po tę książkę. Chyba że chcesz ją tutaj streścić?:-)<br /><br />Jedyne z czym mogę się nie zgodzić, to twoje stwierdzenie, jakoby<br /><br />List<Integer> integers = ArrayList.createList();<br /><br />było 'zdecydowanie' ładniejsze od:<br /><br />List<Integer> integers = new ArrayList<Integer>();<br /><br />Czymś szczgólnym ta 'ładność' się wyraża (jest jakaś wartość dodana stosowania takiego zapisu), czy to tylko Twój 'dobry' gust?Anonymousnoreply@blogger.com