Kategorie: UML, procesy biznesowe , Zarządzanie projektami, modelowanie, UML, BPMN
O szkoleniu
Szkolenie wprowadza uczestników w świat wzorców projektowych, zasad tworzenia czytelnego, elastycznego i łatwego w utrzymaniu kodu, a także technik jego refaktoryzacji. W trakcie zajęć omawiane są najważniejsze wzorce kreacyjne, strukturalne i czynnościowe oraz sposoby ich praktycznego zastosowania. Uczestnicy poznają również typowe błędy projektowe (antywzorce) i dowiedzą się, jak skutecznie poprawiać istniejący kod poprzez refaktoryzację z wykorzystaniem wzorców. Szkolenie łączy teorię z praktyką, umożliwiając natychmiastowe przećwiczenie zdobytej wiedzy w zadaniach programistycznych.
Treść szkolenia tworzą przede wszystkim następujące tematy:
- Dobre i złe praktyki programistyczne, od najbardziej znanych, jak DRY, do mniej oczywistych – wraz z przykładami i omówieniem konsekwencji.
- Fundamenty właściwego projektowania i programowania obiektowego, w tym przede wszystkim popularne zasady SOLID – co właściwie oznaczają?
- Przegląd wszystkich klasycznych wzorców projektowych GoF (Gang of Four) i kilku dodatkowych, będących ich uzupełnieniem.
- Omówienie zasad poprawnego projektowania systemów IT w skali makro i przegląd najważniejszych wzorców architektonicznych.
- Praktyka pracy z istniejącym kodem, z największym naciskiem na refaktoryzację.
Szkolenie nie jest suchym wykładem. Istotną częścią zajęć są warsztaty, w trakcie których:
- rozwiązujemy zadania polegające na implementacji niektórych wzorców projektowych w wybranym języku programowania,
- analizujemy przykładowe fragmenty kodu identyfikując widoczne schematy, ale także efekty stosowania złych praktyk,
- dokonujemy przykładowych refaktoryzacji za pomocą narzędzi IDE oraz AI.
Zachęcamy też uczestników do aktywnego dzielenia się własnymi doświadczeniami i staramy się stworzyć atmosferę seminarium, na którym aktywnie się dyskutuje.
Przykłady i materiały szkoleniowe bazują na języku Java – najbardziej popularnym w dużych systemach biznesowych i tym, do którego klasyczne wzorce projektowe czy też zasady SOLID najlepiej pasują. Zwracamy jednak także uwagę na specyfikę innych popularnych języków (szczególnie Pythona) czy też ewolucję paradygmatów programowania na przestrzeni lat („spłaszczenie” hierarchii klas, większa rola funkcyjnego stylu programowania).
Na życzenie Klienta jesteśmy w stanie przeprowadzić całe szkolenie dla zorganizowanej grupy w wybranym języku programowania (C++, C#, Java, Python, JavaScript/TypeScript, PHP), zajmując się wtedy także praktykami specyficznymi dla tego języka. Prosimy w takiej sytuacji wcześniej kontaktować się z biurem i ustalić to na etapie zamawiania szkolenia.
Czas trwania
3 dni
Program
- Pojęcia wstępne i kontekst
- Proces wytwórczy oprogramowania
- Od wymagań do realizacji – jakie są role i zadania w projektach
- Modele kaskadowe i iteracyjne
- Kto jest odpowiedzialny za jakość?
- Rola testów w projektach programistycznych
- Co zmieniło pojawienie się AI?
- Podstawy diagramów UML
- Diagram klas
- Diagram czynności
- Diagram interakcji
- Proces wytwórczy oprogramowania
- Dobre i złe praktyki programistyczne
- Kilka skrótów do zapamiętania na całe życie
- KISS – nie komplikuj
- DRY – nie powtarzaj się
- YAGNI – nie będziesz tego potrzebować
- Ogólne zasady dobrego projektowania
- Abstrakcja (Abstraction)
- Hermetyzacja (Encapsulation) i unikanie niepotrzebnych zależności (Loose Coupling)
- Spójność logiczna (High Cohesion)
- Kompozycja czy dziedziczenie? (Composition vs Inheritance)
- Dlaczego te proste zasady są tak ważne
- Przykłady złych praktyk i antywzorców
- Duplikacja kodu
- Brak hermetyzacji i silne zależności (Tight Coupling)
- Niska spójność (Low Cohesion) i boski obiekt (God Object)
- Złoty młotek (Golden Hammer) i kult cargo (Cargo Cult)
- Hardkodowanie i magiczne wartości
- Strumień lawy (Lava Flow)
- Przedwczesna optymalizacja
- Stosowanie „dobrych praktyk” za wszelką cenę
- Wyjaśnienie konsekwencji stosowania złych praktyk na przykładach
- Kilka skrótów do zapamiętania na całe życie
- Pryncypia SOLID jako fundament projektowania obiektowego
- Zasada jednej odpowiedzialności (Single Responsibility Principle)
- Zasada otwarte/zamknięte (Open/Closed Principle) – tworzenie kodu łatwego do rozbudowy, ale odpornego na modyfikacje
- Zasada podstawiania (Liskov Substitution Principle)
- Zasada podziału interfejsów (Interface Segregation Principle)
- Odwrócenie zależności (Dependency Inversion Principle)
- Wprowadzenie do wzorców projektowych
- Czym są wzorce projektowe (Design Patterns)
- Wzorce GoF i inne źródła istotnych wzorców projektowych
- Stosowanie wzorców w praktyce
- Dlaczego warto i czy zawsze trzeba stosować wzorce
- Rola narzędzi w stosowaniu wzorców: IDE, AI
- Wzorce tworzenia obiektów (kreacyjne)
- Sposoby tworzenia obiektów i problemy z nimi związane
- Metoda wytwórcza (Factory Method) – delegowanie tworzenia obiektów do podklas
- Fabryka abstrakcyjna (Abstract Factory) – rodziny powiązanych obiektów bez ujawniania klas
- Statyczna metoda wytwórcza (Static Factory Method) jako praktyczne uproszczenie klasycznego wzorca GoF
- Budowniczy (Builder) – tworzenie złożonych obiektów krok po kroku
- Prototyp – kopiowanie istniejących instancji zamiast tworzenia od zera
- Singleton – zapewnienie istnienia tylko jednej instancji klasy w aplikacji
- Pula obiektów (Object Pool) – utrzymywanie wielu obiektów gotowych do pracy (spoza listy GoF)
- Wzorce organizacji struktury kodu (strukturalne)
- Adapter – przekształcanie interfejsu klasy do oczekiwanej postaci.
- Dekorator – dynamiczne rozszerzanie funkcjonalności obiektów.
- Fasada (Facade) – uproszczenie dostępu do złożonego systemu klas.
- Kompozyt (Composite) – traktowanie grupy obiektów tak samo jak pojedynczych elementów.
- Most (Bridge) – oddzielenie abstrakcji od implementacji.
- Pełnomocnik (Proxy) – zastępowanie rzeczywistych obiektów ich reprezentacją.
- Pyłek (Flyweight) – współdzielenie danych pomiędzy wieloma obiektami dla oszczędności zasobów.
- Wzorce zachowań (czynnościowe)
- Metoda szablonowa (Template Method)– definiowanie szkieletu algorytmu w klasie bazowej.
- Iterator – sekwencyjny dostęp do elementów kolekcji bez ujawniania jej struktury.
- Odwiedzający (Visitor) – separacja operacji od struktury danych.
- Obserwator (Observer) – powiadamianie zainteresowanych obiektów o zmianach stanu.
- Interpreter – analiza i przetwarzanie języka zgodnie z regułami gramatycznymi.
- Polecenie (Command) – enkapsulacja żądań jako obiektów.
- Łańcuch zobowiązań (Chain of Responsibility) – przekazywanie żądania przez łańcuch obiektów aż zostanie obsłużone.
- Strategia (Strategy) – wybieranie algorytmu w czasie działania programu.
- Mediator – centralizacja komunikacji między komponentami.
- Pamiątka (Memento) – zapisywanie i przywracanie stanu obiektów.
- Stan (State) – zmiana zachowania obiektu w zależności od jego stanu wewnętrznego.
- RAII (Resource Acquisition Is Initialization) – zarządzanie zasobami poprzez inicjalizację obiektów.
- Specyfika wybranych języków programowania (odpowiednio akcentujemy tematy w zależności od języka wybranego przez grupę)
- Klasyczne języki obiektowe: C++, C#, Java
- Korzyści ze ścisłej enkapsulacji
- Znaczenie modyfikatora protected
- Rola klas abstakcyjnych i interfejsów
- Wyrażenia lambda i techniki funkcyjne w nowoczesnym programowaniu
- Specyfika języka Python
- The Zen of Python – 19 aforyzmów określających, co jest „Pajtoniczne”
- Komprehencje, generatory, rozpakowywanie i inne sztuczki
- Obiektowość Pythona i typowanie kacze (Duck Typing)
- Specyfika JavaScript
- Programowanie funkcyjne jako istotna alternatywa dla wzorców obiektowych
- Sterowanie oparte o zdarzenia i wszechobecna asynchroniczność
- Wzorce projektowe jako łatanie niedoskonałości niektórych języków
- Klasyczne języki obiektowe: C++, C#, Java
- Wzorce architektoniczne (Software Architecture Patterns)
- Podstawy projektowania systemowego
- Podział na komponenty i warstwy
- Reużywalność funkcjonalności na poziomie: projektu, organizacji, globalnie
- Idea architektury heksagonalnej
- Wzorce związane z interfejsem użytkownika
- MVC (Model-View-Controller)
- MVP (Model-View-Presenter)
- MVVM (Model-View-ViewModel)
- Wzorce związane z podziałem odpowiedzialności (strukturalne)
- System monolityczny
- Architektura warstwowa (N-Tier)
- Architektura usługowa SOA (Service-Oriented Architecture)
- Mikroserwisy
- Architektura komunikacji i dostępu do danych
- Klient-serwer
- Architektura rozproszona P2P (Peer to Peer)
- Przetwarzanie zdarzeniowe (Event-Driven / Publisher-Subscriber)
- Potoki i filtry (Pipes and Filters)
- Podstawy projektowania systemowego
- Wdrożeniowy aspekt wyboru architektury – analiza różnych rozwiązań ze zwróceniem uwagi na korzyści, koszty, ryzyka
- Systemy oparte o własną infrastrukturę
- Wirtualizacja i konteneryzacja
- Wdrożenia chmurowe
- Skalowalność pionowa i pozioma
- Zapewnianie wysokiej dostępności (HA)
- Znaczenie procesów i narzędzi CI/CD we współczesnych projektach IT
- Jak poszczególne wzorce architektoniczne pasują do różnych modeli wdrożeniowych
- Refaktoryzacja z wykorzystaniem wzorców projektowych
- Wprowadzenie do procesu poprawy struktury kodu bez zmiany jego funkcjonalności
- Praktyczne przykłady refaktoryzacji:
- Zmiana nazw zmiennych, metod i klas dla poprawy czytelności
- Wydzielanie metod i zmiennych dla lepszej organizacji
- Lepsze odzwierciedlenie logiki algorytmu w kodzie
- Planowanie i wdrażanie wzorców projektowych w już istniejącym kodzie
- Zastosowanie narzędzi AI do refaktoryzacji i modyfikowania istniejącego kodu
Training also available in English .
Przeznaczenie i wymagania
Zajęcia skierowane są przede wszystkim do szeroko rozumianych programistów / software developerów, którzy wraz z nabieraniem praktycznego doświadczenia w pracy, chcieliby podnieść swoje kompetencje w zakresie znajomości ogólnych zasad i wzorców. Przyswojenie treści naszego szkolenia pozwoli nie tylko tworzyć kod wysokiej jakości, ale też w coraz większym stopniu zajmować się projektowaniem systemów i aplikacji. Modelowym uczestnikiem tego szkolenia jest aktywny zawodowo „junior/mid”, który zmierza w kierunku „mid/senior”, a szkolenie jest jednym z elementów budowania coraz większych kompetencji.
Szkolenie może być też dobrym uzupełnieniem dla absolwentów naszych bootcampów programistycznych, a poza gronem tradycyjnie rozumianych programistów skorzystać z niego mogą testerzy automatyzujący, specjaliści do spraw jakości (QA) i inni członkowie zespołów w projektach IT.
Szkolenie nie będzie jednak odpowiednie dla aktywnych już zawodowo projektantów/architektów systemowych, gdyż:
- zajmujemy się tematami raczej z poziomu programowania i kodu źródłowego – wzorce projektowe to w głównej mierze odpowiednie wykorzystywanie klas i obiektów,
- zakres, w jakim omawiamy tematy „architektoniczne”, jest zawodowym architektom po prostu już znany.
Zachęcamy firmy do szkolenia całych grup – możemy wtedy dostosować szczegółowy zakres szkolenia, język programowania i narzędzia.
Od uczestników oczekujemy przynajmniej podstawowej umiejętności programowania w języku wybranym na szkolenie lub podobnym.
Zalecamy znajomość podstaw programowania obiektowego (OOP): obiekty, klasy, dziedziczenie, polimorfizm.
Certyfikaty
Uczestnicy szkolenia otrzymują imienne certyfikaty sygnowane przez ALX.