LelakowSKY
#programowanie #java
Jak w Javie tworzyło się abstrakcyjny interfejs (interfejs to może być złe słówko) dla innych klas w taki sposób, że klasy które po nim dziedziczą muszą nadpisać pola? Taki główny szkielet encji na bazie której można tworzyć inne, kolejne. W Scali to się nazywało 'trait' jeżeli to jakaś wskazowka, teraz chce do do Javy przenieść. Na zasadzie:

Zwierze{
int wiek;
int iloscLap;
}

class Pies extends Zwierze{
override int wiek = ???;
override int iloscLap = ???;
}

Chodzi o to ze aby stworzyć klaske Pies musze nadpisać POLA z interfejsu/abstrakcji Zwierze. Interfejs pozwala na puste zdefiniowanie tylko metod, a ja potrzebuje by pola również były puste :(
  • Najlepsze
  • Wszystkie komentarze
j.....6
j.....6
o takie delegowanie odpowiedzialności wyżej, później np. majac kilka modeli zwierząt (Pies, Kura, Jeleń), ładujemy je do listy List, i np. mapując po każdym zwierzaku mamy dostep do tych pól, które wymusza trait. dla każdego zwierzaka mogą być inne.


@LelakowSKY: Trochę śmierdzi to myśleniem uczelnianym w stylu Karp extends Rybka ( ͡° ͜ʖ ͡°)

Poczytaj trochę o projektowaniu systemu
Saly
Saly
1
@LelakowSKY: nie da się, za bardzo nie widzę też sensu. Trzymaj część wspólną w osobnej klasie i tyle
tomp3
tomp3
tomp3
1
@LelakowSKY: W Javie nie ma odpowiednika trait ze Scali. Najbliżej tego, co chcesz osiągnąć jest klasa abstrakcyjna

abstract class Zwierze {
  int wiek;
  int
graf_eulerowski
@LelakowSKY:

interface Zwierze {
int getWiek();
int
s.....u
s.....u
@LelakowSKY: Nie możesz przekazać wartości pól do konstruktora?
j.....6
j.....6
@LelakowSKY: idź w kompozycję aniżeli dziedziczenie
happy3dprints
happy3dprints
happy3dprints
  • adult
0
Treść przeznaczona dla osób powyżej 18 roku życia...
LelakowSKY
LelakowSKY Autor
0
@happy3dprints: pracuje od 2 lat w Scali i takie budowanie aplikacji jest na porzadku dziennym, w Scali taka klaska nazywa się 'trait' i jest bazą pod inne klaski, coś a'la połączenie interfejsu i klasy abstrakcyjnej. majac np. zdefiniowany trait "Zwierze" tworze na jego podstawie modele zwierząt wg. schematu z traitu. Oczywiscie każde stworzony model zwierza rozszerzajacy ten trait moze mieć tez swoje pola. To takie delegowanie odpowiedzialności wyżej, później np.
Whiskeyjack29
Whiskeyjack29
@jaca_66: To nie jest myślenie uczelniane, traity to jedna z najbardziej przydatnych rzeczy w programowaniu gdzie każdy może definiować traity i ich implementację do istniejących typów a potem używać ich polimorficznie, bez traitów trzeba się bawić w wrappery i adaptery.
j.....6
j.....6
@Whiskeyjack29: a czemu tego w Javie nie ma, ja o tym uczelnieniym myśleniu odniosłem sie do tego pies, kura, jeleń
Whiskeyjack29
Whiskeyjack29
@jaca_66: Bo jest totalnie ułomnym językiem z którym trzeba walczyć na każdym kroku i wymyślać skomplikowane patterny żeby coś napisać?
Whiskeyjack29
Whiskeyjack29
@jaca_66: i widzisz bo zaimplementowanie takiej hierarchii dziedziczenia zwierzę->pies, jeleń nic nam nie da a przy braku wielodziediczenia jeszcze ugryzie jak trzeba będzie coś zmienić, ale traity są zupełnie nie inwazyjne, ich implementację definiujemy zwykle nie wewnątrz danego typu/klasy tylko dla danego typu/klasy, więc mogę mieć metodę która zwraca powiedzmy łacińska nazwę gatunku zwierzęcia w moim traicie a jednocześnie nie mierzę się z problem dalszych skomplikowanych hierarchi dziedziczenia
j.....6
j.....6
@Whiskeyjack29: rozumiem, bardzo dziękuje za odpowiedź i uświadomienie
Whiskeyjack29
Whiskeyjack29
@jaca_66: w javie da się to oczywiście rozwiązać interfejsami ale tylko dopóki to twoja klasa
j.....6
j.....6
@Whiskeyjack29: Ja póki co i tak jakoś się ostatnim czasy mało przykładam do Javy, staram się myśleć wzorcami które kiedyś tam sobie wytarłem, w sensie brak mi już czas po prostu, teraz tyle wiedzy jest też dookoła Javy typu frameworki, cloud jak AWS, nauki angielskieg no i człowiek nieraz się gubi że zapomina wzorców z programowania