Minęły trzy dni więc pora na kolejne słowa na temat Javy. Dzisiaj przyjrzymy się uważnie co się dzieje "pod spodem" w chwili tworzenia obiektów i deklarowania zmiennych. To już dotyka niskich warstw systemu w kwestii przydzielania pamięci, aczkolwiek każdy programista Java powinien wiedzieć jak to wygląda w praktyce. Pokażę Wam jak wygląda stos i sterta. Pokażę czym się różnią te struktury danych od siebie oraz na czym polega przechowywanie danych na jednym i drugim.

Zapraszam po kilku dniach na następny artykuł na temat Javy. Pamiętacie jak pisałem o polimorfizmie, jednym z postulatów dotyczących programowania obiektowego? Tam prezentowałem taki przykład, który dotyczył jednej "rodziny" klas i tym samym, dziedziczenie stanowiło część wspólną. A co gdy chcemy wyjść poza jedyny "sznurek" powiązań i odwołać się do wszystkich za pomocą interfejsu? Polimorfizm raz kolejny staje się głównym powodem i zarazem największą zaletą jak może nam to pomóc w pisaniu logicznie powiązanego kodu. Zapraszam serdecznie do lektury!

Spodziewajcie się teraz artykułów dotyczących programowania jedynie z samej Javy. Dobra, 99%. Z tego względu iż "raylib" nie będzie na razie przeze mnie wykorzystywany, bo mnie zawiódł, nauka języka C została przeze mnie przerwana. Skupię się teraz na Javie z kilku osobistych powodów. Dzisiaj, rozwiązanie zagadki czemu dziedziczenie wielokrotne nie jest dopuszczalne. Wpierw należy sobie wytłumaczyć co się kryje konkretnego pod tym terminem. Zapraszam wszystkich zaintrygowanych!

Poznamy teraz kolejny zapis dający wygodę przy wywoływaniu konkretnej funkcji danego obiektu dla każdej instancji przebywającej w kolekcji. Gdzie tam zwykła pętla for czy nawet pętla rozszerzona. Nawet wyrażenie lambda ukazane całkiem niedawno można jeszcze bardziej skrócić. Niech Wam posłuży referencja do metody!

Myślę, że na ostatnim wątku zakończymy temat biblioteki "Swing" i zerkniemy znowu na obsługę wyjątków. To nie będzie kolejna pogadanka o wyjątkach, a tylko o pewnej metodzie wykorzystywanej nałogowo przez wiele osób w programach, filmach czy poradnikach. Widzicie to tyle razy. Za każdym razem gdy ktoś na szybko pisze "try-catch", zwykle osadza to samo wyrażenie po nazwie instancji klasy "Exception". Bez przerwy w przeważającej większości przypadków ludzie zalecą Wam to samo. W książkach wielkimi wołami również jest o tym wspomnienie, a jednak można nie zdawać sobie sprawy co ta metoda robi takiego ekscytującego, że wszyscy to stosują. "printStackTrace". Co to takiego? Zapraszam do środka.

Druga część o metodzie "paintComponent". Na zakończenie dzisiejszej porcji wiedzy, postanowiłem powrócić do tego samego tematu omawianego wcześniej jednak przybliżę Wam teraz możliwości biblioteki "Swing" i klasy "JPanel" prezentując więcej funkcji rysujących. Konstrukcję podstawową już znacie, zatem nie muszę już dzielić tych tematów na dwie części. Pokażę Wam jak przy pomocy rzutowania instancji typu "Graphics" na "Graphics2D", możecie sobie poszerzyć pole manewrów!

Wznawiam temat serializacji danych w języku Java (radzę zobaczyć poprzednią część jeśli nie wiecie o czym mowa). Wyobraźmy sobie taką sytuację. Mamy naszą klasę, implementujemy interfejs "Serializable" i każemy programowi zapisać wszystkie dane składowe...oprócz jednej! Takiej małej zmiennej, która powinna być pomijana ze względu na wartość unikalną dla konkretnego uruchomienia aplikacji. O Boże! Czy to znaczy, że z powodu takiej błahostki, serializacja obiektów idzie w drzazgi i trzeba od razu przerzucać cały system przechowywania do pliku tekstowego? Niekoniecznie! Twórcy języka i o takiej sytuacji pomyśleli więc mogę ją teraz zaprezentować. Poznajcie kolejne słowo kluczowe związane z wykluczaniem danych składowych do zapisu, "transient"!

Odczepimy się od technicznych rzeczy, a zajmiemy się artystycznymi. Być może nie wiecie, że "Swing" oferuje również komponent klasy "JPanel", który może posłużyć Wam do rysowania dowolnych kształtów geometrycznych na ekranie. Czy to linia, czy to kółko, okrąg, prostokąt, obrazek pobrany z pliku. Dzięki poznaniu metody "paintComponent", to wszystko staje się możliwe! Trzeba jednak obchodzić się z nią inaczej niż przy całej reszcie innych funkcji. Dalszy ciąg zostawiam w środku.

Idziemy dalej z biblioteką "Swing" i językiem Java! Podczas omawiania poprzednich tematów padło już wielokrotnie hasło "BorderLayout". I jak zdążyłem wspomnieć, jest to jeden z "układów" dla rozmieszczania mniejszych komponentów na "ramce" o nazwie "JFrame". Ale co to jest "układ"? Co to jest "BorderLayout"? I jakie mogą być jeszcze inne układy jeśli twierdzę, że ten przytoczony to tylko jeden z nich? Niech zawartość artykułu rozwieje te wątpliwości raz na zawsze!

Ponownie zmierzamy w stronę dylematu "podpinania" zdarzeń do przycisków w Javie przy pomocy biblioteki "Swing". Mamy klasy wewnętrzne, a teraz wyrażenie lambda przybliży nas do celu. Gdy zobaczycie jak je zastosować do przycisku, nie będę musiał się nawet pytać która z metod wydaje się Wam przyjemniejsza. Bez ceregieli. Obsługa zdarzeń za pomocą wyrażenia lambda!