Razem ze mną stworzysz pełnoprawną aplikację w języku Java, gotową do użycia przez klienta. Wykorzystasz w tym celu najlepsze praktyki programistyczne, wzorce i testy jednostkowe. Twoja aplikacja będzie w stanie pobierać i przechowywać dane w bazie danych. Stworzymy również instalator, dzięki któremu będzie go można wygodnie uruchomić na innym komputerze.

O kursie

Kompletna aplikacja w języku Java - od zera do installera

DRUGA EDYCJA

Kurs przeprowadza przez proces tworzenia aplikacji desktopowej (JavaFX) od samego zera. Zaczynamy od instalacji podstawowych narzędzi, a kończymy z aplikacją zintegrowaną z bazą danych, składającą się z kilkudziesięciu klas i setek linii kodu. Przy pisaniu kodu przechodzimy przez proces identyczny z tym co spotkasz w pracy - piszemy, ulepszamy, wprowadzamy zasady czystego kodu, refaktorujemy kod, używamy wzorców projektowych gdzie ma to sens, tworzymy testy jednostkowe, by upewnić się, że nasz kod działa, bez konieczności manualnych testów.
Wszystko tworzymy z użyciem IDE IntelliJ w wersji community, więc przy postępie prac nad kodem pokazuję wszystkie przydatne skróty klawiszowe, możliwości IDE oraz jak radzić sobie z debuggowaniem problemów.

Co znajdziesz w kursie

Po szczegółowy spis treści kursu przeskocz tutaj.

Tydzień 1

  • Wprowadzenie do ekosystemu Javy i instalacja niezbędnych narzędzi.
  • Stworzenie szkieletu projektu.
  • Podstawy pracy z Git i Github, by móc dzielić się projektem.

Tydzień 2

  • Koncepcje programowania obiektowego.
  • Fundamenty programowania - ekran powitalny programu.
  • Instrukcja If i odczyt danych od użytkownika. Stworzenie menu wyboru możliwych zadań.
  • Zadanie praktyczne poboczne.

Tydzień 3

  • Podstawy programowania obiektowego - obsługa obiektów Room i Guest.
  • Funkcje - sposób na czystszy kod naszej aplikacji.
  • Enum - rozbudowa obiektów domenowych o wartości predefiniowane.

Tydzień 4

  • Tablice i "for" - zwracanie informacji o pokojach i gościach w formie tekstowej.
  • Zadanie praktyczne poboczne.
  • Zadanie praktyczne poboczne.

Tydzień 5

  • Dziedziczenie w kontekście błędów w Javie.
  • Obsluga błędów w naszej aplikacji, czyli co robić gdy ktoś poda niepoprawne dane.

Tydzień 6

  • Architektura aplikacji. Tworzymy serwisy i repozytoria.

Tydzień 7

  • Debugowanie aplikacji, czyli jak znaleść co zrobiliśmy źle.
  • Ciągłe działanie aplikacji, aż użytkownik nie zdecyduję się zakończyć pracy.
  • Rozbudowa repozytoriów domenowych - przechowywanie danych w pamięci.
  • Zapisywanie i odczyt danych programu do plików, by nigdy już nie podawać dwa razy tego samego gościa.

Tydzień 8

  • Zarządzenie obiektami domenowymi - unikalne identyfikatory i encje.
  • Domena rezerwacji - łączymy aplikację w całość.

Tydzień 9

  • Graficzny interfejs użytkownika - szkielet interfejsu.
  • Wprowadzenie w tematykę wzorców projektowych.
  • Graficzny interfejs użytkowania cd. listowanie danych programu.
  • Singleton, by nie robić bałaganu.
  • Object Pool, krok w stronę wstrzykiwania zależności

Tydzień 10

  • Graficzny interfejs użytkowania cd. dodawanie danych domenowych.

Tydzień 11

  • Graficzny interfejs użytkowania cd. usuwanie danych domenowych.
  • Graficzny interfejs użytkowania cd. edycja danych domenowych.
  • Instalator aplikacji, tworzenie go za każdym razem gdy odpalamy build mavenowy.

Tydzień 12

  • Integracja z baza danych, by być jak profesjonalna aplikacja.

