Zaawansowane programowanie w C++ (ZPR2024L)

Sprawy organizacyjne

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 162 we wtorki 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. (20 II, Robert Nowak) Sprawy organizacyjne, wprowadzenie; prezentacja (pdf), kod (zip).
  2. (27 II, Łukasz Neumann) Rust, wprowadzenie, model pamięci prezentacja (pdf).
  3. (5 III, Robert Nowak) Obsługa błędów, wyjątki, RAII, sprytne wskaźniki; prezentacja (pdf), kod (zip).
  4. (12 III, Łukasz Neumann) Rust, programowanie współbieżne, prezentacja (pdf).
  5. (19 III, Robert Nowak) Obiekty, polimorfizm, funkcje wirtualne. Zarządzanie pamięcią; prezentacja (pdf), kod (zip).
  6. (26 III, Robert Nowak) Wtyczki. Łączenie C++ z C, Python, Rust. Powtórzenie; prezentacja (pdf), kod (zip).

    Przykładowe zadania

  7. (9 IV, Robert Nowak) Kolokwium 1: zestaw J, rozwiązania (lub kod): smart_ptr, NVI, ogólne (mediana), kompilacja w trybie C++20 g++ plik.cpp --std=c++20.
  8. (16 IV, Witold Wysota) stałość, C++ jako język zorientowany na wartości, std::optional i std::variant;
  9. (23 IV, Witold Wysota) Szablony cz. 1, programowanie generyczne, biblioteka standardowa, funkcje anonimowe;
  10. (7 V, Robert Nowak) Szablony cz. 2, trejty, biblioteka standardowa cz. 2,
  11. (14 V, Robert Nowak) Aplikacje wielowątkowe w C++, synchronizacja, operacje atomowe, std::future, std::promise i inne.
  12. (21 V, Konrad Grochowski) Optymalizacja kodu,
  13. (28 V, Robert Nowak) Boost. Przetwarzanie tekstu. Powtórzenie,

    Przykładowe zadania:

  14. (4 VI, Robert Nowak) Kolokwium 2:
  15. (11 VI, Robert Nowak) C++14, C++17, C++20, C++23

Konsultacje i kontakt z prowadzącymi

Patrz Baza Wiedzy Politechniki Warszawskiej

Przydatne materiały

  • prezentacje z wykładów, semestr 2023Z (6MB)

C++, dokumentacja on-line:

Czasopisma:

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

Dodatkowe przykłady utworzone przez Studentów z biblioteki standardowej C++:

Dodatkowe przykłady, utworzeone przez Studentów, prostych aplikacji w Pythonie z modułami w Rust:

Dodatkowe przykłady, utworzeone przez Studentów biblioteki Boost:

Oprogramowanie

Kompilatory:

Biblioteki:

Inne narzędzia:

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

Wynik ankiety przeprowadzonej w semestrze 2016Z: 42 osoby, średnia 81.4, mediana 80 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
wykres 2016Z wykres 2017L wykres 2017Z wykres 2018L
Wynik ankiety przeprowadzonej w semestrze 2018Z: 31 osób, średnia 93.2, mediana 80 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
wykres 2018Z wykres 2019Z wykres 2020L wykres 2020L