Paweł Rzechonek

Zainteresowania zawodowe: programowanie (C++, Java, C#, F#), technologie webowe, szeroko rozumiana algorytmika, metematyka klasyczna.

Java
język programowania

data ostatniej modyfikacji

Data ostatniej modyfikacji dokumentu (java.phtml) to poniedziałek 22 stycznia 2024 roku (o godzinie 18:04).

ogłoszenia
15 grudnia 2023 r.
zadanie 7 - samotnik (gra logiczna):
Zadanie 7 (samotnik) w mojej grupie (grupa poniedziałkowa PRz) będzie można oddać także na pierwszym laboratorium po Nowym Roku (czyli 8 stycznia 2024), ale należy je skończyć i umieścić na SKOS'ie jeszcze w tym roku (do 31 grudnia 2023).

1 grudnia 2023 r.
wykładowca na zwolnieniu lekarskim:
W związku z chorobą wykładowcy poniedziałkowy wykład o strumieniach i serializacji zostanie przesunięty o tydzień - odbędzie się więc w następnym tygodniu 11 grudnia 2023 r. To samo dotyczy zajęć laboratoryjnych poniedziałkowej grupy PRz.

15 listopada 2023 r.
zadanie 5 - zgadywanie liczby wymiernej:
Doprecyzowałem treść zadania 5 o grze w zgadywanie liczby wymiernej. W szczególności wymieniłem niezbędne elementy, które powinny się znaleźć w oknie aplikacji.

9 października 2023 r.
pierwsze laboratorium:
Pierwsze zajęcia laboratoryjne odbędą się dopiero w przyszłym tygodniu 16 i 18 października 2023 r.

9 października 2023 r.
punkt informacyjny:
W tym miejscu będą się pojawiać ważne ogłoszenia dotyczące organizacji wszystkich zajęć związanych z tym przedmiotem. Proszę sprawdzać te ogłosznia na bieżąco.
terminarz
wykład:
poniedziałek, godz.18-20, s.140 (Paweł Rzechonek)

laboratoria:
poniedziałek, godz.14-16, s.108 (Karol Pokorski)
poniedziałek, godz.16-18, s.137 (Paweł Rzechonek)
środa, godz.12-14, s.108 (Marek Szykuła)
licznik wejść na stronę

1 dzisiaj
2 w obecnym miesiącu
212 w bieżącym roku
903 od powstania strony

o przedmiocie

Kurs języka programowania Java

Java to współczesny obiektowy język programowania stworzony przez Jamesa Goslinga z firmy Sun Microsystems. Od momentu powstania w połowie lat 90-tych XX wieku przeżył on dynamiczny rozwój a zainteresowanie nim nie maleje. Język Java przyciągnął do dziś wiele milionów programistów. Znajduje zastosowanie w każdej ważniejszej gałęzi przemysłu informatycznego i jest obecny w różnego rodzaju urządzeniach, komputerach i sieciach. Popularność Javy wynika przede wszystkim z przenośności programów i niezależności od konkretnej platwormy sprzętowej, a co za tym idzie, ma zastosowanie w Internecie oraz ogólnie w aplikacjach sieciowych. Jego podstawowe koncepcje zostały przejęte z języka Smalltalk (maszyna wirtualna, odśmiecanie pamięci) oraz z języka C++ (znaczna część składni i słów kluczowych).

Celem tych zajęć jest nauka programowania w języku Java oraz zapoznanie z podstawowymi technologiami Javy.

Wymagane przygotowanie
  • Umiejętność programowania w języku C/C++ (podstawowe konstrukcje językowe i obiekty na elementarnym poziomie).
  • Znajomość podstawowych struktur danych (tablice, listy, drzewa, grafy).
  • Umiejętność czytania anglojęzycznej dokumentacji.

literatura

Podrędznik podstawowy
  • Cay S. Horstmann: Java. Podstawy. Wydanie 10. Wydawnictwo HELION, Gliwice 2016.
Dodatkowa literatura polskojęzyczna
  • Cay S. Horstmann: Java 9. Przewodnik doświadczonego programisty. Wydanie 2. Wydawnictwo HELION, Gliwice 2018.
  • Herbert Schildt: Java. Przewodnik dla początkujących. Wydanie 7. Wydawnictwo HELION, Gliwice 2018.
  • Bruce Eckel: Thinking in Java. Wydanie 4. Edycja polska. Wydawnictwo HELION, Gliwice 2006.
  • Krzysztof Barteczko: Java. Od podstaw do technologii. Tom 1 i 2. Wydawnictwo MIKOM, Warszawa 2004.
  • Ken Arnold, James Gosling: Java. WNT, Warszawa 1999.
Dodatkowa literatura anglojęzyczna
  • James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Alex Buckley: The Java Language Specification. Java SE 8 Edition. Oracle America, 2015.
  • Tim Lindholm, Frank Yellin, Gilad Bracha, Alex Buckley: The Java Virtual Machine Specification. Java SE 8 Edition. Oracle America, 2015.
  • Joshua Bloh: Effective Java. Second Edition. Addison-Wesley, 2008.
  • Ken Arnold, James Gosling, David Holmes: The Java Programming Language. Fourth Edition. Addison-Wesley Professional, 2005.
  • Pat Niemeyer, Jonathan Knudsen: Learning Java. Third Edition. O'Reilly Media, 2005.
Literatura elektroniczna

laboratorium

Zasady zaliczenia przedmiotu
Ogólnie:
W semestrze będzie opublikowanych (na tej stronie) kilkanaście prostych zadań do zaprogramowania. Za każde poprawnie zaprogramowane zadanie i oddane w terminie można będzie dostać do 10 punktów (chociaż zadania będą różnej trudności).
Terminy:
Zadania do zaprogramowania będą ogłaszane w tygodniu poprzedzającym termin ich realizacji. Zadania należy oddawać w wyznaczonym terminie w trakcie trwania pracowni. Spóźnienia nie będą tolerowane, za wyjątkiem uzasadnionych sytuacji życiowych: choroba potwierdzona zwolnieniem lekarskim, wezwanie do Sądu, itp.
Prezentacje:
Programy należy prezentować osobiście w czasie pracowni - z każdym studentem chciałbym indywidualnie omówić jego rozwiązanie oraz wskazać wady i braki w programie. Po pracowni program należy mi przekazać (będę jeszcze robić weryfikację antyplagiatową) na SKOS. W trakcie prezentacji programu trzeba się liczyć z pytamiami dotyczącymi zadania: metoda rozwiązania, zastosowane konstrukcje językowe, wykorzystane technologie, itp.
Rozwiązania:
Kody źródłowe własnych programów należy zapisywać na SKOS, ponieważ tylko wtedy rozwiązania zadań będą podlegały weryfikacji autorskiej i ocenie. Jeśli student nie mógł uczestniczyć w zajęciach z powodu awarii połączenia internetowego, to oprócz programu ma przekazać sprawozdanie z realizacji zadania (co zostało zaprogramowane i w którym miejścu w pliku źródłowym oraz czego nie udało się osiągnąć).
Oceny:
Aby zaliczyć laboratorium na ocenę dostateczną trzeba do końca semestru zdobyć 50% z wszystkich możliwych do uzyskania punktów; na ocenę bardzo dobrą trzeba będzie zgromadzić 90% punktów; oceny pośrednie pozostją w liniowej zależności od przedstawionych wymagań granicznych.
Zadania laboratoryjne
  1. rok urodzenia
  2. sito Eratostenesa
  3. figury na płaszczyźnie
  4. wyrażenia arytmetyczne
  5. zgadywanie liczby wymiernej
  6. drzewo BST
  7. samotnik
  8. kalendarz
  9. Mikołaj i dzieciaki
  10. przetwarzanie strumieniowe
SKOS i ranking
  • SKOS - (system komunikacji na odległość ze studentami) w IInf UWr
  • Ranking do zajęć laboratoryjnych w grupie PRz: grupa PRz

wykład

Spis wykładów
  1. historia Javy, podstawy języka Java
  2. pakiety, klasy i obiekty, hermetyzacja
  3. dziedziczenie i polimorfizm
  4. interfejsy, klasy wewnętrzne i anonimowe
  5. wyjątki i dzienniki zdarzeń
  6. AWT - komponenty, zdarzenia, grafika
  7. typy generyczne, kolekcje standardowe
  8. Swing - przegląd komponentów GUI
  9. strumienie i serializacja
  10. Swing - architektura MVC
  11. programowanie współbieżne
  12. JavaFX - stylizowane GUI
  13. lambdy i przetwarzanie strumieniowe
  14. wyliczenia
Materiał omawiany na wykładach
9 października 2023 r: historia Javy, podstawy języka Java

Koncepcja Javy:
  • historia Javy;
  • wirtualna maszyna Javy;
  • podstawowe cechy Javy (podobieństwo składniowe do C++, obiektowość, kontrola typów, odśmiecanie, współbieżność);
  • biblioteki standardowe Javy i ich dokumentacja;
  • technologie Javy;
  • środowisko programistyczne NetBeans.
Składnia języka Java:
  • pierwszy program w Javie;
  • kompilowanie programów - javac;
  • uruchamianie programów - java;
  • typy pierwotne i referencyjne;
  • literały, zmienne, stałe;
  • operatory i wyrażenia;
  • komentarze w programie;
  • instrukcje sterujące wykonaniem programu;
  • tworzenie obiektów (operator new) i ich usuwanie (garbage-collector);
  • klasy opakowujące dla typów pierwotnych;
  • napisy (klasa String) i konkatenacja napisów;
  • standardowe wejście/wyjście;
  • tablice, tablice wielowymiarowe;
  • przeglądanie tablic za pomocą pętli for-each;
  • parametry wywołania programu.
Kursy, artykuły:
Przykładowe programy:
16 października 2023 r: pakiety, klasy i obiekty, hermetyzacja

Pakiety:
  • definiowanie własnych pakietów;
  • pakiet jako struktura otwarta;
  • importowanie całych pakietów, pojedynczych klas z pakietu i składowych statycznych z wybranej klasy;
  • parametr -classpath przy kompilacji i przy uruchamianiu programów;
  • pakowanie klas do archiwum - jar;
  • pakiety standardowe.
Klasy i obiekty:
  • abstrakcja - I filar programowania obiektowego;
  • klasa jako nowy typ danych;
  • definicjowanie włanych klas;
  • składowe klasy: pola i metody;
  • pola definiują stan obiektu;
  • inicjalizacja pól instancyjnych, instancyjny blok inicjalizacyjny;
  • konstruktory, konstruktor domyślny;
  • wywołanie konstruktora wewnątrz innego konstruktora (konstrukcja this);
  • referencja this;
  • utworzenie nowego obiektu operatorem new;
  • metody definiują funkcjonalność obiektu;
  • przekazywanie argumentów do metod;
  • metody ze zmienną liczbą argumentów;
  • przeciążanie nazw konstruktorów i metod;
  • hermetyzacja - II filar programowania obiektowego;
  • ukrywanie implementacji i kontrola dostępu do składowych (deklaratory public, protected, private oraz widoczność pakietowa);
  • pola finalne (deklarator final) i ich inicjalizacja;
  • składowe statyczne (deklarator static);
  • inicjalizacja pól statycznych, statyczny blok inicjalizacyjny;
  • ograniczenia metod staycznych.
Kursy, artykuły:
Przykładowy program:
23 października 2023 r: dziedziczenie i polimorfizm

Dziedziczenie:
  • dziedziczenie - III filar programowania obiektowego;
  • kompozycja i dziedziczenie;
  • deklaracja dziedziczenia;
  • dziedziczenie jednobazowe (dziedziczenie po klasie Object);
  • klasa Object i jej metody toString() oraz equals(Object);
  • hierarchia dziedziczenia w postaci drzewa;
  • inicjalizacja obiektu i konstruktory w klasie pochodnej;
  • inicjalizacja części odziedziczonej (konstrukcja super);
  • dodawanie nowych pól i metod;
  • przesłanianie pól;
  • nadpisywanie metod;
  • upublicznianie składowych;
  • odwołania do składowych z nadklasy (konstrukcja super).
Polimorfizm:
  • polimorfizm - IV filar programowania obiektowego;
  • rzutowanie i operator instanceof;
  • referencja do obiektu klasy bazowej może wskazywać na obiekt dowolnej klasy pochodnej;
  • polimorficzne wywoływanie metod;
  • klasy i metody ostateczne/finalne (modyfikator final);
  • klasy i metody abstrakcyjne (modyfikator abstract).
Przykładowe programy:
30 października 2023 r: interfejsy, klasy wewnętrzne i anonimowe

Interfejsy:
  • rola interfejsów w programowaniu obiektowym;
  • definiowanie interfejsów;
  • implementacja interfejsów;
  • metody domyślne w interfejsach;
  • rozszerzanie i łączenie interfejsów;
  • zastosowania interfejsów;
  • adaptery;
  • interfejs Comparable i porównywanie obiektów;
  • interfejs Cloneable i klonowanie obiektów;
  • metody domyślne w interfejsach;
  • metody statyczne w interfejsach.
Klasy wewnętrzne:
  • definiowanie klas wewnętrznych/zagnieżdżonych;
  • dostęp do klasy zewnętrznej poprzez Klasa.this;
  • tworzenie obiektów klas wewnętrznych poprzez obiekt.new;
  • definiowanie statycznych klas wewnętrznych/zagnieżdżonych;
  • definiowanie wewnętrznych klas lokalnych.
Klasy anonimowe:
  • definiowanie klas anonimowych;
  • konstruktor domyślny w klasie anonimowej;
  • nadpisywanie metod i definiowanie odziedziczonych metod abstrakcyjnych;
  • zastosowanie klas anonimowych;
  • anonimowe klasy wewnętrzne.
Przykładowe programy:
Artykuły w Internecie:
6 listopada 2023 r: wyjątki i dzienniki zdarzeń

Wyjątki:
  • czym są wyjątki i jak się ich używa (podział kodu na procedury obliczeniowe i sterujące);
  • hierarchia klas wyjątków (klasa Throwable);
  • wyjątki kontrolowane i niekontrolowane (klasy Error i RuntimeException);
  • nieprzechwycone wyjątki;
  • zgłaszanie wyjątków - instrukcja throw;
  • klauzula throws i jej postać w przypadku nadpisywania;
  • wychwytywanie wyjątków - instrukcja try-catch;
  • klauzula finally i jej wykonanie;
  • deklarowanie własnych klas wyjątków;
  • kolejkowanie wyjątków.
Asercje:
  • czym są asercje i jak się ich używa (niezmienniki w programie);
  • instrukcja assert;
  • sterowanie programem za pomocą asercji (wyjątek AssertionError);
  • włączanie i wyłączanie asercji (domyślnie asercje są wyłączone).
Dzienniki:
  • czym są dzienniki i jak się ich używa (rejestracja kluczowych czynności wykonywanych przez program);
  • rejestracji komunikatu w dzienniku - klasa Logger;
  • proste watawianie komunikatu do dziennika;
  • hierarchiczna struktura dzienników;
  • poziomy ważności komunikatów - klasa Level;
  • zapis komunikatu do dziennika - klasa Handler.
Przykładowe programy:
Materiały pomocnicze:
13 listopada 2023 r: AWT - komponenty, zdarzenia, grafika

Komponenty AWT:
  • hierarchia klas komponentów AWT;
  • komponenty proste i kontenery;
  • okno aplikacji Frame i ich właściwości;
  • okna dialogowe Dialog i modalność;
  • menadżery rozkładu komponentów w kontenerach.
Obsługa zdarzeń:
  • model obsługi zdarzeń oparty na delegatach;
  • klasy zdarzeń;
  • źródła zdarzeń;
  • interfejsy do nasłuchu zdarzeń;
  • definiowanie delegatów do odbioru zdarzeń;
  • adaptery zdarzeń.
Grafika:
  • obiekt Canvas jako płaszczyzna do rysowania;
  • robot graficzny Graphics;
  • kolory (klasa Color);
  • czcionki (klasa Font);
  • kreślenie napisów i prostych figur.
Przykładowe programy:
Materiały pomocnicze:
20 listopada 2023 r: typy generyczne

Typy generyczne:
  • zastosowanie programowania generycznego;
  • parametryzacja klas;
  • parametryzacja metod;
  • parametry ograniczone;
  • implementacja parametyzacji w Javie - mechanizm znoszenia;
  • typy surowe;
  • parametryzacja interfejsów;
  • parametryzacja podczas dziedziczenia;
  • parametry wieloznaczne - wildcards;
  • ograniczenia dla typów generycznych.
Kolekcje standardowe:
  • kolekcje standardowe i ich używanie w programowaniu;
  • stare kolekcje Vector, Properties i BitSet;
  • architektura interfejsów kolekcyjnych;
  • dynamiczne zbiory danych i interfejs Collection<T>;
  • dynamiczne zbiory asocjacyjne i interfejs Map<K,V>;
  • implementacje interfejsów kolekcyjnych;
  • iteratory i interfejs Iterator<E>;
  • przeglądanie i modyfikowanie kolekcji za pomocą iteratorów;
  • algorytmy zawarte w klasie Arrays i Collections;
  • implementacja własnej kolekcji.
Materiały pomocnicze:
27 listopada 2023 r: Swing - przegląd komponentów GUI

Architektura komponentów GUI w Swingu:
  • hierarchia klas komponentów Swing;
  • komponenty lekkie (kontrolki wewnętrzne) i ciężkie (okna) w Swingu;
  • wspólne właściwości komponentów lekkich i ciężkich;
  • szablon aplikacji w Swingu.
Podstawowe komponenty Swinga:
  • przegląd podstawowych komponentów GUI w Swingu;
  • menu, mnemoniki, akceleratory;
  • menu kontekstowe (metoda isPopupTrigger());
  • dialogi i klasa JOptionPane.
Użyteczne funkcjonalności w Swingu:
  • grafika we własnych komponentach;
  • operacja zamykania okna (metoda setDefaultCloseOperation());
  • klasa Box i rozkład BoxLayout;
  • podpowiedzi (metoda setToolTipText());
  • ikony (klasa Icon);
  • dodatkowe właściwości w komponentach (właściwość clientProperty);
  • zarządzanie fokusem.
Specjalizowane komponenty Swinga:
  • panel dzielony JSplitPane;
  • panel z zakładkami JTabbedPane;
  • panel przewijalny JScrollPane;
  • pasek narzędzi JToolBar.
Przykładowe programy:
Materiały pomocnicze:
11 grudnia 2023 r: strumienie i serializacja

Strumienie:
  • pojęcie strumienia;
  • strumienie do czytania i pisania;
  • strumienie bajtowe i znakowe;
  • strumienie przedmiotowe (konkretne źródło i ujście danych);
  • strumienie przetwarzające i filtrujące;
  • kodowanie w strumieniach znakowych;
  • strumienie kompresujące;
  • serializacja danych (interfejs Serializable);
  • pliki i katalogi (klasa File).
Przykładowe programy:
Materiały pomocnicze:
18 grudnia 2023 r: Swing - architektura MVC

Okna w Swingu:
  • architektura okien w Swingu;
  • layeredPane oraz warstwy i porządek z-order w warstwach;
  • szyba glassPane;
  • okna wewnętrzne JInternalFrame;
  • wygląd komponentów L&F sterowany obiektem UIManager.
Koncepcja MVC w Swingu:
  • idea MVC - oddzielenie danych od ich prezentacji;
  • MVC w Swingu (połączenie widoku i sterownika);
  • nasłuch zmian w modelu danych za pomocą ChangeListener;
  • wykreślacze w widoku
  • zaawansowane komponenty Swinga JList, JTree, JTable oraz komponenty tekstowe;
  • szczegóły MVC na przykładzie listy JList:
    • model danych ListModel,
    • model GUI ListSelectionModel,
    • komunikacja model-widok w AbstractListModel,
    • kreślarz w liście ListCellRenderer.
Przykładowy program:
Materiały pomocnicze:
18 grudnia 2023 r: programowanie współbieżne

Wątki w programie:
  • pojęcie procesu i wątków w procesie;
  • tworzenie wątków w Javie, ich uruchamianie i kończenie;
  • przerywanie działania wątku (metoda interrupt());
  • cykl życia wątku (stany wątku);
  • pola z deklaratorem volatile;
  • synchronizacja wątków (metody i bloki synchronizowane);
  • koordynacja wątków (metody wait(), notify() i notifyAll());
  • przekazanie sterowania do menadżera wątków (metoda yield());
  • czekanie na zakończenie pracy innego wątku (metoda join());
  • wątki demony;
  • priorytety wątków.
Zarządzanie wątkami:
  • wątki, które zwracają wynik - interfejs Callable<>;
  • zarządanie wykonaniem wątków - klasa Executor;
  • asynchroniczne obliczenia - interfejs Future<>;
  • wykonawcy i pule wątków - klasy ThreadPoolExecutor i ScheduledThreadPoolExecutor.
Przykładowe programy:
Materiały pomocnicze:
8 stycznia 2024 r: JavaFX - stylizowane GUI

Budowa aplikacji JavaFX:
  • architektura aplikacji JavaFX;
  • konfiguracja wybranego IDE;
  • Scene Builder;
  • klasa Application;
  • klasy Stage, Scene, StackPane;
  • przegląd kontrolek;
  • obsługa zdarzeń.
Sterowanie wyglądem aplikacji JavaFX:
  • budowanie GUI za pomocą FXML;
  • stylizowanie elementów GUI za pomocą CSS;
  • efekty wizualne;
  • transformacje;
  • umieszczanie elementów multimedialnych w aplikacji.
Materiały pomocnicze:
15 stycznia 2024 r: lambdy i przetwarzanie strumieniowe

Lambdy:
  • lambda jako anonimowy obiekt funkcyjny;
  • składnia wyrażeń lambda (argumenty, treść, wynik);
  • zastępowanie lambdą implementacji interfejsu funkcyjnego (z jedną metodą);
  • używanie interfejsów funkcyjnych z pakietu java.util.function;
  • operator :: do przekształcania metod na wyrażenie lambda;
  • lambdy generyczne;
  • lambdy rekurencyjne.
Przetwarzanie strumieniowe:
  • interfejs Stream<>;
  • przetwarzanie strumieniowe z wykorzystaniem lambd.
Materiały pomocnicze:
22 stycznia 2024 r: wyliczenia

Wyliczenia:
  • definiowanie prostych wyliczeń;
  • typy wyliczeniowe jako klasy dziedziczące po Enum;
  • stałe wyliczeniowe i ich nazwy;
  • import statyczny w przypadku wyliczeń;
  • porównywanie wyliczeń, typ wyliczeniowy w instrukcji if;
  • identyfikacja wyliczeń, typ wyliczeniowy w instrukcji switch-case;
  • przegląd wyliczeń, typ wyliczeniowy w instrukcji for-each;
  • metody statyczne values() i valueOf();
  • wartości porządkowe stałych wyliczeniowych, metoda ordinal();
  • zdefiniowanie pól, metod i konstruktorów w wyliczeniach;
  • zbiory wyliczeń EnumSet<>;
  • mapy wyliczeń EnumMap<>.
Materiały pomocnicze: