Zaawansowane programowanie w C++

Kod: ccpp-C++ Advanced
Kategoria: C i C++
Forma: 40% wykłady / 60% warsztaty
Czas trwania: 3 dni
Grupa docelowa: developerzy
Logistyka: W siedzibie klienta lub w innym dowolnym miejscu.
Data i dokładny zakres do ustalenia podczas analizy przed-szkoleniowej.

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

Program jest ramą w jakiej możemy się poruszać merytorycznie - program dla konkretnego szkolenia dedykowanego ustalamy z grupą na podstawie analizy przed-szkoleniowej.

  1. Systematyzacja
    1. Niskopoziomowy C++
      1. Natura języka C++
      2. Główne problemy
      3. Zarządzanie pamięcią - co mówi nam standard?
        1. Programowanie systemowe i kod przenośny (pliki, współbieżność, IO, ...)
        2. Kod legacy
    2. OOP – Object Oriented Programming – przypomnienie podstawowych zasad programowania obiektowego w świetle rzeczywistych problemów.
      1. Paradygmat programowania obiektowego
        1. Analiza paradygmatu programowania obiektowego i jego poprawna interpretacja
        2. GRASP – General Responsibility Assignment Software Patterns (Principles).
        3. 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
        1. Wzorzec – czym jest?
        2. Pattern language – architektura rozwiązania (rozwiązań) oparta na wzorcach
        3. 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
        1. Konstrukcja obiektu
        2. Funkcje wirtualne od podszewki
        3. „Wodospad” destrukcji
      2. „Dżungla” wielokrotnego dziedziczenia
        1. Problematyka
        2. Zastosowanie
      3. „Szczyty” wirtualnego dziedziczenia, czyli wyższa szkoła jazdy
        1. Motywacja dziedziczenia wirtualnego
        2. Mechanika funkcjonowania wirtualnego dziedziczenia
        3. 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
        1. Funkcje szablonowe
        2. Klasy szablonowe
        3. Szablony specjalizowane
        4. Użycie typów „własnych”
      3. Mechanika szablonów
        1. Aspekt kompilacji
        2. Moment składania docelowej implementacji
        3. Budowa obiektu z szablonu
        4. 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++
        1. Problem natywnych wskazań
        2. Typowe błędy i ich konsekwencje
      2. Wykorzystanie idiomu RAII
      3. Zliczanie referencji
        1. Mechanizm
        2. 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
        1. Wrapper-fasada – refaktoryzacja „error prone” i legacy API na rzecz reużywalnych komponentów
        2. Proxy – implementacja konkretnych funkcjonalności z użyciem przygotowanych fasad i wrapper’ów
        3. Observer, reactor, proactor, half sync/half asyc, thread pool – niby to samo, a jednak inaczej
        4. 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
        1. Ważniejsze moduły
        2. Bind i funkcje
        3. Wskaźniki i referencje Smart
        4. Przekształcanie typów
        5. Algorytmy i kontenery
        6. System plików, ASIO oraz wielowątkowość
        7. Wykorzystanie w połączeniu z STL
        8. 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
        1. Automatyczne określanie typu
        2. Pętla for oparta na zakresie
        3. Funkcje i wyrażenia lambda
        4. Aliasy dla szablonów


Pobierz program w formacie PDF

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ń