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
Grupa docelowa: developerzy

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

Podczas zajęć możesz oczekiwać szczególnych akcentów położonych na poniższe aspekty:

  • 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

Pobierz program w formacie PDF
  1. 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).
      4. Defense In Depth – programowanie defensywne
    2. 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. Programowanie Współbieżne – podstawowe pojęcia w starciu z rzeczywistością (wymaganiami funkcjonalnymi i niefunkcjonalnymi).
    1. Aplikacja, program, proces, wątek – poprawne rozumienie podstawowej nomenklatury
    2. Synchronizacja
      1. Zrozumienie pojęcia sekcji krytycznej
      2. Mechanizmy blokad i oczekiwania
      3. Pułapki i typowe błędy
    3. Idiomy i wzorce wspomagające programowanie równoległe
      1. Wątek, grupa wątków, pula wątków
      2. Kolejki – dobór algorytmu do problemu, a nie odwrotnie!
      3. Wraper-fasada vs Proxy – różnice oraz aspekt przenośności
      4. Template method vs RAII (Resource Acquisition Is Initialization) – różnice oraz możliwość połącznenia
      5. Monitor – upraszczanie zależności
    4. Prawa równoległości
      1. Amdahl vs Gustawson
      2. Konfrontacja prawideł matematycznych a szara rzeczywistość
    5. Testowanie
      1. Testowanie jednostkowe
      2. Testowanie modułowe
    6. Third-party w ujęciu rozmaitych pułapek
      1. Zrozumienie kontekstu języka C++ - język niskopoziomowy
      2. POSIX vs reszta świata oraz aspekt C++11
      3. Przegląd bibliotek
      4. Narzędzia wspomagające
  3. Komunikacja międzyprocesowa – wymiana danych pomiędzy aplikacjami zdalnymi i lokalnymi w kontekście rzeczywistych problemów.
    1. Potoki i gniazda – różnice i praktyczne zastosowanie
    2. Demultipleksacja – obsługa komunikacji z wielu źródeł
      1. Select, poll, epoll
      2. Wykorzystanie podejścia „Event Oriented”
      3. Analiza aspekt współbieżności – dobór wzorca i możliwość podmiany
    3. Wzorce
      1. Wrapper-fasada – obiektowe modele dla kodu „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. Silniki obsługi zdarzeń
          Observer, reactor, proactor, half sync/half asyc, thread pool – niby to samo, a jednak inaczejEvent broker
    4. Testowanie
      1. Unit vs Module –które części kodu i jak je testować
      2. Stress tests – „dmuchanie na zimne”
      3. Testowanie funkcjonalne
    5. Third-party i gotowe rozwiązania
      1. Narzędzia wspomagające
          Valgrind – poprawność użycia sterty (memcheck), przepływ wskaźników (ptrcheck), poprawność wielowątkowości (hellgrind)Cppcheck – analiza statyczna koduCPD – wykrywanie zduplikowanego kodu i kontekst kodu legacy
      2. Elementy ułatwiające pisanie aplikacji rozproszonych
          RPC – Remote Procedure Call – standardy wywołań funkcji zdalnych takie jak: CORBA, WebServicesREST – Representational State Transfer – bardziej filozofia niż formalny standard
      3. Biblioteki i frameworki (zakres szczegółowości do uzgodnienia)
          Boost::ASIOPOCOACE i TAO

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ń