Tydzień 13

  • Testy jednostkowe, by spać bezpiecznie wiedząc, że nowa funkcjonalność nie popsuła starych.

Tydzień 14

  • Funkcjonalność biznesowa od A do Z z TDD, jak pisać to co klient chce otrzymać.

Tydzień 15

  • Czas na podsumowanie projektu.

Kim jestem

Paweł Ćwik

Hej, nazywam się Paweł Ćwik.

Karierę programistyczną rozpocząłem ponad dziesięć lat temu, z językiem Java, jako back-end developer. Z upływem czasu przechodziłem coraz bardziej w kierunku integracji i komunikacji systemów z silnym naciskiem na REST i JMS oraz framework Spring. Następnie przesunąłem się w stronę Front-endu i technologiami związanymi z TypeScript i biblioteką React. Obecnie pracuję ze wszystkimi tymi technologiami - Javą po stronie serwera, oraz Reactem i TypeScript po stronie interfejsu użytkownika.

Od kilka lat temu rozpocząłem przygodę z nauczaniem programowania - przygodę, która trwa do dziś. Jestem w nią zaangażowany do tego stopnia, że stała się moją drugą, ciągle rozwijaną karierą. Moje kursy są do odnalezienia na platformie Strefa Kursów i Udemy. Po tych doświadczeniach wystartowałem z kursami na mojej platformie Clockworkjava.pl.

Prywatnie mam wspaniałą żonę i jestem ojcem trójki maluchów, które dbają o to, bym nie skupiał się wyłącznie na pracy.

Opinie kursantów

Pawel - musze powiedziec ze jestem bardzo zadowolony z Twojego kursu! Praktycznie go calego przerobilem i bardzo duzo sie nauczylem. Najwazniejsze dla mnie byly koncepty i sposob budowy aplikacji. Obecnie w pracy piszemy apke w pythonie i do architektury korzystam garsciami z zebranej wiedzy. Swietnie tlumaczysz! Na tyle dobrze ze kupilem juz kurs Springa i pewnie pociagne dalsze z Udemy. Dzieki! Jeszcze jedno - sila tego kursu jest nacisk na nauke praktycznych umiejetnosci a nie wszystkiego co w dokumentacji 😉

Daniel

Cześć, przede wszystkim chciałabym Ci bardzo bardzo podziękować za kurs(y), i czas poświęcony na odpowiadanie na moje pytania :). Dzięki projektowi realizowanemu z "Kompletna aplikacja..." moje cv w ogóle było brane pod uwagę na jakichkolwiek rekrutacjach. [...] Wracając do meritum - jestem świeżo po pierwszej rekrutacyjnej. [...] PS Rekrutacja przebiegła pomyślnie od czerwca jestem C++ Developer(wiem, C++, nie Java, ale nie można mieć wszystkiego;)).

Ade

Bardzo dobry kurs, podejście prowadzącego nastawione jest na praktyczną naukę tworzenia kompletnej aplikacji, a nie typowe przedstawienie zagadnień na najprostszym możliwym przykładzie.

Paweł

Super kontakt z prowadzącym, odpowiadał na każde zapytanie w wyczerpujący sposób. Fajnie widzieć też jak aplikacja rozwijana jest krok po kroku, by finalnie powstała taka w pełni funkcjonalna.

Tomasz

Szczegółowy spis treści

Wprowadzenie

  • Powitanie
  • Java, jej stan na rok 2020 i przyszłość
  • Ekosystem języka Java
  • Instalacja OpenJDK
  • Instalacja Maven
  • Instalacja IntelliJ
  • Pierwszy program
  • Omówienie pierwszego programu
  • Funkcja „main”
  • Materiały dodatkowe – learning how to learn
  • Grupa na Facebooku i zadanie domowe

Praca z Git i Github

  • W tym rozdziale…
  • Czym jest system kontroli wersji?
  • Pierwszy commit
  • .gitignore
  • Utworzenie repozytorium na Github
  • Synchronizacja z zewnętrznym repozytorium
  • Powrót do poprzedniej wersji
  • Materiały dodatkowe
  • Zadanie domowe

Czym jest programowanie obiektowe?

  • Fundamentalne koncepty programowania obiektowego

