• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dwa konstruktory o jednakowych parametrach

Object Storage Arubacloud
0 głosów
199 wizyt
pytanie zadane 9 października 2018 w Java przez Xarti Obywatel (1,380 p.)

Cześć, mam pytanie dotyczące dosyć podstawowej rzeczy w Javie: konstruktorów. Piszę przykładowy program do obsługi punktów w układzie kartezjańskim i mam dwa konstruktory, jeden jako x,y, drugi jako promień i kąt:

 public Point(double x, double y)  {
        this.x = x;
        this.y = y;
        this.r = Math.sqrt(Math.pow(x,2) + Math.pow(y,2));
        this.angle = Math.atan(x/y) * 180 / Math.PI;
    }

    public Point(double r, double angle, char c) {
        if(c == ...)
        this.r = r;
        this.angle = angle;
        this.x = r * Math.cos(angle);
        this.y = r * Math.sin(angle);
    }

Na razie jest to zrobione dosyć słabo, ale nie wiem czy da się inaczej.

Na początku wymyśliłem opcję taką, że jak ktoś poda dwie liczby to wyoła się ten pierwszy (x,y) jeżeli wpisze dwie liczby i znak to jeżeli znakiem będzie d to wywoła się pierwszy, jeżeli b to drugi a jeżeli coś innego to żaden.

Pojawiły się dwa problemy:
1. w javie nie ma wartości domyślnych więc zrobienie jednego konstruktora z dwoma if'ami odpada
2. jak chcę wywołać inny konstruktor w ciele mojego to musi byś to w pierwszej linijce, czyli odpada coś typu if(c == 'd') this(r,angle);

I moje pytanie brzmi, czy da się to napisać jakoś sprytniej, żeby było krótsze, miało więcej sensu?

2
komentarz 9 października 2018 przez Tomek Sochacki Ekspert (227,510 p.)
Poczytaj o wzorcach projektowych, a myślę, że dość szybko załapiesz w czym tkwi problem i jak go rozwiązać. Generalnie programowanie obiektowe to nie samo używanie klas, interfejsów itp. ale właśnie umiejętne tworzenie całej struktury i świadome stosowanie konkretnych wzorców projektowych.
1
komentarz 9 października 2018 przez Wiciorny Ekspert (269,710 p.)
w Javie ten problem jak i pewnie w innych obiektowych problem [ wielu argumentów np, przy konstrukcji konstruktora , rozwiązujemy WZORCEM BUILDER'A ] :)

2 odpowiedzi

+2 głosów
odpowiedź 9 października 2018 przez draghan VIP (106,230 p.)
Podawaj 'angle' jako typ kątowy, nie jako double. Jeśli w standardowych bibliotekach Javy nie ma takiego typu, to sam napisz taką prostą klasę narzędziową. Twój kod zyska wtedy na semantyce. :)
+1 głos
odpowiedź 10 października 2018 przez Mateusz51 Nałogowiec (28,180 p.)
Jednym że standardowych przykładów jaj rozwiązuje się takie problemy moze być stworzenie Factor method. W twoim przypadku mogą być to dwie metody statyczne które zwracają Ci punkt. A te metody mogą już ustawiać dane jakie tam sobie wyliczysz.
komentarz 10 października 2018 przez Wiciorny Ekspert (269,710 p.)
Builder, nie factor- factor rozwiązuje problem interfejsów :)
komentarz 10 października 2018 przez Mateusz51 Nałogowiec (28,180 p.)
edycja 10 października 2018 przez Mateusz51
W książce Effective Java autorstwa Joshua Bloch nazywa się to Static Factory Method,
komentarz 10 października 2018 przez Wiciorny Ekspert (269,710 p.)
ale my rozmawiamy o wzorcach projektowych, a  po prostu " rozwiązaniu, które jest efektywne', ale pewnego rodzaju wzrocem nie jest- moze praktyką

https://dzone.com/articles/constructors-or-static-factory-methods

to jest  odp. też dlaczego to rozwiązanie dobre nie jest i wcale nie jest efektywne :)
komentarz 10 października 2018 przez Mateusz51 Nałogowiec (28,180 p.)
Cóż ja podaje rozwiązanie z jednej z najważniejszych książek w świecie Java. W przypadku który ma autor pytania nie potrzeba nic więcej. Krytykę tez czytałem I dobrze że jest na ten temat debata. Ale to jest słowo przeciw słowu niech każdy wybiera to co mu w jego projekcie najbardziej pasuje

Podobne pytania

0 głosów
1 odpowiedź 720 wizyt
pytanie zadane 26 listopada 2018 w Java przez mn130496 Gaduła (3,530 p.)
0 głosów
1 odpowiedź 1,000 wizyt
pytanie zadane 30 listopada 2018 w Java przez mn130496 Gaduła (3,530 p.)
0 głosów
1 odpowiedź 150 wizyt

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...