Zaawansowane programowanie w C++

Kod: ccpp-C++ Advanced
Kategoria: C i C++
Forma: 40% wykłady / 60% warsztaty
Czas trwania: 3
Grupa docelowa: developerzy

Zaawansowane szkolenie C++, które pozwala zrozumieć od podszewki zaawansowane elementy składni języka C++.

W nieksiążkowy i nieszablonowy sposób, bazując na użytecznych idiomach i wzorcach kolejno odsłaniane są zaawansowane niuanse języka.

Atutem szkolenia jest duży nacisk na wykorzystywanie dobrych praktyk i dostępnych narzędzi/bibliotek do: sprawdzania poprawności kodu mierzonej w najważniejszych wymiarach: poprawność, stabilność, jakość i przenośność, oraz dzielenia się wiedzą w zespole.

Szkolenie przeznaczone jest dla programistów dobrze znających podstawową składnię C++, chcących usystematyzować lub poszerzyć swoja wiedzę o zaawansowanych mechanizmach oraz chcących poznać szereg istniejących bibliotek i narzędzi podnoszących wartość dostarczanego kodu.

Wyróżniki szkolenia

Podczas zajęć możesz oczekiwać szczególnych akcentów położonych na poniższe aspekty:

  • Praktyczne podejście do składni języka
  • Nacisk na bezpieczną implementację opartą na wzorcach i testowaniu
  • Narzędzia wspomagające
  • Rzeczywiste przykłady

Program Szkolenia

Pobierz program w formacie PDF
  1. Systematyzacja
    1. Niskopoziomowy C++
      1. Natura języka C++
      2. Główne problemy
      3. Zarządzanie pamięcią - co mówi nam standard?
          Programowanie systemowe i kod przenośny (pliki, współbieżność, IO, ...) Kod legacy
    2. OOP – Object Oriented Programming – przypomnienie podstawowych zasad programowania obiektowego w świetle rzeczywistych problemów.
      1. Paradygmat programowania obiektowego
          Analiza paradygmatu programowania obiektowego i jego poprawna interpretacja GRASP – General Responsibility Assignment Software Patterns (Principles). SOLID – Single Responsibility Principle (SRP), the Open/Closed Principle (OCP), the Liskov Substitution Principle (LSP), the Dependency Inversion Principle (DIP), and the Interface Segregation Principle (ISP).
      2. DID – Defense In Depth – programowanie defensywne
      3. POSA – Pattern Oriented Software Architecture – architektura oparta na wzorcach
          Wzorzec – czym jest? Pattern language – architektura rozwiązania (rozwiązań) oparta na wzorcach Framework – zbiór reużywalnych, zaimplementowanych wzorców i funkcjonalności
  2. Zbiór dobrych praktyk i narzędzi wspomagających - niezbędnik profesjonalisty
    1. Testowanie punktem wyjścia do pisania zdrowego kodu
      1. TDD - Test Driven Development
      2. Biblioteki testów modułowych/jednostkowych: Gtest, CppUnit, BoostTest
    2. Gdb - debugger wyjadaczy
    3. Valgrind
      1. Memcheck - sprawdzanie poprawności dynamicznego zarządzania pamięcią
      2. Ptrcheck - śledzenie wskaźników
      3. Helgrind - sprawdzanie aplikacji wielowątkowych
      4. Callgrind - profilowanie aplikacji
    4. Strace - debugowanie na poziomie wywołań systemowych
    5. Code review - proces SMART
  3. Zaawansowane elementy składni
    1. Rozwinięcie dziedziczenia
      1. „Las” dziedziczenia
          Konstrukcja obiektu Funkcje wirtualne od podszewki „Wodospad” destrukcji
      2. „Dżungla” wielokrotnego dziedziczenia
          Problematyka Zastosowanie
      3. „Szczyty” wirtualnego dziedziczenia, czyli wyższa szkoła jazdy
          Motywacja dziedziczenia wirtualnego Mechanika funkcjonowania wirtualnego dziedziczenia Praktyczne zastosowanie
      4. Aspekt rzutowania i niejawnego przekształcania typów
    2. Programowanie generyczne, czyli „labirynt szablonów”
      1. Motywacja dla programowania generycznego – aspekt programowania funkcyjnego
      2. Podstawowa składnia
          Funkcje szablonowe Klasy szablonowe Szablony specjalizowane Użycie typów „własnych”
      3. Mechanika szablonów
          Aspekt kompilacji Moment składania docelowej implementacji Budowa obiektu z szablonu Najczęściej spotykane problemy i najczęściej popełniane błędy
  4. Implementacja funkcjonalnych wzorców
    1. Rozróżnianie dziedziczenia i stosowania szablonów
    2. Klasy pełnomocników z uwzględnieniem pracy z kodem legacy
      1. Zarządzanie pamięcią głównym problemem C++
          Problem natywnych wskazań Typowe błędy i ich konsekwencje
      2. Wykorzystanie idiomu RAII
      3. Zliczanie referencji
          Mechanizm Podstawowy problem i jak sobie z nim radzić
      4. Co już istnieje
    3. Silniki zdarzeń
      1. Wzorce - przykładowe użycie w domenie wielowątkowości i IO
          Wrapper-fasada – refaktoryzacja „error prone” i legacy API na rzecz reużywalnych komponentów Proxy – implementacja konkretnych funkcjonalności z użyciem przygotowanych fasad i wrapper’ów Observer, reactor, proactor, half sync/half asyc, thread pool – niby to samo, a jednak inaczej Event broker
      2. Implementacja w oparciu o dziedziczenie
      3. Implementacja szablonowa
      4. Aspekt refaktoryzacji
  5. STL – Co warto wiedzieć
    1. Kontenery
      1. Rodzaje – czyli co z czym się je
      2. Efektywne użycie kontenerów
      3. Aspekt równoległości
    2. Algorytmy
      1. Co już mamy
      2. Jak poprawnie używać
      3. Boost – wzmocnienie możliwości bez konieczności dopisywania kodu
          Ważniejsze moduły Bind i funkcje Wskaźniki i referencje Smart Przekształcanie typów Algorytmy i kontenery System plików, ASIO oraz wielowątkowość Wykorzystanie w połączeniu z STL Tworzenie przenośnego kodu
    3. Strumienie
      1. Rodzaje obiektów – poprawna interpretacja
      2. Poprawne użycie
    4. C++11
      1. Co nowego w STL
      2. Zaawansowane elementy nowej składni
          Automatyczne określanie typu Pętla for oparta na zakresie Funkcje i wyrażenia lambda Aliasy dla szablonów

Trenerzy

Poznaj ekspertów, którzy mogą poprowadzić Twoje szkolenie.

Materiały związane ze szkoleniem

Idea renesansowej pracowni - Bottegi zakłada nieustanną pracę jej członków i dzielenie się jej wynikami.

Zapytaj o szkolenie

Imię i nazwisko:
Firma:
E-mail/Nr tel:
Temat:
Wiadomość:

Jeżeli preferujesz osobisty kontakt to zawsze możesz zadzwonić.

Iwona Sobótka

Koordynatorka szkoleń