# Zajęcia laboratoryjne z programowania grupa nr 11 studia zaoczne 2022/2023 # Cele przedmiotu Celem przedmiotu jest zapoznanie studentów z procesem pracy nad złożonym serwisem internetowym z uwzględnieniem różnych jego aspektów (przetwarzanie danych, współpraca z bazą danych, komunikacja sieciowa, wymiana informacji pomiędzy różnymi elementami systemu informatycznego, interfejs użytkownika). W ramach przedmiotu studenci wykonują samodzielnie różne podmoduły projektu, które ostatecznie integrują w jeden złożony serwis. Student otrzymuje dowolność w wyborze technologii, z której będzie korzystał w celu wykonania projektu, ale ma także możliwość wyboru ścieżki wyznaczonej przez prowadzącego. Przedmiot oceniany jest na podstawie indywidualnych obron projektów. # Wymagania wstępne w zakresie wiedzy, umiejętności oraz kompetencji społecznych Wymagania: Znajomość zasad programowania obiektowego, wiedza z zakresu: Technologii Internetowych, Systemów Operacyjnych, Baz Danych. Umiejętność pracy z materiałami dodatkowymi, samodzielnego pozyskiwania informacji i analizy przykładów. # Zagadnienia poruszane na laboratorium 1. Przygotowanie środowiska programistycznego: - utworzenie repozytorium, - wybór edytora kodu źródłowego, - logowanie komunikatów. - pomiar pokrycia kodu testami, - automatyczna weryfikacja kodu, - automatyzacja (zapewnienie testowania, kompilowania, pomiaru pokrycia kodu i jego weryfikacji, oraz budowy artefaktów programistycznych za pomocą jednego polecenia), 2. Programowanie sterowane przez testy: - rodzaje testów, - testy jednostkowe: - Red-Green-Refactor; - testy behawioralne; - asercje; - mockowanie; - testy sparametryzowane, - testy eksploracyjne, - debuggowanie kodu: - dobre praktyki, - krokowe uruchamianie programu, - przerwania warunkowe, - zdalne debuggowanie. 3. Paradygmat programowania funkcyjnego: - logika predykatów, - funkcje i ich składanie, - wyrażenia lambda, - wzorzec projektowy map-reduce, - wzorzec projektowy Maybe (wartości opcjonalne) i obsługa wartości `null`, - wzorzec projektowy Try: obsługa wyjątków, - wzorzec projektowy Either i Railway Oriented Programming, - algorytm dziel i zwyciężaj na przykładzie wielowątkowego przetwarzania strumieniowego. 4. Serializacja i deserializacja danych: - wczytywanie i zapisywanie danych w XML, - wczytywanie i zapisywanie danych w JSON. 5. Mapowanie obiektowo-relacyjne (ORM): - obiekty do transferu danych (DTO), - obiekty dostępu do danych (DAO), - model CRUD, - optymalizacja dostępu (natywne zapytania SQL). 6. Usługi sieciowe: - dostęp do zewnętrznych usług sieciowych REST: - z linii poleceń (curl); - z dedykowanej aplikacji klienckiej; - z własnoręcznie napisanego kodu, - tworzenie usług sieciowych w oparciu o REST API: - metody dostępu (GET, POST, PUT, DELETE); - obsługa nieprawidłowych żądań: kody błędów; - obsługa różnych formatów wartości zwracanej, - obsługa generowania pliku "w locie", - obsługa wgrywania plików na serwer. 7. Serwery aplikacji: - osadzanie aplikacji, - monitorowanie osadzonej aplikacji, - debuggowanie aplikacji (patrz zdalne debuggowanie). 8. Interfejs użytkownika: - serwowanie plików statycznych, - obsługa odwołań i przekierowań, - integracja z zewnętrznym frameworkiem. 9. Integracja usług sieciowych: - zabezpieczanie usług OAuth, - autoryzacja i korzystanie z zewnętrznych usług. # Kryteria zaliczenia Zaliczenie zajęć polega na (inkrementalnym!) przygotowaniu projektu, który pokrywa zagadnienia poruszane na zajęciach.