151 lines
5.9 KiB
Markdown
151 lines
5.9 KiB
Markdown
# 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,
|
||
- debugowanie kodu:
|
||
- dobre praktyki,
|
||
- krokowe uruchamianie programu,
|
||
- przerwania warunkowe,
|
||
- zdalne debugowanie.
|
||
|
||
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,
|
||
- debugowanie aplikacji (patrz zdalne debugowanie).
|
||
|
||
8. Interfejs użytkownika i logika biznesowa:
|
||
- serwowanie plików statycznych,
|
||
- obsługa odwołań i przekierowań,
|
||
- integracja z zewnętrznym frameworkiem,
|
||
- warstwa logiki biznesowej.
|
||
|
||
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:
|
||
- 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
|
||
|
||
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ęć
|