Wersja podstawowa
1. Wprowadzenie do programowania
- Jak rozmawiać z komputerem?
- Kod maszynowy i kod źródłowy
- Języki programowania, kompilatory, interpretery
- Proces, program, aplikacja
- Rzut oka na współczesny świat technologii programistycznycha
- Rodzaje aplikacji: frontend vs backend, aplikacje wsadowe, graficzne, webowe i mobilne; adekwatne technologie
- Przegląd języków i paradygmatów programowania
- Platforma Java – dlaczego powstała, jej miejsce w dzisiejszym świecie IT, cechy charakterystyczne i zastosowania
- Biblioteki i frameworki
- Instalacja i konfiguracja platformy Java
- Podstawy pracy w wierszu poleceń
- Kompilacja i uruchamianie
- Interaktywny interpreter jshell
- Instalacja i konfiguracja wybranego środowiska deweloperskiego (IDE)
- Przegląd środowisk właściwych dla języka Java
- Zalety IDE i techniki pozwalające na sprawną pracę
- Budowa programu w języku Java
- Struktura projektu: pliki źródłowe i skompilowane, katalogi, pakiety, klasy
- Konwencje dot. nazw i formatowania kodu
- Proste metody komunikacji z użytkownikiem: standardowe wejście i wyjście, okna dialogowe
- Zmienne i typy
- Podstawowe typy danych: liczby całkowite i z ułamkiem, napisy, typ logiczny
- Wyrażenia arytmetyczne i logiczne
- Instrukcje sterujące języka Java
- Instrukcje warunkowe: if, switch
- Pętle: while, for
- Pisanie prostych algorytmów
- Tablice
- Elementy proceduralnego stylu programowania
- Metody w języku Java
- Tworzenie sparametryzowanych funkcji i procedur
- Wydzielanie powtarzających się fragmentów kodu; podstawy refaktoryzacji
- Obiektowy styl programowania
- Czym są obiekty, czym są klasy?
- Odniesienia do pojęć ze świata rzeczywistego
- Obiekty i klasy technicznie
- Elementy składowe klas, budowa obiektów
- Struktura pamięci maszyny wirtualnej Javy; stos i sterta; referencje do obiektów
- Dziedziczenie i interfejsy
- Rozszerzanie klas i nadpisywanie metod
- Polimorfizm, zasada podstawiania
- Interfejsy i klasy abstrakcyjne
- Enkapsulacja (hermetyzacja)
- Modyfikatory widoczności
- Techniki i korzyści z enkapsulacji
- Wyjątki w języku Java
- GUI w programowaniu obiektowym: komponenty graficzne jako obiekty
- Technologia Swing jako jedna z możliwości tworzenia GUI w Javie
- Obsługa zdarzeń w aplikacji okienkowej
- Budowanie interfejsu użytkownika na dwa sposoby: pisząc odpowiedni kod w Javie oraz za pomocą edytora graficznego
- Napisy
- Klasa String: możliwości i ograniczenia
- Budowanie napisów
- Przetwarzanie tekstu, w tym podstawy wyrażeń regularnych
- Kolekcje: listy, zbiory, słowniki; Java Collections Framework
- Wykorzystanie w algorytmach i schematach przetwarzania danych
- Wpływ właściwego doboru struktur danych na wydajność aplikacji
- Podstawy funkcyjnych technik programowania: lambdy i strumienie
- Obsługa daty i czasu
- Obsługa plików
- Pliki binarne i tekstowe, bajty i znaki, kodowania znaków
- Strumienie wejścia/wyjścia i podstawowa obsługa plików w programach Javy (z większym naciskiem na pliki tekstowe)
- Klasa Files i operowanie na całych plikach
- Popularne formaty zapisywania danych strukturalnych i podstawy ich obsługi w Javie: CSV, XML, JSON
- Dostęp do zdalnych serwisów typu Web API / Rest API
- Wątki i synchronizacja
- Elementy wielowątkowości wbudowane w język Java
- Klasy biblioteki standardowej wspierające wielowątkowość
- Typy generyczne
- Elementy programowania funkcyjnego od Javy 8
- Wyrażenia lambda i referencje do metod
- Strumienie i operacje na nich
- Redukcje, kolektory i schematy przetwarzania danych
- Budowanie projektów Java: command-line/Ant/Maven/Gradle
- Projekt jako biblioteka; zależności między projektami
- Centralne Repozytorium Mavena i wykorzystywanie bibliotek „trzeciej strony” we własnych projektach
- Przegląd użytecznych bibliotek programistycznych open source
- GIT i kontrola wersji kodu
- Zapisywanie i odtwarzanie historii zmian
- Rozgałęzienia i ich późniejsze łączenie (branch/merge)
- Repozytoria lokalne i zdalne; różne scenariusze pracy zespołowej
- Testy i kontrola jakości kodu
- Zapewnianie poprawności oprogramowania
- Dobre i złe praktyki programistyczne
- Wypisywanie informacji diagnostycznych (tzw. logów)
- Uruchamianie programu w trybie debug
- JUnit i testy jednostkowe w Javie
- Dodatkowe biblioteki przydatne w pisaniu testów: AssertJ, Mockito
- Zasada działania aplikacji webowej strony serwera
- Protokół HTTP
- Podstawy HTML i CSS - w razie potrzeby
- Podstawy technologii serwletów w Javie
- Filozofia pracy na serwerze aplikacji. Czym jest Java Enterprise Edition? RedHat WildFly i inne serwery aplikacji
- Obsługa żądań i generowanie odpowiedzi
- Parametry zapytań i obsługa formularzy
- Utrzymywanie sesji i atrybuty w różnych zakresach
- Wprowadzenie do technologii Java Server Pages (JSP) i różne podejścia do podziału odpowiedzialności między JSP a Javę
- Tworzenie i uruchamianie projektu w oparciu o Spring Boot
- Aplikacja webowa w technologii Spring MVC
- Kontroler: rola, zasada działania, mapowanie URL-i i wybór metody na podstawie zapytania
- Obsługa parametrów i nagłówków
- Warstwa widoku i technologie szablonowe (JSP / Thymeleaf)
- Model: przekazywanie danych między aplikacją a widokiem
- Obsługa formularzy
- Zasada działania aplikacji Spring
- Warstwy typowego projektu
- Adnotacje i wstrzykiwanie zależności; rola interfejsów w projektach Spring
- Różne sposoby inicjalizacji i wstrzykiwania komponentów („beanów”)
- Zabezpieczanie aplikacji - podstawy Spring Security
- Wprowadzenie do technologii baz danych
- Serwer baz danych (DBMS)
- Koncepcja relacyjnych baz danych i pomysły alternatywne
- Instalacja i konfiguracja PostgreSQL lub innego serwera baz danych
- Podstawy języka SQL
- Polecenie SELECT, wyrażenia i warunki
- Sortowanie i grupowanie
- Łączenie danych z wielu tabel
- Wstawianie i aktualizacja danych
- Projektowanie relacyjnych baz danych (na przykładzie)
- Definiowanie tabel, typy kolumn
- Klucze i inne więzy integralności
- Unikanie redundancji, postacie normalne
- JDBC i bezpośrednie zadawanie zapytań SQL z aplikacji Java
- Zalety i wady bezpośredniego dostępu do baz danych
- Modyfikacja danych i praca z transakcjami
- Obiektowy dostęp do baz danych (ORM) w technologii JPA/Hibernate
- Klasy encji; generowanie na podstawie tabel
- Operacje odczytu i modyfikacji danych
- Zadawanie własnych zapytań JPQL oraz natywnych
- Dostęp do danych z aplikacji Spring
- Warstwa danych („repository”) w aplikacji Spring
- Automatyczne instancjonowanie interfejsu przez technologię Spring Data
- Koncepcja SOA i rodzaje usług sieciowych
- Usługi sieciowe typu SOAP
- Technologia JAX-WS i tworzenie serwera SOAP w ramach Java EE
- Generowanie i rola WSDL
- Tworzenie klienta i architektura klient/serwer
- Usługi typu REST
- Zasoby, URL-e i metody HTTP
- Technologia JAX-RS i tworzenie serwera REST w ramach Java EE
- Parametry, nagłówki, odnośniki i przekierowania
- Rozszerzanie JAX-RS o własne typy zawartości na przykładzie generowania PDF
- Tworzenie serwera REST za pomocą Spring MVC
- Dostęp do usług REST od strony klienta
- Tworzenie aplikacji tekstowych i wsadowych
- Zastosowanie Javy do przetwarzania danych zawartych w plikach
- Tworzenie aplikacji z graficznym interfejsem użytkownika
- Tworzenie aplikacji webowych
- w oparciu o serwlety i JSP (podstawy)
- w oparciu o Spring MVC i Thymeleaf
- Podstawy tworzenia usług sieciowych typu SOAP i REST