Zaawansowane programowanie w C++ (ZPR2024Z)

Sprawy organizacyjne

Zespół ZPR24Z na MS Teams PW

Zakładamy znajomość programowania strukturalnego i podstawowych algorytmów (np. ukończony przedmiot PIPR), znajomość programowania obiektowego (np. ukończony przedmiot PROBI), znajomość podstawowych elementów C++ (np. ukończony przedmiot PROBI), znajomość wzorców projektowych (np. ukończony przedmiot SWO), znajomość podstawowych potoków wytwarzania oprogramowania (np. ukończony przedmiot SWO), umiejętność czytania diagramu klas UML (np. ukończony przedmiot SWO)

Zaliczenie Przedmiot jest zaliczany na podstawie wyników sprawdzianów, przeprowadzanych podczas wykładów (punktacja 0 - 20pkt.) i wyników projektu (punktacja 0 - 20 pkt.). Nie jest wymagana obecność na wykładzie i nie będzie ona sprawdzana. Ocena końcowa jest określana na podstawie łącznej liczby punktów zgodnie z poniższą tabelą.
liczba punktówocena
37 - 40 pktpięć
33 - 36 pktcztery i pół
29 - 32 pktcztery
25 - 28 pkttrzy i pół
21 - 24 pkttrzy
0 - 20 pktdwa

Bieżące oceny cząstkowe są uzupełniane na serwerze USOS

Sprawdziany Sprawdziany odbędą w terminach podanych niżej. Każdy sprawdzian jest oceniany w skali 0-10 pkt. Oceny poszczególnych zadań będą w USOS.

Projekt: terminy, lista tematów i zasady oceniania

Zadanie dodatkowe

Wykłady

Wykłady będą odbywały się w sali 202 w poniedziałki w godzinach 18.15 - 20.00. Tematy poszczególnych wykładów oraz materiały pomocnicze (slajdy i inne) będą umieszczane poniżej. Przykładowe fragmenty kodu są umieszczane w archiwum zip. kompilacja przykładów w trybie C++11 lub nowszym, przykładowe polecenie: g++ nazwa.cpp

  1. (7 X, Robert Nowak) Sprawy organizacyjne, wprowadzenie; prezentacja (pdf), kod (zip).
  2. (14 X, Robert Nowak) Obiekty, polimorfizm, funkcje wirtualne. Zarządzanie pamięcią; prezentacja (pdf), kod (zip).
  3. (21 X, Łukasz Neumann) Rust, wprowadzenie, model pamięci prezentacja (pdf).
  4. (28 X, Robert Nowak) Obsługa błędów, wyjątki, RAII, sprytne wskaźniki; prezentacja (pdf), kod (zip).
  5. (4 XI, Łukasz Neumann) Rust, programowanie współbieżne, prezentacja (pdf).
  6. (14 XI, Robert Nowak) Wtyczki. Łączenie C++ z C, Python, Rust. Powtórzenie; prezentacja (pdf), kod (zip).

    Przykładowe zadania

  7. (18 XI)
  8. (25 XI, Witold Wysota) stałość, C++ jako język zorientowany na wartości, std::optional i std::variant; prezentacja (pdf).
  9. (2 XII, Witold Wysota) Szablony cz. 1, programowanie generyczne, biblioteka standardowa, funkcje anonimowe; prezentacja (pdf).
  10. (9 XII, Robert Nowak) Szablony cz. 2, trejty, biblioteka standardowa cz. 2, prezentacja (pdf), kod (zip).
  11. (16 XII, Robert Nowak) Aplikacje wielowątkowe w C++, synchronizacja, operacje atomowe, std::future, std::promise i inne. prezentacja (pdf), kod (zip).
  12. (8 I, Łukasz Neumann) Rust,
  13. (13 I, Robert Nowak) Biblioteki Boost. Przetwarzanie tekstu. LLM w wytwarzaniu oprogramowania. Prototypowanie, programowanie interaktywne w emacs org-mode. C++14, C++17, C++20, C++23.
  14. (20 I)
  15. (27 I, Robert Nowak) Kolokwium 2:

Literatura:

  • E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Wzorce projektowe, WNT, 2005.
  • A. Alexandrescu, Nowoczesne projektowanie w C++, WNT, 2005.
  • A. Alexandrescu and H. Sutter, Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk, Helion, 2005.
  • S. Meyers, 50 efektywnych sposobów na udoskonalenie Twoich programów, Helion, 2003.
  • B. Stroustrup, Programowanie. Teoria i praktyka z wykorzystaniem C++, Helion, 2010.
  • R. Nowak, A. Pająk, Język C++: mechanizmy, wzorce, biblioteki, BTC, 2010.
  • A. Hunt, D. Thomas, Pragmatyczny programista, Helion, 2011.
  • Software Engineering Body of Knowledge (SWEBOK) v3, IEEE Computer Society, 2014

Konsultacje i kontakt z prowadzącymi

Patrz Baza Wiedzy Politechniki Warszawskiej

Przydatne materiały

  • prezentacje z wykładów, semestr 2024L (7MB)

C++, dokumentacja on-line:

Czasopisma:

Dodatkowe przykłady utworzone przez Studentów ZPR

Opisy elementów biblioteki standardowej C++:

Przykłady prostych aplikacji w Pythonie z modułami w Rust:

Opisy elementów biblioteki Boost:

Oprogramowanie

Kompilatory:

Biblioteki:

Inne narzędzia:

Ankiety dotyczące czasu poświęconego na przedmiot

Wynik ankiety przeprowadzonej w semestrze 2017L: 60 osób, średnia 91.6, mediana 90 Wynik ankiety przeprowadzonej w semestrze 2017Z: 38 osób, średnia 110, mediana 100 Wynik ankiety przeprowadzonej w semestrze 2018L: 31 osób, średnia 92.5, mediana 87 Wynik ankiety przeprowadzonej w semestrze 2018Z: 31 osób, średnia 93.2, mediana 80
wykres 2017L wykres 2017Z wykres 2018L wykres 2018Z
Wynik ankiety przeprowadzonej w semestrze 2019Z: 42 osoby, średnia 122.9, mediana 120 Wynik ankiety przeprowadzonej w semestrze 2020L: 21 osoby, średnia 119.4, mediana 110 Wynik ankiety przeprowadzonej w semestrze 2020Z: 28 osób, średnia 134.7, mediana 114 Wynik ankiety przeprowadzonej w semestrze 2024L: 42 osoby, średnia 97, mediana 90
wykres 2019Z wykres 2020L wykres 2020L wykres 2024L