06-ZPRPLI0/README.md

151 lines
5.9 KiB
Markdown
Raw Normal View History

2022-10-03 17:20:57 +02:00
# Zajęcia laboratoryjne z programowania grupa nr 11 studia zaoczne 2022/2023
2022-10-03 20:48:41 +02:00
## Cele przedmiotu
2022-10-03 17:20:57 +02:00
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.
2022-10-03 20:48:41 +02:00
Student otrzymuje *dowolność w wyborze technologii*, z której będzie korzystał w celu wykonania
2022-10-03 17:20:57 +02:00
projektu, ale ma także możliwość wyboru ścieżki wyznaczonej przez prowadzącego. Przedmiot oceniany
jest na podstawie indywidualnych obron projektów.
2022-10-03 20:48:41 +02:00
## Wymagania wstępne w zakresie wiedzy, umiejętności oraz kompetencji społecznych
2022-10-03 17:20:57 +02:00
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.
2022-10-03 20:48:41 +02:00
## Zagadnienia poruszane na laboratorium
2022-10-03 18:53:34 +02:00
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).
2022-10-03 20:48:41 +02:00
8. Interfejs użytkownika i logika biznesowa:
2022-10-03 18:53:34 +02:00
- serwowanie plików statycznych,
- obsługa odwołań i przekierowań,
2022-10-03 20:48:41 +02:00
- integracja z zewnętrznym frameworkiem,
- warstwa logiki biznesowej.
2022-10-03 18:53:34 +02:00
9. Integracja usług sieciowych:
- zabezpieczanie usług OAuth,
- autoryzacja i korzystanie z zewnętrznych usług.
2022-10-03 20:48:41 +02:00
## Kryteria zaliczenia
2022-10-03 18:53:34 +02:00
Zaliczenie zajęć polega na (inkrementalnym!) przygotowaniu projektu, który
2022-10-03 20:48:41 +02:00
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,
2022-10-03 20:59:07 +02:00
- 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,
2022-10-03 20:48:41 +02:00
- zastosowanie paradygmatu funkcyjnego wszędzie gdzie się da.
### Oceny
| Punkty | Ocena |
|:------:|:-----:|
2022-10-03 20:59:07 +02:00
| do 50 | niedostateczny (2.0) |
2022-10-03 20:48:41 +02:00
| 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) |
2022-10-03 20:59:07 +02:00
## Zalecana literatura
1. Jacobson Daniel, Brail Greg, Woods Dan "Interfejs Api, strategia programisty" Helion (2015)
2. Craig Walls "Spring Boot in Action" ISBN 9781617292545, (2015)
3. Christian Bauer, Gavin King, Gary Gregory "Java Persistence. Programowanie aplikacji
bazodanowych w Hibernate. Wydanie II" Helion (2016)
4. https://www.jetbrains.com/idea/documentation/
5. Steve McConnell "Code Complete, 2nd Edition"
6. Robert C. Martin "Clean Code"
7. Tutoriale i kursy sieciowe - linki podawane w materiałach z zajęć