Zaawansowane programowanie w języku C++

2680 PLN+23% VAT (3296 PLN brutto / 1 os.)

Czas trwania szkolenia:3 dni (24h)

Kod kursu:CPP/ADV

Poziom zaawansowania:

Dostępne terminy

  • Termin
  • Lokalizacja
  • Trener
  • Cena
Brak dostępnych terminów

O szkoleniu Zaawansowane programowanie w języku C++

W cenie otrzymasz:

  • Materiały szkoleniowe
  • Certyfikat ukończenia szkolenia
  • W przypadku szkolenia w trybie stacjonarnym zapewnimy Ci również lunch oraz sprzęt niezbędny do nauki

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
  • Kameralne grupy - szkolenia technologiczne prowadzimy w grupach liczących do 8 osób. Pozwala to na indywidualne podejście oraz aktywizację każdego uczestnika
  • Praktyka przed teorią - wszystkie szkolenia technologiczne prowadzone są w formie warsztatowej. Konieczna teoria jest wyjaśniana na przykładzie praktycznych zadań
  • Konkretne umiejętności - w ramach każdego szkolenia rozwijamy praktyczne umiejętności związane z daną technologią i tematyką
  • Nauka z praktykami - wszyscy trenerzy na co dzień pracują w projektach, gwarantuje to dostęp do eksperckiej wiedzy i praktycznego know-how

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

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

  • Wzorce - pułapki i zastosowania
  • Konkretyzacja - reguły i działanie
  • Cechy typów
  • Metaprogramowanie - podstawy
  • Algorytmy na poziomie meta

Wzorce projektowe

  • Wprowadzenie wzorców projektowych
  • Strukturalne wzorce projektowe
  • Konstrukcyjne wzorce projektowe
  • Behawioralne wzorce projektowe
  • Specyfika implementacji wzorców projektowych w języku C++

Użyteczne biblioteki

  • 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

Testowanie i metodyka testowania

  • 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

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
  • 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

  • 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

Podobne szkolenia