Pracownia programowania studia zaoczne 2022/2023
Go to file
2022-11-12 20:24:50 +01:00
ćwiczenia/01 Exc 01-3 2022-10-14 21:12:55 +02:00
demo Imperative code example. 2022-11-12 20:24:50 +01:00
prezentacje First batch of presentations. 2022-10-14 21:43:20 +02:00
README.md Typo correction 2022-10-15 10:15:16 +02:00

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),
  1. 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.
  1. 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.
  1. Serializacja i deserializacja danych:
  • wczytywanie i zapisywanie danych w XML,
  • wczytywanie i zapisywanie danych w JSON.
  1. Mapowanie obiektowo-relacyjne (ORM):
  • obiekty do transferu danych (DTO),
  • obiekty dostępu do danych (DAO),
  • model CRUD,
  • optymalizacja dostępu (natywne zapytania SQL).
  1. 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.
  1. Serwery aplikacji:
  • osadzanie aplikacji,
  • monitorowanie osadzonej aplikacji,
  • debugowanie aplikacji (patrz zdalne debugowanie).
  1. Interfejs użytkownika i logika biznesowa:
  • serwowanie plików statycznych,
  • obsługa odwołań i przekierowań,
  • integracja z zewnętrznym frameworkiem,
  • warstwa logiki biznesowej.
  1. 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ęć