Możesz podpowiedzieć mi więcej różnic i podobienst klasy abstrakcyjnej oraz interfejsu? Teoretycznie klasa abstrakcyjna która posiada tylko metody abstrakcyjne działa jak interfejs, interfejs od kiedy można definiować metody default ma podobne zachowanie jak klasa abstrakcyjna.. Różnice są w możliwości posiadania pol w klasie abstrakcyjnej co sprzyja zasadzie dry ale klasę abstrakcyjna się dziedziczy a interfejsy implementuje, a wiec może ich być kilka.. co jeszcze można by o tych strukturach powiedzieć?
@wrosoftacademy2 күн бұрын
Bardzo dobrze to podsumowałeś, od strony technicznej to rzeczywiście interface za pomocą metod default może 'udawać' klasę abstrakcyjną, natomiast klasa abstrakcyjna może robić za interface. Należy pamiętać, że pola w inteface są jako stałe (public static final), a metod prywatnych nie możemy tworzyć. Można rozważyć różnice w ich przeznaczeniu, wówczas łatwiej będzie wybrać czego powinniśmy użyć. Klasa abstrakcyjna - użyjemy jej, kiedy będziemy chcieli użyć dziedziczenia, czyli mamy kilka klas, które dotyczą tego samego w różnych wariantach, np. TaskProcessor (różne typy zadań procesowane w różny sposób). Wówczas cały proces implementuje w klasie abstrakcyjnej, natomiast fragmenty procesu, które są różne w zależności od typu zadania, będą implementowane przez metody abstrakcyjne w klasach potomnych. Inteface - używam go jako API lub kontraktu np. pomiędzy domenami, czy innymi częściami naszej aplikacji. W ten sposób mam zapewniony kontrakt i wiem jak mogę z danego fragmentu skorzystać właśnie poprzez interface. Jeżeli mam jakąś metodę, która wszędzie lub prawie wszędzie będzie wyglądała tak samo, wówczas użyję default, jako domyślnej implementacji. Mam nadzieję, że rozjaśniłem nieco różnice. Z jednej strony mogą wyglądać bardzo podobnie, jak wspomniałeś, jednak z drugiej, są w nieco innych sytuacjach używane.
@januszkuznik137Күн бұрын
@@wrosoftacademy Tak, dzięki! Zwłaszcza podoba mi się stwierdzenie "używania interfejsu jako kontraktu"
@januszkuznik1373 күн бұрын
"Łoo Panie"
@Zentex230715 күн бұрын
jakie są przypadki, kiedy używanie refleksji ma sens ? Mówię o normalnej aplikacji, nie tworzymy biblioteki, ani nic co potrzebuje dostęp w locie do klas. Tworzymy aplikacje od podstaw, ma ona swoją architekturę, wszystko możemy zaplanować itd. W jakich przypadkach refleksje są przydatne ? Tylko gdy chcemy "obejść" coś np. skorzystać z metody prywatnej, manipulować wartościami pól itd.?? Szukam praktycznych zastosowań :)
@wrosoftacademy15 күн бұрын
Jest to rzecz, z której często się nie korzysta ale czasem pozwala rozwiązać zgrabnie problem. Przykład z życia. Miałem aplikację, która łączyła się z ok 20 serwisami (innymi aplikacjami) w każdym zapytaniu trzeba było dodawać dane techniczne, typu nazwa mojej aplikacji, jako klient, login zalogowanego użytkownika, data utworzenia request itp, w sumie ok 10 pól. Problem w tym, że to był XML, więc klasy były generowane i nie miały między sobą dziedziczenia. W planach rozwojowych, miały dochodzić kolejne serwisy do obsługi. Znając nazwy pól i typy danych, mogłem za pomocą refleksji w jednym miejscu zaimplementować uzupełnianie części technicznej i mieć pewność, że w każdym serwisie będzie w ten sam sposób wypełnione.
@januszkuznik13721 күн бұрын
Extra, nie przewiduje jeszcze korzystac z refleksji przez jakiś czas ale teraz już wiem co to w ogóle jest. Obejrzałem wszystkie Twoje filmiki i czekam na kolejne, będziesz jeszcze coś wrzucać?
@wrosoftacademy19 күн бұрын
Dziękuję za komentarz. Cieszę, że filmy niosą wartość i pomagają 😊 Oczywiście w drodze sa kolejne materiały. Musiałem zrobić przerwę wakacyjna. Jednak od września ruszamy z kolejna porcją wiedzy 🚀
@januszkuznik1372 ай бұрын
Dzięki za ciekawy materiał. Po dwóch ostatnich filmikach wiem jak tworzyć własne adnotacje ale nie mam wyobrażenia jak one działają.. jak dziala walidacja NotNull albo jak to się dzieje że Builder z lomboka generuje tyle kodu? Dograsz coś jeszcze na ten temat?
@wrosoftacademy2 ай бұрын
Jasne, Świetny pomysł 😊 W następnej części bedziemy przechodzić przez refleksje i spróbujemy aop, to w tych mechanizmach najczęściej wykorzystujemy adnotacje z retention runtime. Jeśli chodzi o lombok, to kod generowany jest na etapie kompilacji kodu.
@januszkuznik1372 ай бұрын
@@wrosoftacademy Sam fakt, że kod generowany jest na etapie kompilacji jest dla mnie w miarę zrozumiały, nawet można sobie w targetach sprawdzić dokładnie jaki kod został wygenerowany. Tylko nie wiem na jakiej zasadzie adnotacje mają taką moc, że tak bardzo mogą wpływać na wygląd lub zachowanie danej klasy, pola czy metody
@wrosoftacademy2 ай бұрын
@@januszkuznik137 Do tego służy kilka mechanizmów. Możemy wykorzystać refleksję i bibliotekę Reflection, w springu można wykorzystać mechanizm AOP. Oba sposoby są dla Retention - runtime. Lombok z kolei korzysta z wlasnego plugina do maven lub gradle i jest uruchamiany w odpowiednim momencie. Generalnie w narzędziach tych wykorzystuje się możliwość wyszukania metod, klas i innych artefaktów posiadających konkretną adnotację. Gdy mamy juz znalezione interesujące nas miejsca możemy wykonać jakis dodatkowy kod
@januszkuznik1372 ай бұрын
@@wrosoftacademy dzięki:)
@wrosoftacademy7 күн бұрын
Film przedstawiajacy wykorzystanie adnotacji z refleksją: kzbin.info/www/bejne/e5W3aXydlLybesk Nie jest to co prawda NonNull, ale myślę że też ciekawy i pokazuje, jak można używać adnotacji
@januszkuznik1373 ай бұрын
W trakcie tego wykładu notorycznie mylone są nazwy "klasa abstrakcyjna" z "klasa anonimowa". Wprowadza to troche zamieszania i trudno się skupić na treści
@wrosoftacademy3 ай бұрын
Ach, faktycznie. Wybacz. Teraz, jak jeszcze raz odsłuchałem, rzeczywiście to zauważyłem. Poprawię ten film. Dzieki za zwrócenie uwagi 😊
@jakub.6864 ай бұрын
jaka jest zaleta ze tworzysz instancje klasy App, zamiast odrazu pisac swoj kod w mainie?
@wrosoftacademy4 ай бұрын
W tym przypadku w łatwy sposób można szybko przełączać się pomiędzy przykładami lub wersjami aplikacji, gdy mam metody run1(), run2() itd. Generalnie idea jest taka, żeby w main było jak najmniej kodu, bo ta metoda sluzy tylko uruchomieniu aplikacji. Później na przykład w spring boot również jest tak, że w main() podnosisz tylko context spring i nic więcej, jest to jedna linijka.
@jakub.6865 ай бұрын
Najprościej zrozumieć wyrażenie lambda poprzez to, że jest to funkcja anonimowa. Jest to funkcja, ponieważ nie trzeba jej przypisywać do konkretnej klasy, a anonimowa, ponieważ nie ma nazwy. Wyrażenie lambda implementuje interfejs funkcyjny, a interfejs funkcyjny ma tylko jedną abstrakcyjną metodę. Metoda abstrakcyjna to taka metoda, której ciało jest nadawane podczas implementacji. Wiec tworząc wyrażenie lambda, nadajemy ciało tej abstrakcyjnej metodzie. :D
@wrosoftacademy11 ай бұрын
0:00 O czym będziemy mówić 0:53 .get() 3:17 .orElse() 7:23 .orElseGet() 9:11 .orElseThrow() 13:40 podsumowanine
@wrosoftacademy11 ай бұрын
Kto znajdzie literówkę w kodzie dajcie znać 🖐 Mi oczy krwawią, jak to widzę ale znalazłem ją dopiero po opublikowaniu i na tym etapie produkcji to trochę za późno 😝 Ciekawe czy Wam też uda się ją znaleźć 😁
@wrosoftacademy Жыл бұрын
Film staje się nieaktualny powoli. Niestety taki los naszych aplikacji 🙄 Będe przygotowywać nową wersie integracji. Na pewno będzie Spring Boot 3, Spring 6.0.x i Swagger 3. Jeżeli chcielibvście zobaczyć inne integracje ze Srpingiem lub upgrade do Spring 6 to dajcie znać w komentarzach ;)
@prymek74 Жыл бұрын
a co z Gitem, sqlem, mavenem, wzorcami i webem o ktorych mowa w platnej sciezce? pojawia sie tu, czy jako odzielne kursy i kiedy? pzdr
@wrosoftacademy Жыл бұрын
Tak, to również będę omawiać. Jednak nagrania przygotowuję sam, więc potrzebuje czasu 😉 Kolejne filmy sukcesywnie wychodzą co tydzień.
@prymek74 Жыл бұрын
czym sie rozni ten darmowy kurs od tego platnego na udemy/eduj - tylko brakiem zadan?
@wrosoftacademy Жыл бұрын
Największą różnicą są zadania. Nie chodzi jednak o samą listę zadań, a o jej rozwiązania, ponieważ tam pokazuję jak je rozwiązuje. W ten sposób od samego początku przyzwyczajam uczestników do pisania kodu obiektowo. W każdym filmie z rozwiązaniem zadań są dodatkowe informacje. Podpowiedzi jak najlepiej rozwiązywać tego typu zadanie, jak inaczej można dany element wykorzystać, jak nie robić, żeby niepotrzebnie kodu nie komplikować, czy też niektóre tematy są pogłębiane. Rozwiązanie takie przyjąłem, ponieważ żeby nauczyć się programować nie wystarczy obejrzeć filmik, trzeba samemu pisać i to jest bonus dla osób próbujących rozwiązać zadania.
@prymek74 Жыл бұрын
witam, kiedy na eduju zostana uzupelnione brakujace 4 moduly w stosunku do tych na udemy, jak np. te 2 ostatnie z tej playlisty ?
@wrosoftacademy Жыл бұрын
Każda z tych platform ma inny tryb aktualizacji kursów. Po części jest to troche niezależne ode mnie. Staram się aktualizować regularnie. Z Eduj jest dodatkowy problem, ponieważ po wysłaniu do akceptacji, mam zablokowaną możliwość edycji przez kilka dni
@giemejl Жыл бұрын
A może Curie-Skłodowska też była kobietą?!
@wrosoftacademy Жыл бұрын
😆
@giemejl Жыл бұрын
Dobre :)
@wrosoftacademy Жыл бұрын
A Ty jakiego switch'a najczęściej używasz, a może wolisz if-else? Daj znać w komentarzach 😜
@wrosoftacademy Жыл бұрын
0:00 Wstęp 0:26 Przygotowanie projektu 2:53 for 4:12 for-each 5:56 forEach() - lambda 9:24 forEach() - referencje metody 10:47 Praktyczny przykład