Fundamenty programowania w języku Java

  • Podstawowe typy danych
  • GitHub projektu
  • Komentarze
  • Zmienne
  • Zakres zmiennych
  • Biblioteki standardowe
  • Klasy

Odczyt z klawiatury i instrukcja warunkowa „if”

  • Klasa Scanner
  • Odczyt wartości z klawiatury
  • Czym jest algorytm?
  • Instrukcja warunkowa if-else
  • if-else if-else
  • Zakres zmiennych w kontekście If-else
  • Rzut okiem na obsługę wyjątków

Podstawy programowania obiektowego

  • Konstruktor
  • Pola (stan) obiektu
  • Powtórka
  • Porządki
  • this
  • Konstruktor domyślny
  • Ćwiczenie praktyczne 1
  • Konkatenacja
  • Ćwiczenie praktyczne 2
  • Dostęp do pól
  • String.format
  • Ćwiczenie praktyczne 3

Funkcje

  • Tworzenie
  • Parametry
  • Return
  • Zwracanie obiektów
  • Ćwiczenie praktyczne 4
  • Ćwiczenie praktyczne 5
  • Gettery i settery
  • Poziomy widoczności – public i private
  • Enkapsulacja
  • Ćwiczenie praktyczne 6

Typ wyliczeniowy Enum

  • Typ wyliczeniowy
  • Ćwiczenie praktyczne 7
  • Ćwiczenie praktyczne 8

Tablice i pętle "for"

  • Tablice
  • Pętla „for” – podstawy
  • Pętla „for” w aplikacji
  • Ćwiczenie praktyczne 9
  • Łączenie tekstu w pętli
  • Enhanced for

Dziedziczenie w programowaniu obiektowym

  • Wstęp
  • Czym jest dziedziczenie w programowaniu obiektowym
  • Dziedziczenie, a modyfikatory dostępu
  • Nadpisywanie metod
  • Powtórka
  • Polimorfizm
  • Klasy abstrakcyjne
  • Ograniczenia

Obsługa błędów

  • Call Stack
  • Propagacja wyjątków
  • try-catch
  • Manualne rzucanie wyjątków
  • Tworzenie własnych wyjąktów
  • Obsługa wyjątku
  • try-catch-catch
  • Ćwiczenie praktyczne 10
  • Uproszczona obsługa wielu wyjątków
  • finally
  • null
  • Lepszy komunikat przy NullPointerException
  • Dobre praktyki

Architektura aplikacji

  • Architektura trójwarstwowa
  • Typy klas – Obiekty domenowe
  • Typy klas – Repozytoria
  • Typy klas – Serwisy
  • Wdrożenie architektury trójwarstwowej
  • Powtórka
  • Ćwiczenie praktyczne 11
  • Porządki z App i TextUI
  • Podział programu na paczki
  • Ćwiczenie praktyczne 12
  • Public i private w kontekście paczek
  • Package-private
  • Protected
  • Static
  • Final
  • Warning IDE
  • Refaktoring

Wyszukiwanie błędów w aplikacji

  • Debugowanie

Ciągłe działanie programu

  • Pętla "while"

Rozbudowa repozytoriów domenowych

  • Przechowywanie listy gości
  • Dodawanie nowych gości
  • Wypisywanie wszystkich gości
  • Ćwiczenie praktyczne 13

Persystencja danych – pliki

  • Zapis obiektów do pliku
  • Odczyt z pliku
  • Ćwiczenie praktyczne 14
  • Klasy wspomagające
  • Ćwiczenie praktyczne 15

Zarządzanie obiektami domenowymi

  • Unikalny identyfikator
  • Usuwanie obiektu domenowego
  • Edycja obiektu domenowego
  • Ćwiczenie praktyczne 16

Domena rezerwacji

  • Obiekt domenowy
  • Dokonywanie rezerwacji
  • Ćwiczenie praktyczne 17
  • Walidacja daty rezerwacji

JavaFX, wprowadzenie

  • Czym jest JavaFX?
  • Dodanie do projektu i pierwsze okno
  • Główny widok aplikacji
  • Refactoring

