| Tytuł: | Dobry start do profesjonalnego programowania w C++ dla początkujących programistów |
| Kod: | ccpp-C++ Dobry Start |
| Kategoria: | C i C++ |
| Forma: | 50% wykłady / 50% warsztaty |
| Czas trwania: | 3 dni |
| Odbiorcy: | developerzy |
| Zapisy: |
Indywidualne zamówienie i dopasowanie dla grupy. |
| Logistyka: |
W siedzibie klienta lub w innym dowolnym miejscu. |
Szkolenie pozwalające zrozumieć od podszewki kontekst oraz podstawową składnię i „ukryte” mechanizmy języka C++.
W nieksiążkowy i nieszablonowy sposób, bazując na użytecznych idiomach i wzorcach kolejno odsłaniane są rozmaite niuanse języka.
Zdobyta wiedza w sposób natychmiastowy przekłada się na pełne wykorzystanie języka i jego możliwości. Wyciągnięte z rzeczywistych projektów zadania pomogą zdecydowanie podnieść jakość (w kontekście czystości i bezpieczeństwa), testowalność i elastyczność kodu.
Szkolenie przeznaczone jest dla programistów znajacych podstawowa skladnie C++ chcacych usystematyzowac i poszerzyć swoją wiedzę o tym niebanalnym języku.
Wyróżniki szkolenia
- Szkolenie obwarowane zbiorem najlepszych praktyk
- Praktyczne podejście do składni języka
- Nacisk na bezpieczną implementację opartą na składni i testowaniu
- Przykłady wyjęte z rzeczywistych projektów
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- Korzenie języka C++
- Język C
- Nisko-poziomowa natura C++
- Kompilacja i linkowanie
- Rozróżnienie obu pojęć
- Preprocesor
- Rozróżnienie obu pojęć
- Sekcje code, text i data oraz stos i sterta
- Język C
- Typy proste - wzmianka pierwsza
- Zbiór podstawowych typów prostych i ich poprawne wykorzystanie z uwzględnieniem problematyki signed/unsigned
- Wsoko-poziomowe spojrzenie na pamięć
- Rozróżnienie deklaracji i definicji
- Pojęcie obiektu i instancji już na etapie typów prostych
- Kopia, wskaźnik i referencja
- Problem zarządzania pamięcią z uwzględnieniem aspektu “legacy code”
- Rozróżnienie deklaracji i definicji
- Zbiór podstawowych typów prostych i ich poprawne wykorzystanie z uwzględnieniem problematyki signed/unsigned
- OOP - Object Oriented Programming - programowanie obiektowe
- Paradygmat programowania obiektowego[a][b] w praktyce
- 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
- Typy złożone po raz pierwszy
- Klasa a struktura
- Klasa/struktura a obiekt
- Klasa a struktura
- Paradygmat programowania obiektowego[a][b] w praktyce
- Korzenie języka C++
-
Chemia w C++ - wszystko na temat tworzenia i związków- Punkt absolutnie podstawowy - organizacja pracy
- Wersjonowanie kodu - absolutna konieczność
- Systemy kontroli wersji (SVN, Git)
- Struktura repozytorium: podsystemy, komponenty, moduły...
- Systemy kontroli wersji (SVN, Git)
- Budowanie kodu
- Single point of fire - budowanie i uruchamianie z jednego miejsca
- Narzędzie wspomagające - Makefile
- Zależności małe i duże
- Problem zależności między komponentami i jak go przełamać
- Problem zależności “inkludów” i jak go pokonać
- Single point of fire - budowanie i uruchamianie z jednego miejsca
- Myślenie i kodowanie w czasie przyszłym
- TDD - Test Driven Development
- Kod reużywalny
- TDD - Test Driven Development
- Wersjonowanie kodu - absolutna konieczność
- Typy proste - czy naprawdę takie proste?
- Problematyka jawnego i niejawnego przekształcania typów prostych - jak sobie z tym radzić
- Referencje i wskaźniki po raz drugi
- Ujecie zmiennych lokalnych i globalnych
- Wskaźnik i tablica – czy to się da rozróżnić?
- Argumenty funkcji – API wymuszające, optymalne i bezpieczne
- Ujecie zmiennych lokalnych i globalnych
- Problematyka jawnego i niejawnego przekształcania typów prostych - jak sobie z tym radzić
- Typy złożone wzmianka druga
- Składowe
- Member - o tym co obiekt ma i jak to wygląda w pamięci
- Funkcje - czyli co obiekt robi i nawiązanie do sekcji kodu
- Member - o tym co obiekt ma i jak to wygląda w pamięci
- Konstrukcja podstawą obiektu i jego poprawności
- Mechanika budowy obiektu
- Konstruktor jednoargumentowy i niebezpieczeństwo niejawnego przekształcenia typów (wstęp do kopiowania)
- Poprawność obiektu po konstrukcji
- Metody konstrukcji obiektów w świetle wzorców i możliwości składniowych
- Mechanika budowy obiektu
- Składowe
- Kopiowanie - zmora wymagań wydajnościowych
- Mechanika kopiowania typów prostych, wskaźników i referencji
- Kopiowanie typów złożonych od strony składni
- Problemy z kopiowaniem klas i struktur
- Mechanika kopiowania typów prostych, wskaźników i referencji
- Lawina destrukcji
- Zakres obiektów - nawiązanie do stosu i o sterty
- Problem delete
- Panowanie nad poprawną destrukcją i wzorce wspomagające
- Zakres obiektów - nawiązanie do stosu i o sterty
- Punkt absolutnie podstawowy - organizacja pracy
-
Więcej o obiektach- Zasięg
- Rodzaje i znaczenie w rozumieniu zasad OOP (wstęp do dziedziczenia)
- Przyjaźń – piękno a zarazem pułapki
- Zasięg kluczowych składowych
- Rodzaje i znaczenie w rozumieniu zasad OOP (wstęp do dziedziczenia)
- Osobliwości inne
- const vs mutable – pułapki
- volatile – w czym (nie) pomaga
- const vs mutable – pułapki
- Zasięg
-
Dżungla dziedziczenia i polimorfizm- Po co jest dziedziczenie?
- Aspekt naturalny
- Definicja szkolna z uchwyceniem OOP oraz SOLID
- Koszty funkcji wirtualnych, wielodziedziczenia, wirtualnych klas podstawowych oraz identyfikacji typów podczas wykonywania
- Wirtualizowanie konstruktorów i niemetod
- Czego unikać – pułapki i często popełniane błędy
- Aspekt naturalny
- Rodzaje i kombinacje dziedziczenia
- Czysta podstawa: public, private i protected
- Dziedziczenie wirtualne
- Czysta podstawa: public, private i protected
- Polimorfizm – wzmocnienie dziedziczenia
- virtual – abstrakcja i przeciążanie
- Kiedy polimorfizm nie działa
- virtual – abstrakcja i przeciążanie
- Przydatne wzorce
- Adapter/Proxy – uogólniania
- Template method
- Wzorce silników zdarzeń
- Adapter/Proxy – uogólniania
- Po co jest dziedziczenie?
-
Operatory- Co to tak naprawdę jest operator?
- Definicja
- Wbudowane operatory i aspekt rzutowania
- Definicja
- Definiowanie operatorów – potrzeba matka wynalazku
- Poprawne podejście do projektowania operatorów
- Operatory dla typów prostych
- Operatory dla typów złożonych i ich kontekst
- „Wzorcowe” możliwości wybranych operatorów
- Value object
- RAII
- Zarządzanie pamięcią
- Coś o szablonach
- Value object
- Poprawne podejście do projektowania operatorów
- Co to tak naprawdę jest operator?
-
Wyjątki i obsługa błędów- Konieczność destrukcji
- Poprawna konstrukcja raz jeszcze
- Wyjątki w destruktorach
- Różnica pomiędzy wyjątkiem a przekazaniem argumentu lub wywołaniem funkcji wirtualnej
- Chwytanie wyjątków i rozważne stosowanie specyfikacji sytuacji wyjątkowych
- Koszty obsługi wyjątków
- Konieczność destrukcji
-
Podsumowanie: problemy i rozwiązania- Jak radzić sobie ze wskaźnikami wykorzystując podejście imperatywne
- RAII
- Zliczanie referencji
- Obiekty podobne do natywnych wskaźników (klasy pełnomocników)
- RAII
- STL – to co już jest
- std::auto_ptr
- std::string
- Kontenery i algorytmy
- C++11
- std::auto_ptr
- Katalog bibliotek wspomagających
- Jak radzić sobie ze wskaźnikami wykorzystując podejście imperatywne
Pobierz program w formacie PDF