| Tytuł: | Zaawansowane programowanie w C++ |
| Kod: | ccpp-C++ Advanced |
| Kategoria: | C i C++ |
| Forma: | 40% wykłady / 60% warsztaty |
| Czas trwania: | 3 dni |
| Odbiorcy: | developerzy |
| Zapisy: |
Indywidualne zamówienie i dopasowanie dla grupy. |
| Logistyka: |
W siedzibie klienta lub w innym dowolnym miejscu. |
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
- 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.-
Systematyzacja- Niskopoziomowy C++
- Natura języka C++
- Główne problemy
- Zarządzanie pamięcią - co mówi nam standard?
- Programowanie systemowe i kod przenośny (pliki, współbieżność, IO, ...)
- Kod legacy
- Programowanie systemowe i kod przenośny (pliki, współbieżność, IO, ...)
- Natura języka C++
- OOP – Object Oriented Programming – przypomnienie podstawowych zasad programowania obiektowego w świetle rzeczywistych problemów.
- 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).
- Analiza paradygmatu programowania obiektowego i jego poprawna interpretacja
- DID – Defense In Depth – programowanie defensywne
- 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
- Wzorzec – czym jest?
- Paradygmat programowania obiektowego
- Niskopoziomowy C++
-
Zbiór dobrych praktyk i narzędzi wspomagających - niezbędnik profesjonalisty- Testowanie punktem wyjścia do pisania zdrowego kodu
- TDD - Test Driven Development
- Biblioteki testów modułowych/jednostkowych: Gtest, CppUnit, BoostTest
- TDD - Test Driven Development
- Gdb - debugger wyjadaczy
- Valgrind
- Memcheck - sprawdzanie poprawności dynamicznego zarządzania pamięcią
- Ptrcheck - śledzenie wskaźników
- Helgrind - sprawdzanie aplikacji wielowątkowych
- Callgrind - profilowanie aplikacji
- Memcheck - sprawdzanie poprawności dynamicznego zarządzania pamięcią
- Strace - debugowanie na poziomie wywołań systemowych
- Code review - proces SMART
- Testowanie punktem wyjścia do pisania zdrowego kodu
-
Zaawansowane elementy składni- Rozwinięcie dziedziczenia
- „Las” dziedziczenia
- Konstrukcja obiektu
- Funkcje wirtualne od podszewki
- „Wodospad” destrukcji
- Konstrukcja obiektu
- „Dżungla” wielokrotnego dziedziczenia
- Problematyka
- Zastosowanie
- Problematyka
- „Szczyty” wirtualnego dziedziczenia, czyli wyższa szkoła jazdy
- Motywacja dziedziczenia wirtualnego
- Mechanika funkcjonowania wirtualnego dziedziczenia
- Praktyczne zastosowanie
- Motywacja dziedziczenia wirtualnego
- Aspekt rzutowania i niejawnego przekształcania typów
- „Las” dziedziczenia
- Programowanie generyczne, czyli „labirynt szablonów”
- Motywacja dla programowania generycznego – aspekt programowania funkcyjnego
- Podstawowa składnia
- Funkcje szablonowe
- Klasy szablonowe
- Szablony specjalizowane
- Użycie typów „własnych”
- Funkcje szablonowe
- 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
- Aspekt kompilacji
- Motywacja dla programowania generycznego – aspekt programowania funkcyjnego
- Rozwinięcie dziedziczenia
-
Implementacja funkcjonalnych wzorców- Rozróżnianie dziedziczenia i stosowania szablonów
- Klasy pełnomocników z uwzględnieniem pracy z kodem legacy
- Zarządzanie pamięcią głównym problemem C++
- Problem natywnych wskazań
- Typowe błędy i ich konsekwencje
- Problem natywnych wskazań
- Wykorzystanie idiomu RAII
- Zliczanie referencji
- Mechanizm
- Podstawowy problem i jak sobie z nim radzić
- Mechanizm
- Co już istnieje
- Zarządzanie pamięcią głównym problemem C++
- Silniki zdarzeń
- 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
- Wrapper-fasada – refaktoryzacja „error prone” i legacy API na rzecz reużywalnych komponentów
- Implementacja w oparciu o dziedziczenie
- Implementacja szablonowa
- Aspekt refaktoryzacji
- Wzorce - przykładowe użycie w domenie wielowątkowości i IO
- Rozróżnianie dziedziczenia i stosowania szablonów
-
STL – Co warto wiedzieć- Kontenery
- Rodzaje – czyli co z czym się je
- Efektywne użycie kontenerów
- Aspekt równoległości
- Rodzaje – czyli co z czym się je
- Algorytmy
- Co już mamy
- Jak poprawnie używać
- 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
- Ważniejsze moduły
- Co już mamy
- Strumienie
- Rodzaje obiektów – poprawna interpretacja
- Poprawne użycie
- Rodzaje obiektów – poprawna interpretacja
- C++11
- Co nowego w STL
- Zaawansowane elementy nowej składni
- Automatyczne określanie typu
- Pętla for oparta na zakresie
- Funkcje i wyrażenia lambda
- Aliasy dla szablonów
- Automatyczne określanie typu
- Co nowego w STL
- Kontenery
Pobierz program w formacie PDF