Wzorce projektowe - wprowadzenie

  • Czym są wzorce projektowe
  • Data Transfer Object

JavaFX, listowanie obiektów domenowych

  • RoomDTO
  • Lista wszystkich pokoi
  • Ćwiczenie praktyczne 18
  • Rozbudowa widoku pokoju - liczba łóżek
  • Stan w typie enum

Wzorce Projektowe - Singleton

  • Jak działa Singleton?
  • Implementacja dla domen Room i Reservation
  • Ćwiczenie praktyczne 19

Wzorce projektowe - Object Pool

  • Jak działa Object Pool?
  • Implementacja

JavaFX, tworzenie obiektów domenowych

  • Otwieranie nowego okna
  • Dodanie numeru pokoju
  • Dodanie typu łóżka
  • Dodanie wielu łóżek
  • Utworzenie nowego pokoju
  • Przycisk z grafiką
  • Lepszy layout z GridPane
  • CSS w JavieFX
  • Weryfikacja wprowadzonych danych
  • Ćwiczenie praktyczne 20
  • Wybór dat
  • Wybór rezerwującego
  • Utworzenie rezerwacji i obsługa błędów

JavaFX, usuwanie obiektów domenowych

  • Usunięcie pokoju z poziomu GUI
  • Ćwiczenie praktyczne 21

JavaFX, edycja obiektów domenowych

  • Edycja pokoi
  • Ćwiczenie praktyczne 22
  • Edycja rezerwacji

Instalator aplikacji

  • jpackage
  • Tworzenie instalatora w trakcie budowy aplikacji
  • Wersjonowanie semantyczne
  • Odczyt danych z pom.xml

Persystencja obiektów domenowych w bazie danych

  • Czym są bazy danych?
  • Nawiązanie połączenia z poziomu Javy
  • Database Navigator
  • Refactoring
  • Utworzenie interfejsu dla repozytorium
  • Zapis danych domenowych do bazy
  • Odczyt danych domenowych z bazy
  • Usuwanie danych domenowych z bazy
  • Edycha danych domenowych
  • Ćwiczenie praktyczne 23
  • Refaktoring domeny rezerwacji
  • Zapisywanie i odczyta rezerwacji, praca z datami w kontekście baz danych
  • Usuwanie rezerwacji

Testy jednostkowe

  • Czym są testy jednostkowe?
  • Dodanie jUnit 5 do projektu
  • Pierwsze testy
  • Testy obiektu domenowego
  • Testy generowania DTO
  • Struktura testu jednostkowego
  • Ćwiczenie praktyczne 24
  • Testy serwisu
  • Wstrzykiwanie zależności
  • Refaktoring repozytorium
  • Testy repozytorium

