| Tytuł: | Programowanie współbieżne i rozproszone w języku C++: taktyki, wzorce, narzędzie wspomagające i testowanie. |
| Kod: | ccpp-paralel C++ |
| Kategoria: | C i C++ |
| Forma: | 35% wykłady / 65% warsztaty |
| Czas trwania: | 3-4 dni |
| Odbiorcy: | developerzy |
| Zapisy: |
Indywidualne zamówienie i dopasowanie dla grupy. |
| Logistyka: |
W siedzibie klienta lub w innym dowolnym miejscu. |
Szkolenie prezentuje faktyczną możliwość (a nawet konieczność) stosowania Wzorców Projektowych podczas implementacji kooperujących aplikacji wieloprocesowych i wielowątkowych.
Wszystkie wzorce przedstawiane są na przykładach wyciągniętych z rzeczywistych projektów.
W opozycji do akademickiego/książkowego podejścia, uczestnicy szkolenia zdobywaną stopniowo wiedzę jednocześnie wykorzystują i testują przy okazji implementacji zadań warsztatowych, które odzwierciedlają wyzwania napotykane w rzeczywistości, tworząc przy tym skalowalny kod, otwarty na zmiany i podatny na testowanie.
Szkolenie przeznaczone jest dla programistów C++ tworzących aplikacje serwerowe, chcących poszerzyć swoje kompetencje w zakresie profesjonalnych technik programistycznych zwiększających jakość kodu i projektu. Zdobyta wiedza przekłada się w praktyczny sposób na produktywność mierzoną w szerszej perspektywie czasu.
Wyróżniki szkolenia
- Skupienie uwagi na "fizyce" problemu programowania współbieżnego i rozproszonego
- Wybór jedynie użytecznych wzorców i technik
- 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.-
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).
- Defense In Depth – programowanie defensywne
- Analiza paradygmatu programowania obiektowego i jego poprawna interpretacja
- 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
-
Programowanie Współbieżne – podstawowe pojęcia w starciu z rzeczywistością (wymaganiami funkcjonalnymi i niefunkcjonalnymi).- Aplikacja, program, proces, wątek – poprawne rozumienie podstawowej nomenklatury
- Synchronizacja
- Zrozumienie pojęcia sekcji krytycznej
- Mechanizmy blokad i oczekiwania
- Pułapki i typowe błędy
- Zrozumienie pojęcia sekcji krytycznej
- Idiomy i wzorce wspomagające programowanie równoległe
- Wątek, grupa wątków, pula wątków
- Kolejki – dobór algorytmu do problemu, a nie odwrotnie!
- Wraper-fasada vs Proxy – różnice oraz aspekt przenośności
- Template method vs RAII (Resource Acquisition Is Initialization) – różnice oraz możliwość połącznenia
- Monitor – upraszczanie zależności
- Wątek, grupa wątków, pula wątków
- Prawa równoległości
- Amdahl vs Gustawson
- Konfrontacja prawideł matematycznych a szara rzeczywistość
- Amdahl vs Gustawson
- Testowanie
- Testowanie jednostkowe
- Testowanie modułowe
- Testowanie jednostkowe
- Third-party w ujęciu rozmaitych pułapek
- Zrozumienie kontekstu języka C++ - język niskopoziomowy
- POSIX vs reszta świata oraz aspekt C++11
- Przegląd bibliotek
- Narzędzia wspomagające
- Zrozumienie kontekstu języka C++ - język niskopoziomowy
- Aplikacja, program, proces, wątek – poprawne rozumienie podstawowej nomenklatury
-
Komunikacja międzyprocesowa – wymiana danych pomiędzy aplikacjami zdalnymi i lokalnymi w kontekście rzeczywistych problemów.- Potoki i gniazda – różnice i praktyczne zastosowanie
- Demultipleksacja – obsługa komunikacji z wielu źródeł
- Select, poll, epoll
- Wykorzystanie podejścia „Event Oriented”
- Analiza aspekt współbieżności – dobór wzorca i możliwość podmiany
- Select, poll, epoll
- Wzorce
- Wrapper-fasada – obiektowe modele dla kodu „error prone” i legacy API na rzecz reużywalnych komponentów
- Proxy – implementacja konkretnych funkcjonalności z użyciem przygotowanych fasad i wrapper’ów
- Silniki obsługi zdarzeń
- Observer, reactor, proactor, half sync/half asyc, thread pool – niby to samo, a jednak inaczej
- Event broker
- Observer, reactor, proactor, half sync/half asyc, thread pool – niby to samo, a jednak inaczej
- Wrapper-fasada – obiektowe modele dla kodu „error prone” i legacy API na rzecz reużywalnych komponentów
- Testowanie
- Unit vs Module –które części kodu i jak je testować
- Stress tests – „dmuchanie na zimne”
- Testowanie funkcjonalne
- Unit vs Module –które części kodu i jak je testować
- Third-party i gotowe rozwiązania
- Narzędzia wspomagające
- Valgrind – poprawność użycia sterty (memcheck), przepływ wskaźników (ptrcheck), poprawność wielowątkowości (hellgrind)
- Cppcheck – analiza statyczna kodu
- CPD – wykrywanie zduplikowanego kodu i kontekst kodu legacy
- Valgrind – poprawność użycia sterty (memcheck), przepływ wskaźników (ptrcheck), poprawność wielowątkowości (hellgrind)
- Elementy ułatwiające pisanie aplikacji rozproszonych
- RPC – Remote Procedure Call – standardy wywołań funkcji zdalnych takie jak: CORBA, WebServices
- REST – Representational State Transfer – bardziej filozofia niż formalny standard
- RPC – Remote Procedure Call – standardy wywołań funkcji zdalnych takie jak: CORBA, WebServices
- Biblioteki i frameworki (zakres szczegółowości do uzgodnienia)
- Boost::ASIO
- POCO
- ACE i TAO
- Boost::ASIO
- Narzędzia wspomagające
- Potoki i gniazda – różnice i praktyczne zastosowanie
Pobierz program w formacie PDF