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 20 stycznia 2020 roku (o godzinie 19:10).

ogłoszenia
8 października 2019 r.
pierwsze laboratorium:
W pierwszym tygodniu nauki laboratoria nie odbywają się. Pierwsze zajęcia laboratoryjne zaplanowałem dopiero na przyszły tydzień: 15-16 października 2019 r.

1 października 2019 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:
wtorek 16-18 s.4 (Paweł Rzechonek)

laboratoria:
wtorek 18-20 s.110 (Paweł Rzechonek)
środa 12-14 s.107 (Piotr Witkowski)
licznik wejść na stronę

1 dzisiaj
10 w obecnym miesiącu
27 w bieżącym roku
1914 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. 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 (proszę nie wysyłać programów pocztą elektroniczną, ani nie przekazywać ich poprzez kolegów czy koleżanki). W trakcie prezentacji programu trzeba się liczyć z pytamiami dotyczącymi zadania: metoda rozwiązania, zastosowane konstrukcje językowe, wykorzystane technologie, itp.
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. liczby w zapisie rzymskim
  2. figury na płaszczyźnie
  3. zbiory asocjacyjne
  4. zgadnij ustawienie
  5. drzewa BST
  6. kolorowy rysunek
  7. gra Gomoku
  8. kalkulator
  9. Mikołaj i dzieciaki
  10. Planety i księżyce
Ranking
  • grupa PRz (pdf) hasło: stat2012

wykład

Spis wykładów
  1. historia Javy, podstawy języka Java
  2. klasy i obiekty
  3. dziedziczenie i polimorfizm
  4. interfejsy, klasy wewnętrzne, klasy anonimowe
  5. wyjątki, asercje, dzienniki zdarzeń
  6. typy generyczne, kolekcje standardowe
  7. AWT - komponenty, zdarzenia, grafika
  8. Swing - przegląd komponentów GUI
  9. Swing - architektura MVC
  10. JavaFX - stylizowane GUI
  11. programowanie współbieżne
  12. strumienie, serializacja
  13. lambdy, wyliczenia
  14. refleksja, adnotacje
Materiał omawiany na wykładach
8 października 2019 r: 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;
  • literały, zmienne, operatory, wyrażenia, instrukcje sterujące, komentarze;
  • typy pierwotne i referencyjne;
  • tworzenie obiektów (operator new) i ich usuwanie (garbage-collector);
  • klasy opakowujące dla typów pierwotnych;
  • napisy (klasa String) i konkatenacja napisów;
  • tablice, tablice wielowymiarowe;
  • przeglądanie tablic za pomocą pętli for-each;
  • standardowe wejście/wyjście;
  • parametry wywołania programu.
Kursy, artykuły:
Przykładowe programy:
15 października 2019 r: klasy i obiekty

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;
  • odzyskiwanie pamięci przez garbage-collector, metoda finalize();
  • pakowanie klas - jar.
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;
  • pakiety standardowe.
Kursy, artykuły:
Przykładowy program:
22 października 2019 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 danej klasy 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).
Komentarze dokumentacyjne:
  • umieszczanie komentarzy dokumentacyjnych w programie;
  • tagi w komentarzach dokumentacyjnych;
  • generowanie dokumentacji - javadoc.
Przykładowe programy:
22 października 2019 r: interfejsy

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;
  • dostęp do klasy zewnętrznej poprzez Klasa.this;
  • tworzenie obiektów klas wewnętrznych poprzez obiekt.new;
  • definiowanie statycznych klas 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:
29 października 2019 r: wyjątki

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:
5 listopada 2019 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:
12 listopada 2019 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:
19 listopada 2019 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:
26 listopada 2019 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:
3 grudnia 2019 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:
10 grudnia 2019 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());
  • wymuszanie pracy innych wątków (metody yield() i join());
  • wątki demony;
  • priorytety wątków.
Przykładowy program:
Materiały pomocnicze:
17 grudnia 2019 r: strumienie

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 (interfejs Serializable);
  • strumieniowe przetwarzanie danych (interfejs Stream<>) z wykorzystaniem lambd;
  • pliki i kataogi (klasa File);
  • archiwa javy - jar.
Przykładowy program:
Materiały pomocnicze:
19 grudnia 2018 r: lambdy, wyliczenia

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.lang.reflect;
  • operator :: do przekształcania metod na wyrażenie lambda;
  • lambdy generyczne;
  • zastosowanie lambd.
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.
Materiały pomocnicze:
21 stycznia 2020 r: refleksja, adnotacje

Refleksja:
  • typy otoczkowe i autoboxing;
  • klasa Class;
  • literały klasowe;
  • dynamiczne ładowanie klas;
  • pojęcie refleksji i jej przeznaczenie;
  • pozyskanie informacji o klasie w trakcie wykonania programu;
  • działania na składowych w obiekcie z wykorzystaniem refleksji;
  • dekompilacja programów - javap.
Adnotacje:
  • adnotacje - notatki w programie;
  • definicja notatki @interface i jej użycie;
  • strategia zachowania notatek @Retention;
  • określenie typu deklaracji związanej z notatką @Target;
  • notatki z wartościami domyślnymi składowych;
  • notatki z jedną składową i notatki znacznikowe;
  • czytanie notatek w czasie działania programu;
  • notatki wbudowane.
Materiały pomocnicze:

For Erasmus Students

Tutorials
  1. Language Basics
  2. Classes and Objects
  3. Interfaces and Inheritance
  4. Creating a GUI With JFC/Swing
  5. Generics
Exercises
  1. the number to words converter
  2. polynomials
  3. expression trees
  4. coloured drawings
  5. the binary search tree