Zaawansowane programowanie w języku C++

 

Czas trwania –3 dni lub 6 dni (24h)

Proporcje wykład/warsztat: 60%/40%

 

Informację o szkoleniu
Celem szkolenia jest dokonanie konsolidacji wiedzy i uzupełnienie braków w kompetencjach w kontekście standardu C++ jak również osadzenie narzędzi i procesów tworzenia oprogramowania w realiach współczesnych wymagań Inżynierii Oprogramowania.
Podczas szkolenia uczestnik zapoznaje się ze współczesnymi bibliotekami przetwarzającymi dane. Uczy się identyfikacji i tworzenia oprogramowania z użyciem wzorców GoF oraz elementów programowania funkcyjnego. Ponadto kursant zdobywa wiedzę jak tworzyć aplikacje wielowątkowe z użyciem mechanizmów biblioteki standardowej.

Komu dedykowane jest szkolenie?
Osobą programującym w języku C i C++ w środowisku GNU/Linux lub MS Windows.
Osobą znającym w podstawowym zakresie system szablonów STL.
Osobą tworzącym aplikacje głównego nurtu lub sieciowe.

Co należy wiedzieć przed szkoleniem?
Należy posiadać umiejętność posługiwania się dowolnym wybranym środowiskiem tworzenia i budowy aplikacji IDE (Visual Studio/Code, QtCreator, Eclipse, NetBeans…). Warto być obeznanym z koncepcjami programowania obiektowego, systemowego i aplikacyjnego. Konieczna będzie znajomość narzędzi do tworzenia aplikacji z rodziny Visual Studio lub gcc/clang/binutils jak również umiejętność posługiwania się narzędziem debuggera. Nieodzowna będzie znajomość aspektów sprzętowych x86 lub ARM (wywołania, optymalizacjie, alokacja rejestrów…).

Zagadnienia
Algorytmy i iteratory biblioteki standardowej.
Przegląd dostępnych algorytmów.
Wydajność i aspekty implementacji.
Praktyczna implementacja z użyciem algorytmów z biblioteki standardowej.
Implementacja własnych algorytmów do ponownego wykorzystania.
Złożoność obliczeniowa i zakres zastosowań.
Warsztat wykorzystania algorytmów.
Rodzaje iteratorów dostępnych w bibliotece standardowej.
Iteratory i programowanie uogólnione.
Aspekty implementacji iteratorów.
Implementacja własnych iteratorów.
Programowanie uogólnione – koncepcje i zastosowania.
Szablony STL – wydajne stosowanie i wstęp do metaprogramowania.
Modele obliczeniowe dostępne w obecnym C++.
Wzorce – pułapki i zastosowania.
Konkretyzacja – reguły i działanie.
Cechy typów.
Metaprogramowanie – podstawy.
Programowanie z użyciem constexpr
Algorytmy na poziomie meta.
Alokatory i algorytmy alokacji.
Wymiary oceny algorytmów alokatorów.
Implementacja tradycyjnego i polimorficznego alokatora.
Alokator arenowy.
Alokator TLSF.
Wzorce projektowe.
Wprowadzenie wzorców projektowych.
Strukturalne wzorce projektowe.
Konstrukcyjne wzorce projektowe.
Behawioralne wzorce projektowe.
Specyfika implementacji wzorców projektowych w języku C++.
Zakresy (ang. range) i ich użycie.
Wydajność implementacji biblioteki zakresów.
Dostępne algorytmy i widoki dla biblioteki zakresów.
Obszary wydajnego stosowania biblioteki zakresów.
Praca z narzędziem debuggera w języku C++.
Dostęp do podstawowych struktur C++.
Automatyzacja i skrypty.
Wstęp do integracji z infrastrukturą testowania.
Programowanie wielowątkowe.
Wyzwania i problemy.
Współpraca wątków.
Prymitywy synchronizujące.
Sekcje krytyczne.
Komunikacja i dane współdzielone w aplikacjach wielowątkowych.
Współprogramy (ang. coroutines).
Testowanie aplikacji wielowątkowych.
Wzorce wielowątkowości.
Wzorce wielowątkowości – przegląd.
Implementacja najbardziej użytecznych wzorców wielowątkowości.
Zaawansowane wzorce wielowątkowe.
Nowe standardy C++.
Przegląd nowości wprowadzonych w nowych standardach C++.
Zarządzanie pamięcią (wskaźniki inteligentne).
Nowe aspekty składni.
Obiekty funkcyjne (typ std::function, funkcje lambda, łączenie obiektów).
Zarządzanie zakresami.
Ujednolicona obsługa systemu plików i czasu.
Cechy typów oraz rozszerzenia wielowątkowości (implementacja typów atomowych).
Wykładnie i nowoczesne projektowanie aplikacji.
Zasady S.O.L.I.D. , GRASP, YAGNI – przegląd i przypomnienie.
Wykładnie w programowaniu obiektowym – aspekt praktyczny Implementacja wykładni (ang.
policy) we własnych aplikacjach.
Rola polimorfizmu statycznego i technik wykonania na etapie kompilacji.
Tworzenie aplikacji niezawodnych.
Aspekty wydajności obsługi wyjątków.
Tworzenie aplikacji odpornej na błędy.
Programowanie aspektowe.

Tematy opcjonalne, realizowane na żądanie uczestników lub zamawiającego (jeden do wyboru):
Wykładnie bezpiecznego i wydajnego programowania – źródła standaryzacji.
HIC++, JSF++, CERT C++, AUTOSAR C++, C++ Core Guidelines – przegląd.
Mechanizmy detekcji i ostrzeżeń dostępne w kompilatorach.
Narzędzia zewnętrzne wspierające analizę kodu – przegląd.
Biblioteka GSL i jej zastosowanie.
Cele stawiane przed biblioteką i korelacja z C++ Core Guidelines.
Widoki w GSL.
Przynależność obiektu.
Narzędzia GSL i asercje.
Koncepty.