Zaawansowane programowanie w języku C++

LICZBA DNI: 3 (24h)

KOD KURSU: CPP/ADV

# c++

# multithreading

# gof

# solid

# grasp

# machine-learning

O szkoleniu

DLA KOGO?

Programiści programujący w języku C i C++ w środowisku GNU/Linux lub MS Windows.

Osoby znające w podstawowym zakresie system szablonów STL.

Programiści tworzący oprogramowanie na platformie systemowej GNU/Linux lub MS Windows.

Programiści tworzący aplikacje głównego nurtu oraz aplikacje sieciowe.

WYMAGANIA

Posługiwanie się wybranym środowiskiem IDE (Eclipse, NetBeans, vim).

Znajomość koncepcji programowania obiektowego, systemowego i aplikacyjnego.

Znajomość narzędzi do tworzenia aplikacji z rodziny gcc i binutils.

Umiejętność posługiwania się narzędziem debuggera.

Znajomość koncepcji związanych z programowaniem w języku C++ na poziomie podstawowym i średnio zaawansowanym.

Dodatkowo mile widziana jest także znajomość aspektów sprzętowych platformy x86 (przydzielanie i zarządzanie pamięcią, alokacja rejestrów, konwencje wywołań, optymalizacje).

ZALETY

Uczestnicy szkoleń poznają aspekty programowania wielowątkowego, uogólnionego oraz wstępnie koncepcje leżące u podstaw metaprogramowania ze szczególnym uwzględnieniem cech typów.

Zajęcia uwzględniają także potrzeby testowania aplikacji tworzonych w języku C++ z użyciem narzędzi wspierających proces TDD oraz BDD. Jako biblioteki wspierające, wykorzystane są: Google Test, Boost.Test oraz Catch.

Szczególny nacisk w trakcie zajęć kładziemy na zrozumienie aspektów wydajności oraz gospodarowania zasobami z użyciem wskaźników inteligentnych. Zajmujemy się także zarządzaniem czasem życia obiektu w odniesieniu do mechanizmu wyjątków oraz semantyki r-referencji.

Jako techniki tworzenia aplikacji obiektowej, prezentowane są klasy wytycznych, tradycyjne wzorce projektowe (GoF) oraz nie-ortodoksyjne podejścia z kręgu programowania funkcyjnego.

Na zajęciach posługujemy się technologiami otwartymi z dostępem do kodu źródłowego.

Zajęcia prowadzone są przez doświadczonych praktyków, którzy na co dzień stosują technologie związane z językiem C++ w rzeczywistych projektach. W trakcie zajęć używamy technologii i środowisk otwartych.

Cele szkolenia

Kształcenie umiejętności rozwijania wiedzy dotyczącej tworzenia zaawansowanych rozwiązań w języku C++.

Osadzenie narzędzi i procesów tworzenia oprogramowania w realiach współczesnych wymagań Inżynierii Oprogramowania.

Dokonanie konsolidacji wiedzy i uzupełnienie braków w kompetencjach w kontekście standardu C++.

Nauka testowania jednostkowego aplikacji w języku C++.

Nauka tworzenia aplikacji wielowątkowych z użyciem mechanizmów biblioteki standardowej.

Nauka identyfikacji i tworzenia oprogramowania z użyciem wzorców GoF oraz elementów programowania funkcyjnego.

Zapoznanie się ze współczesnymi bibliotekami przetwarzającymi dane.

Program

  • 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.
  • Aspekty implementacji iteratorów.
  • Implementacja własnych iteratorów.
  • Programowanie uogólnione – koncepcje i zastosowania.
  • Wzorce – pułapki i zastosowania.
  • Konkretyzacja – reguły i działanie.
  • Cechy typów.
  • Metaprogramowanie – podstawy.
  • Algorytmy na poziomie meta.
  • Wprowadzenie wzorców projektowych.
  • Strukturalne wzorce projektowe.
  • Konstrukcyjne wzorce projektowe.
  • Behawioralne wzorce projektowe.
  • Specyfika implementacji wzorców projektowych w języku C++.
  • Boost – przegląd użytecznych rozwiązań.
  • Biblioteki rozwijające paradygmat programowania uogólnionego.
  • Biblioteki przetwarzania danych.
  • ML i AI w języku C++ - przydatne biblioteki
  • Proces TDD w pracy programisty.
  • Proces BDD i różnice w stosunku do TDD
  • Rodzaje bibliotek testów i dostępne asercje.
  • Projektowanie i implementowanie testów.
  • Dostęp do podstawowych struktur C++.
  • Automatyzacja i skrypty.
  • Wstęp do integracji z infrastrukturą testowania.
  • Wyzwania i problemy.
  • Współpraca wątków.
  • Inne biblioteki obsługi wielowątkowości (Boost Threads, Intel Threading Building Blocks)
  • Prymitywy synchronizujące.
  • Sekcje krytyczne.
  • Komunikacja i dane współdzielone w aplikacjach wielowątkowych
  • Testowanie aplikacji wielowątkowych.
  • Wzorce wielowątkowości – przegląd.
  • Implementacja najbardziej użytecznych wzorców wielowątkowości.
  • Zaawansowane wzorce wielowątkowe.
  • 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).
  • 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.
  • Aspekty wydajności obsługi wyjątków.
  • Tworzenie aplikacji odpornej na błędy.
  • Programowanie aspektowe.

Nasi eksperci

POLITYKA COOKIES:

Korzystamy z plików cookies, by móc jak najlepiej dostosować stronę do Twoich potrzeb oraz wyświetlać Ci przydatne i adekwatnych dla Ciebie reklamy w serwisie i poza nim. Możesz kontrolować ustawienia ciasteczek w swoich ustawieniach swojej przeglądarki. Odwiedzając tę stronę, wyrażasz zgodę na wykorzystywanie przez nas plików cookies.