ćwiczenia | ||
demo | ||
prezentacje | ||
README.md |
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
- 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),
- Programowanie sterowane przez testy:
- rodzaje testów,
- testy jednostkowe:
- Red-Green-Refactor;
- testy behawioralne;
- asercje;
- mockowanie;
- testy sparametryzowane,
- testy eksploracyjne,
- debugowanie kodu:
- dobre praktyki,
- krokowe uruchamianie programu,
- przerwania warunkowe,
- zdalne debugowanie.
- 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.
- Serializacja i deserializacja danych:
- wczytywanie i zapisywanie danych w XML,
- wczytywanie i zapisywanie danych w JSON.
- Mapowanie obiektowo-relacyjne (ORM):
- obiekty do transferu danych (DTO),
- obiekty dostępu do danych (DAO),
- model CRUD,
- optymalizacja dostępu (natywne zapytania SQL).
- 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.
- Serwery aplikacji:
- osadzanie aplikacji,
- monitorowanie osadzonej aplikacji,
- debugowanie aplikacji (patrz zdalne debugowanie).
- Interfejs użytkownika i logika biznesowa:
- serwowanie plików statycznych,
- obsługa odwołań i przekierowań,
- integracja z zewnętrznym frameworkiem,
- warstwa logiki biznesowej.
- 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:
- Zagadnienia 1-3 – 20% oceny (20 punktów do zdobycia),
- Zagadnienia 4-6 – 40% oceny (40 punktów do zdobycia),
- Zagadnienia 7-9 – 40% oceny (40 punktów do zdobycia).
Dodatkowe punkty
Dodatkowe punkty można zyskać za:
- aktywność na zajęciach,
- prawidłową dekompozycję kodu:
- segregacja interfejsów;
- kohezja na poziomie klasy i metody;
- konsekwentną i logiczną organizację kodu w pakiety (np. zastosowanie Domain Driven Design),
- czystość kodu (ang. Clean Code):
- odpowiednie (ang. meaningful), anglojęzyczne nazwy zmiennych, metod, klas i pakietów;
- posortowanie atrybutów i metod według kolejności użycia lub wywołania;
- minimalizację liczby parametrów wywołania metod (lub funkcji);
- powstrzymanie się od korzystania z efektów ubocznych, niemutowalność;
- upewnienie się że metoda i klasa robi jedną rzecz (patrz kohezja);
- odpowiednią liczbę metod publicznych w klasie (do siedmiu);
- właściwą liczbę linii kodu w metodzie (5 +/- 2, przy czym strumienie należy liczyć jako jedną linię),
- stosowanie zasad:
- SOLID;
- YAGNI/KISS;
- DRY,
- zastosowanie wzorców projektowych nieujętych w zagadnieniach (Uwaga! Tam gdzie to ma sens),
- zastosowanie metodologii Test Driven Development, szczególnie w odmianie Behavior-Driven Development,
- zastosowanie nietrywialnej warstwy logiki biznesowej wraz ze 100% pokryciem testami tej warstwy,
- korzystanie z narzędzi do automatycznego sprawdzania kodu i stosowanie się do ich uwag,
- zastosowanie paradygmatu funkcyjnego wszędzie gdzie się da.
Oceny
Punkty | Ocena |
---|---|
do 50 | niedostateczny (2.0) |
51 do 60 | dostateczny (3.0) |
61 do 70 | dostateczny plus (3.5) |
71 do 80 | dobry (4.0) |
81 do 90 | dobry plus (4.5) |
powyżej 90 | bardzo dobry (5.0) |
Zalecana literatura
- Jacobson Daniel, Brail Greg, Woods Dan "Interfejs Api, strategia programisty" Helion (2015)
- Craig Walls "Spring Boot in Action" ISBN 9781617292545, (2015)
- Christian Bauer, Gavin King, Gary Gregory "Java Persistence. Programowanie aplikacji bazodanowych w Hibernate. Wydanie II" Helion (2016)
- https://www.jetbrains.com/idea/documentation/
- Steve McConnell "Code Complete, 2nd Edition"
- Robert C. Martin "Clean Code"
- Tutoriale i kursy sieciowe - linki podawane w materiałach z zajęć