Ograniczenie ilości pokoi tylko do wolnych w danym terminie

  • Funkcjonalności biznesowe
  • Jak podejść do problemu?
  • TDD i Mockito. Implementacja funkcjonalnosci na backendzie
  • Implementacja funkcjonalności na backendzie. C.D.
  • Implementacja na frontendzie
  • Powitanie
  • Java, jej stan na rok 2020 i przyszłość
  • Ekosystem języka Java
  • Instalacja OpenJDK
  • Instalacja Maven
  • Instalacja IntelliJ
  • Pierwszy program
  • Omówienie pierwszego programu
  • Funkcja „main”
  • Materiały dodatkowe – learning how to learn
  • Grupa na Facebooku i zadanie domowe
  • W tym rozdziale…
  • Czym jest system kontroli wersji?
  • Pierwszy commit
  • .gitignore
  • Utworzenie repozytorium na Github
  • Synchronizacja z zewnętrznym repozytorium
  • Powrót do poprzedniej wersji
  • Materiały dodatkowe
  • Zadanie domowe
  • Fundamentalne koncepty programowania obiektowego
  • Podstawowe typy danych
  • GitHub projektu
  • Komentarze
  • Zmienne
  • Zakres zmiennych
  • Biblioteki standardowe
  • Klasy
  • Klasa Scanner
  • Odczyt wartości z klawiatury
  • Czym jest algorytm?
  • Instrukcja warunkowa if-else
  • if-else if-else
  • Zakres zmiennych w kontekście If-else
  • Rzut okiem na obsługę wyjątków
  • Konstruktor
  • Pola (stan) obiektu
  • Powtórka
  • Porządki
  • this
  • Konstruktor domyślny
  • Ćwiczenie praktyczne 1
  • Konkatenacja
  • Ćwiczenie praktyczne 2
  • Dostęp do pól
  • String.format
  • Ćwiczenie praktyczne 3
  • Tworzenie
  • Parametry
  • Return
  • Zwracanie obiektów
  • Ćwiczenie praktyczne 4
  • Ćwiczenie praktyczne 5
  • Gettery i settery
  • Poziomy widoczności – public i private
  • Enkapsulacja
  • Ćwiczenie praktyczne 6
  • Typ wyliczeniowy
  • Ćwiczenie praktyczne 7
  • Ćwiczenie praktyczne 8
  • Tablice
  • Pętla „for” – podstawy
  • Pętla „for” w aplikacji
  • Ćwiczenie praktyczne 9
  • Łączenie tekstu w pętli
  • Enhanced for
  • Wstęp
  • Czym jest dziedziczenie w programowaniu obiektowym
  • Dziedziczenie, a modyfikatory dostępu
  • Nadpisywanie metod
  • Powtórka
  • Polimorfizm
  • Klasy abstrakcyjne
  • Ograniczenia
  • Call Stack
  • Propagacja wyjątków
  • try-catch
  • Manualne rzucanie wyjątków
  • Tworzenie własnych wyjąktów
  • Obsługa wyjątku
  • try-catch-catch
  • Ćwiczenie praktyczne 10
  • Uproszczona obsługa wielu wyjątków
  • finally
  • null
  • Lepszy komunikat przy NullPointerException
  • Dobre praktyki
  • Architektura trójwarstwowa
  • Typy klas – Obiekty domenowe
  • Typy klas – Repozytoria
  • Typy klas – Serwisy
  • Wdrożenie architektury trójwarstwowej
  • Powtórka
  • Ćwiczenie praktyczne 11
  • Porządki z App i TextUI
  • Podział programu na paczki
  • Ćwiczenie praktyczne 12
  • Public i private w kontekście paczek
  • Package-private
  • Protected
  • Static
  • Final
  • Warning IDE
  • Refaktoring
  • Przechowywanie listy gości
  • Dodawanie nowych gości
  • Wypisywanie wszystkich gości
  • Ćwiczenie praktyczne 13
  • Zapis obiektów do pliku
  • Odczyt z pliku
  • Ćwiczenie praktyczne 14
  • Klasy wspomagające
  • Ćwiczenie praktyczne 15
  • Unikalny identyfikator
  • Usuwanie obiektu domenowego
  • Edycja obiektu domenowego
  • Ćwiczenie praktyczne 16
  • Obiekt domenowy
  • Dokonywanie rezerwacji
  • Ćwiczenie praktyczne 17
  • Walidacja daty rezerwacji
  • Czym jest JavaFX?
  • Dodanie do projektu i pierwsze okno
  • Główny widok aplikacji
  • Refactoring
  • Czym są wzorce projektowe
  • Data Transfer Object
  • RoomDTO
  • Lista wszystkich pokoi
  • Ćwiczenie praktyczne 18
  • Rozbudowa widoku pokoju - liczba łóżek
  • Stan w typie enum
  • Jak działa Singleton?
  • Implementacja dla domen Room i Reservation
  • Ćwiczenie praktyczne 19
  • Jak działa Object Pool?
  • Implementacja
  • Otwieranie nowego okna
  • Dodanie numeru pokoju
  • Dodanie typu łóżka
  • Dodanie wielu łóżek
  • Utworzenie nowego pokoju
  • Przycisk z grafiką
  • Lepszy layout z GridPane
  • CSS w JavieFX
  • Weryfikacja wprowadzonych danych
  • Ćwiczenie praktyczne 20
  • Wybór dat
  • Wybór rezerwującego
  • Utworzenie rezerwacji i obsługa błędów
  • Usunięcie pokoju z poziomu GUI
  • Ćwiczenie praktyczne 21
  • Edycja pokoi
  • Ćwiczenie praktyczne 22
  • Edycja rezerwacji
  • jpackage
  • Tworzenie instalatora w trakcie budowy aplikacji
  • Wersjonowanie semantyczne
  • Odczyt danych z pom.xml
  • Czym są bazy danych?
  • Nawiązanie połączenia z poziomu Javy
  • Database Navigator
  • Refactoring
  • Utworzenie interfejsu dla repozytorium
  • Zapis danych domenowych do bazy
  • Odczyt danych domenowych z bazy
  • Usuwanie danych domenowych z bazy
  • Edycha danych domenowych
  • Ćwiczenie praktyczne 23
  • Refaktoring domeny rezerwacji
  • Zapisywanie i odczyta rezerwacji, praca z datami w kontekście baz danych
  • Usuwanie rezerwacji
  • Czym są testy jednostkowe?
  • Dodanie jUnit 5 do projektu
  • Pierwsze testy
  • Testy obiektu domenowego
  • Testy generowania DTO
  • Struktura testu jednostkowego
  • Ćwiczenie praktyczne 24
  • Testy serwisu
  • Wstrzykiwanie zależności
  • Refaktoring repozytorium
  • Testy repozytorium
  • Funkcjonalności biznesowe
  • Jak podejść do problemu?
  • TDD i Mockito. Implementacja funkcjonalnosci na backendzie
  • Implementacja funkcjonalności na backendzie. C.D.
  • Implementacja na frontendzie

