Wpis z mikrobloga

#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 :(
  • 15
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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
  • Odpowiedz
@LelakowSKY: Próbuje całym swoim mózgiem wymyślić po co to. I nie wiem.
Nigdy nie widziałem tego rozwiązania, a zapewne ma jakieś zalety. Podpowiesz kiedy się to przydaje i fajnie tak zrobić? Bo to wyglada na wymuszenie faktu imolemetacji co sierdzi #!$%@? na 3 kilometry
Mądrzej się wydaje wymusić interfejsem getAge i w zależności czy dzień urodzenie jest znany dla psa mnożyć przez 7, dla świni zwracać sama liczbę. To co
  • Odpowiedz
@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.
  • Odpowiedz
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
j.....6 - > o takie delegowanie odpowiedzialności wyżej, później np. majac kilka mode...

źródło: comment_1635762642AWSPb2VpykQ7krF4lPE0uf.jpg

Pobierz
  • Odpowiedz
@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.
  • Odpowiedz
@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
  • Odpowiedz
@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
  • Odpowiedz