Akademia C++ PRZEZNACZENIE SZKOLENIA Szkolenie przeznaczone jest dla osób, które chcą przekwalifikować się lub rozpocząć pracę jako programista C++. KORZYŚCI WYNIKAJĄCE Z UKOŃCZENIA SZKOLENIA Kurs ma na celu przekazać spójną i kompletną wiedzę z zakresu programowania i przygotować do pełnienia roli młodszego programisty C++. Jest przeznaczony dla grup zamkniętych. Może być adaptowany w zakresie tematów i wykorzystywanych narzędzi pod konkretne potrzeby organizacji celem uzupełnienia kompetencji technicznych oraz umiejętność pracy w zespole, u pracowników nowych lub przekwalifikowywanych. OCZEKIWANE PRZYGOTOWANIE SŁUCHACZY Uczestnicy powinni swobodnie posługiwać się komputerem, znać podstawy matematyki i logiki. Ze względu na dużą liczbę technik i możliwości języka C++ rekomendujemy znajomość podstaw programowania w dowolnym innym języku programowania. PRZYGOTOWANIE DO SZKOLENIA Wirtualna Klasa Poznanie trenera i grupy Sprawdzanie wiedzy - testy i quizy Wprowadzenie w temat zajęć WYKŁADY I WARSZTATY Sala szkoleniowa 1. Środowisko programistyczne i zasady budowania aplikacji w C/C++ Cechy środowisk zintegrowanych Podstawy Visual Studio/CodeBlock Visual Studio a C++ architektura Visual Studio widoki i perspektywy pierwszy program Konfiguracja IDE Ułatwienia w pracy Struktura projektu 2. Programowanie w języku C Zmienne i wyrażenia arytmetyczne Stałe symboliczne Znakowe operacje wejścia-wyjścia Tablice Funkcje Argumenty - przekazywanie jako wartość 1 / 8
Tablice znaków Zmienne zewnętrzne i zakres zmiennych Typy, operatory i wyrażenia Nazwy zmiennych 3. Typy danych i ich rozmiar Stałe Deklaracje Operatory arytmetyczne Operatory porównania i logiczne Konwersja typów Inkrementacja i dekrementacja Operatory bitowe Operatory i wyrażenia przypisania Wyrażenia warunkowe Priorytety operatorów i kolejność wykonywania obliczeń 4. Sterowanie wykonywaniem programu Instrukcje i bloki if-else else-if switch Pętle while i for Pętla do-while break i continue goto i etykiety 5. Funkcje i struktura programu Funkcje Zwracanie wartości innych niż int Zmienne zewnętrzne Zakres Pliki nagłówkowe Zmienne statyczne Zmienne rejestrowe Struktura blokowa Inicjalizacja Rekurencja Preprocesor języka C 6. Wskaźniki i tablice Wskaźniki i adresy Wskaźniki i argumenty funkcji Wskaźniki i tablice Arytmetyka adresów Wskaźniki znakowe i funkcje Tablice wskaźników, wskaźniki do wskaźników Tablice wielowymiarowe Inicjalizacja tablic wskaźników Wskaźniki a tablice wielowymiarowe Argumenty wiersza poleceń Wskaźniki do funkcji 2 / 8
Rozbudowane deklaracje zmiennych i funkcji 7. Struktury Struktury i funkcje Tablice struktur Wskaźniki do struktur Struktury cykliczne Wyszukiwanie w tabelach typedef union Pola bitowe 8. Wejście i wyjście Standardowe operacje wejścia-wyjścia printf - formatowanie danych wyjściowych Listy argumentów o zmiennej długości scanf - formatowane dane wejściowe Dostęp do plików stderr i exit - obsługa błędów Wierszowe operacje wejścia-wyjścia 9. Podstawy programowania w języku C++ Struktura programu w języku C++ Kompilacja oraz łączenie programów Preprocesor Typy danych, operatory i instrukcje sterujące Deklaracje zmiennych oraz stałych, zasięg zmiennych Automatyczna dedukcja typów słowo kluczowe auto Konwersje typów Wskaźniki i referencje 10. Organizacja kodu - funkcje i moduły Definiowanie funkcji Przekazywanie parametrów do funkcji Pliki nagłówkowe i pliki źródłowe Organizacja kodu - bariery #include Przestrzenie nazw 11. Tablice, kontenery STL i iteratory Tablice w języku C++ - tablice natywne i std::array Iteracja po zakresach wskaźniki, iteratory, range-based-for Łańcuchy znaków - c-łańcuchy i typ std::string Podstawowe kontenery STL - std::vector, std::list, std::map, std::unordered_map 12. Programowanie obiektowe Typu użytkownika - struktury, klasy Funkcje składowe metody Konstruktory Zarządzanie zasobami - RAII Destruktory Specjalne funkcje kopiujące specjalne funkcje przenoszące wstęp do semantyki przenoszenia 13. Przeciążanie operatorów dla klas 14. Zarządzanie pamięcią dla obiektów smart pointery 3 / 8
std::unique_ptr std::shared_ptr 15. Funktory i lambdy Obiekty wywoływalne w C++ Funktory Lambdy std::function callbacki w C++ Wykorzystanie lambd w algorytmach standardowych STL 16. Dziedziczenie i polimorfizm Klasy pochodne Konstruktory i destruktory a dziedziczenie Dostęp do składowych klasy bazowej Przeciążenie i przesłanianie funkcji składowych Dziedziczenie publiczne, chronione i prywatne - widoczność składowych w klasach pochodnych Statyczne i dynamiczne wiązanie funkcji Funkcje czysto wirtualne Destruktory wirtualne Klasy abstrakcyjne Polimorfizm w języku C++ Przykład zastosowania polimorfizmu 17. Dziedziczenie wielobazowe Przykład dziedziczenia wielokrotnego Problemy związane z dziedziczeniem wielobazowym Wirtualne klasy bazowe 18. Obsługa wyjątków Koncepcja obsługi sytuacji wyjątkowych Bloki try... catch Standardowe klasy wyjątków Klasy wyjątków użytkownika 19. Strumienie Koncepcja strumieni w C++ - opis biblioteki iostream Strumienie std::cin, std::cout oraz std::err Strumienie plikowe 20. Move semantics l-value vs. r-value Referencje do r-value - T&& Implementacja semantyki przenoszenia (move semantics) w klasach Uniwersalne referencje - reference collapsing Perfect forwarding 21. Zapobieganie wyciekom zasobów - technika RAII Gwarancje odporności kodu na wyjątki Idiom RAII (Resource Aquisition Is Initialization) 22. Inteligentne wskaźniki Inteligentne wskaźniki - wstęp std::unique_ptr std::shared_ptr std::weak_ptr Dealokatory użytkownika 4 / 8
23. Programowanie generyczne - szablony Wprowadzenie do programowania generycznego Szablony funkcji i klas Parametry szablonów Specjalizacja szablonów Programowanie generyczne z wykorzystaniem klas cech i wytycznych Cechowanie typów - biblioteka Statyczne asercje - praktyczne wykorzystanie Technika SFINAE - optymalizacja implementacji w zależności od typów danych 24. Variadic templates Szablony o dowolnej liczbie parametrów - parameter pack Variadic templates - praktyczne wykorzystanie Metaprogramowanie z wykorzystaniem krotek - std::tuple Operacje na krotkach z wykorzystaniem sekwencji indeksów 25. Łańcuchy znaków string basic_string char_traits Umiędzynarodowienie 26. Kontenery sekwencyjne Wektory - klasa std::vector Kolejki o dwóch końcach - std::deque Listy - std::list 27. Kontenery asocjacyjne Zbiory - std::set i std::multiset Mapy - std::map i std::multimap Kontenery asocjacyjne z haszowaniem - std::unorderedset i std::unorderedmap Obliczanie wartości skrótów hash dla obiektów 28. Adaptatory kontenerów Stos - std::stack Kolejka - std::queue Kolejka priorytetowa - std::priority_queue 29. Iteratory Kategorie iteratorów STL Funkcje pomocnicze dla iteratorów Adaptatory iteratorów iteratory wstawiające iteratory strumieniowe iteratory odwrotne iteratory przenoszące 30. Algorytmy standardowe Zakresy w algorytmach i kontenerach Argumenty algorytmów - zakresy, iteratory, predykaty i komparatory 31. Obiekty funkcyjne w algorytmach STL Obiekty funkcyjne definiowane przez użytkownika Wyrażenia lambda i obiekty domknięć Predefiniowane obiekty funkcyjne Adaptory funkcji, metod oraz obiektów funkcyjnych 5 / 8
Lambdy wyższego rzędu 32. Algorytmy STL Algorytm for_each() Algorytmy niemodyfikujące - zliczanie, wartości minimalna i maksymalna, wyszukiwanie elementów Algorytmy modyfikujące - kopiowanie, przekształcanie i zastępowanie elementów Algorytmy usuwające Algorytmy mutujące Algorytmy sortujące Algorytmy przeznaczone dla zakresów posortowanych Algorytmy numeryczne 33. Obsługa wejścia-wyjścia z wykorzystaniem klas strumieniowych Podstawowe obiekty oraz klasy strumieniowe Standardowe operatory strumieniowe Stany strumieni Standardowe funkcje wejścia-wyjścia Manipulatory Formatowanie 34. Testowanie (CPPUnit) 35. Wyrażenia stałe - constexpr Wyrażenia stałe w C++ Praktyczne wykorzystanie constexpr - tworzenie struktur danych na etapie kompilacji 36. Zasady dobrego programowania obiektowego - SOLID OOP SRP - Single Responsibility Principle OCP - Open/Close Principle LSP - Liskov Substitution Principle ISP - Interface Segregation Principle DSP - Dependancy Inversion Principle 37. Konstrukcyjne wzorce projektowe Factory Method Abstract Factory Builder Prototype Singleton 38. Strukturalne wzorce projektowe Adapter Bridge Composite Decorator Flyweight Façade Proxy 39. Behawioralne wzorce projektowe Chain of Responsibility Command Iterator Mediator Memento 6 / 8
Observer State Strategy Template Method Visitor 40. Podstawy SQL Tworzenie tabel i dodawanie danych Aktualizacja tabel Tworzenie zapytań Agregacja danych 41. Komunikacja z bazami danych Użycie ODBC i OLE DB Konfiguracja połączenia Tworzenie kwerend Odbieranie danych Aktualizacja danych Tworzenie bazy danych Azure SQL 42. Składnia języka XML 43. Wprowadzenie do języka XML (podstawy języka, wady i zalety XML) Składnia XML (tworzenie poprawnych dokumentów XML, reguły nazw XML) Drzewo elementów w dokumentach XML (metoda DOM i SAX) Przestrzenie nazw XML (deklaracja przestrzeni nazw, domyślna przestrzeń nazw) 44. Wprowadzenie do programowanie współbieżnego Procesy oraz wątki Podstawowe pojęcia: poprawność programu, wyścig, wzajemne wykluczenie, żywotność, zagłodzenie wątków, zakleszczenie 45. Zarządzanie wątkami Klasa std::thread Tworzenie i uruchamianie zadań w osobnych wątkach Łączenie i odłączanie wątków - implentacja RAII dla wątków Grupowanie wątków - przechowywanie wątków w kontenerach standardowych Wątki sprzętowe Bezpieczna obsługa wyjątków w wątkach - std::exception_ptr 46. Synchronizacja wątków - muteksy Koncepty obiektów blokowalnych Muteksy w bibliotece standardowej Klasy std::mutex, std::timedmutex, std::sharedmutex Wersje rekursywne muteksów Zarządzanie blokadami - klasy std::lockguard oraz std::uniquelock Synchronizacja dostępu do obiektów za pomocą muteksów - wzorzec Monitor Unikanie zakleszczeń - funkcja std::lock() Blokady współdzielone - implementacja problemów typu readers-writers 47. Synchronizacja zdarzeń między wątkami Busy waits - flagi atomowe Idle waits - blokady warunkowe Mechanizmy komunikacji między wątkami Klasy std::conditionvariable oraz std::conditionvariable_any Implementacja klasy ThreadSafeQueue oraz wzorca Producer-Consumer 7 / 8
Powered by TCPDF (www.tcpdf.org) 48. Leniwa inicjalizacja obiektów Jednokrotna inicjalizacja - implementacja thread-safe wzorców Singleton oraz Virtual Proxy 49. Wstęp do typów atomowych Klasa std::atomic Semantyka Acquire-Release operacji synchronizujących Algorytmy i struktury danych lock-free - wstęp 50. Funkcje wywoływane asynchronicznie Wywołania asynchroniczne funkcji z wykorzystaniem biblioteki standardowej - std::async() Uruchamianie zadań asynchronicznych - Klasa std::packaged_task Odczytywanie wyników zwracanych przez funkcje asynchroniczne - obiekty typu "future" Mechanizm komunikacji między wątkami za pomocą klasy std::promise 51. Podstawowe wzorce programowania współbieżnego Thread Pool Active Object 52. Refaktoryzacja kodu zmiana struktury programu w celu poprawy jakości kodu wybrane aspekty refaktoryzacji kodu zmiana nazwy zmiennej zmiana nazwy metody zmiana nazwy klasy wydzielenie metody wydzielenie zmiennej odzwierciedlenie kroków algorytmu kierunek wprowadzania wzorców refaktoryzacja kodu z wykorzystaniem wzorców projektowych. 53. Testy jednostkowe definicja testów jednostkowych zaawansowane aspekty testowania (fixtures, doubles, mocks) kontrola pokrycia testów automatyzacja wzorce związane testowaniem 54. Praca zespołowa jak działają systemy kontroli wersji? praca z systemem SVN praca z systemem GIT praca z systemem JIRA WSPARCIE I ROZWÓJ PO SZKOLENIU Portal Altkom Akademii Dostęp do materiałów szkoleniowych i uzupełniających Opieka trenera Kontakt ze społecznością Kod szkolenia Czas trwania Poziom Autoryzacja ACPP / Akademia 15 dni / 105 h Podstawowy Altkom 8 / 8