FAQ

Czym mogę zwrócić kurs?

Tak. Masz na to 14 dni. Nie wymagam podania przyczyny (chociaż byłoby miło otrzymać feedback) - po prostu piszesz do mnie i załatwiamy zwrot.

Jak długo trwa kurs?

Kurs posiada ponad 22 godziny materiału, natomiast możesz go sobie rozłożyć w czasie według zapotrzebowania. W każdym momencie jestem dostępny pod adresem mailowym pawel@clockworkjava.pl lub na dedykowanej grupie i pomogę jeśli coś w kursie będzie wymagało dodatkowych wyjaśnień.

Dla kogo przeznaczony jest kurs? Co musze już umieć?

Kurs przeznaczony jest dla osób, które zaczynają swoją przygodę z Javą, ale mają za sobą jakiś podstawowy kurs (np. na Udemy lub dostępny na mojej stronie darmowy Java Fundamenty). Kurs na pewno przyda się osobom, które chcą teraz stworzyć duży, praktyczny program z użyciem najlepszych praktyk programistycznych, który będzie można dołożyć do swojego portfolio na GitHubie.

Czy po zakończeniu kursu otrzymam certyfikat?

Nie, nie zamierzam nic takiego wystawiać, chyba, że bardzo potrzebujesz. Otrzymasz coś o wiele lepszego jeśli chodzi o wpis do CV - duży projekt na githubie, do portfolio, do którego będzie można się odnosić w trakcie rozmowy kwalifikacyjnej.

Czy w planie jest kurs również od zera do aplikacji webowej z użyciem Springa? Patrząc na oferty pracy i wymaganie raczej nie pojawia się JavaFx, lecz głównie Spring.

Sama JavaFX wniesie niewiele :), bo jak sam zauważyłeś nacisk jest na Springa, zwłaszcza w dużych firmach, JavaFX jes bardziej niszowa, często używana w narzędziach/programach pomocnicznych.
Kurs pierwotnie miał być głównie o JavieFX, a ewoluował do kursu o tym jak stworzyć aplikację 'kompletną' , z odpowiednią architekturą, wzorcami, testami i instalatorem, żeby pani Basia z księgowości mogła dwuklikiem zainstalować. Natomiast od strony programisty ma on pokazać jak radzić sobie z programem większym niż trzy klasy. Wszystko to jest potrzebne w dalszym rozwoju w kierunku Springa. Front jest desktopowy w JavieFX - kwestia tego że kurs będzie miał koło 20h, a gdybym miał wprowadzać jeszcze Spring i REST to doszłoby kolejne 20.
Natomiast co do dalszych kursów to tak i Spring+REST jest w planie, natomiast teraz skupiam się na pierwszym 'dziecku', bo od niego wiele zależy :)