Stosowanie wzorców projektowych w C++. Kod wielokrotnego wykorzystania w programowaniu zorientowanym obiektowo

33.27

Opis

Wzorce projektowe powinny się znaleźć w przyborniku każdego profesjonalnego programisty. Ich zaletą jest nie tylko łatwość tworzenia kodu wielokrotnego użytku, ale także możliwość szybkiego rozwiązywania złożonych zagadnień. Osoby, które chcą rozwijać swoje umiejętności programistyczne, mogą również wykorzystać wzorce projektowe do inspirującego dochodzenia, jak można rozwiązać konkretny problem na wiele sposobów – o zróżnicowanym stopniu zaawansowania technicznego i z zastosowaniem różnego rodzaju kompromisów. Taka zabawa jest bardzo zajmująca i pouczająca.To książka przeznaczona dla programistów C++, którzy chcą poszerzyć swoją wiedzę na temat wzorców projektowych przy użyciu standardu C++17. Opisano tu zarówno klasyczne, jak i całkiem nowoczesne wzorce projektowe ułatwiające rozwiązywanie konkretnych problemów programistycznych w optymalny sposób. Przedstawiono też znaczenie niektórych najnowszych cech języka C++ dla implementacji wzorców. Treść została zilustrowana szeregiem przykładów i scenariuszy pokazujących wykorzystanie wzorców , ich alternatywy i wzajemne relacje. Co więcej, przykłady kodu – przy zachowaniu czytelności – prezentują sobą wysoką jakość oprogramowania produkcyjnego.W książce między innymi:zasady korzystania z wzorców projektowych w nowoczesnym C++wzorce kreacyjne: Budowniczy, Fabryka, Prototyp i Singletonwzorce strukturalne: Adapter, Most, Dekorator, Fasadawzorce zachowań: Łańcuch Odpowiedzialności, Polecenie, Iterator, Mediatorfunkcyjne wzorce projektowe, takie jak MonadaWzorce projektowe w C++: gwarancja najlepszej architektury! Spis treści: O autorze 9O korektorze merytorycznym 11Rozdział 1. Wprowadzenie 13 Preliminaria 14 Dla kogo jest ta książka? 14 O przykładach kodu 14 O narzędziach programistycznych 15 Ważne koncepcje 15 Curiously Recurring Template Pattern (dosł. ciekawie rekurencyjny wzorzec szablonu) 15 Dziedziczenie domieszek 16 Właściwości 16 Zasady projektowania SOLID 17 Zasada pojedynczej odpowiedzialności 17 Zasada otwarty-zamknięty 19 Zasada podstawiania Liskov 23 Zasada segregacji interfejsów 25 Zasada odwracania zależności 27 Czas na wzorce! 29 CZĘŚĆ I. WZORCE KREACYJNE 31Rozdział 2. Budowniczy 35 Scenariusz 35 Prosty budowniczy 36 Płynny budowniczy 37 Komunikowanie zamiaru 37 Budowniczy w stylu języka Groovy 39 Złożony budowniczy 40 Podsumowanie 43Rozdział 3. Fabryki 45 Scenariusz 45 Metoda fabrykująca 46 Fabryka 47 Fabryka wewnętrzna 48 Fabryka abstrakcyjna 49 Fabryka funkcyjna 51 Podsumowanie 52Rozdział 4. Prototyp 55 Konstrukcja obiektów 55 Zwykła duplikacja 56 Duplikacja za pomocą konstruktora kopiującego 56 Serializacja 58 Fabryka prototypów 60 Podsumowanie 61Rozdział 5. Singleton 63 Singleton jako obiekt globalny 63 Klasyczna implementacja 64 Bezpieczeństwo wątkowe 66 Kłopoty z singletonami 66 Singletony a IoC 69 Monostat 69 Podsumowanie 70CZĘŚĆ II. WZORCE STRUKTURALNE 71Rozdział 6. Adapter 73 Scenariusz 73 Adapter 74 Tymczasowe stany adaptera 76 Podsumowanie 78Rozdział 7. Most 79 Idiom Pimpl 79 Most 81 Podsumowanie 82Rozdział 8. Kompozyt 85 Właściwości wspierane przez tablice 86 Grupowanie obiektów graficznych 88 Sieci neuronowe 89 Podsumowanie 92Rozdział 9. Dekorator 93 Scenariusz 93 Dekorator dynamiczny 94 Dekorator statyczny 96 Dekorator funkcyjny 98 Podsumowanie 100Rozdział 10. Fasada 103 Jak działa terminal 103 Zaawansowany terminal 104 Gdzie jest fasada? 105 Podsumowanie 106Rozdział 11. Pyłek 107 Nazwy użytkowników 107 Boost.Flyweight 109 Zakresy ciągów 109 Podejście naiwne 110 Implementacja przy użyciu wzorca Pyłek 111 Podsumowanie 112Rozdział 12. Pełnomocnik 113 Wskaźniki inteligentne 113 Pełnomocnik właściwości 114 Pełnomocnik wirtualny 115 Pełnomocnik komunikacji 116 Podsumowanie 118CZĘŚĆ III. WZORCE ZACHOWAŃ 121Rozdział 13. Łańcuch odpowiedzialności 123 Scenariusz 123 Łańcuch metod 124 Łańcuch brokerów 126 Podsumowanie 129Rozdział 14. Polecenie 131 Scenariusz 131 Implementacja wzorca Polecenie 132 Operacje cofania 133 Polecenia złożone 135 Rozdzielanie zapytań od poleceń 137 Podsumowanie 139Rozdział 15. Interpreter 141 Ewaluator wyrażeń numerycznych 142 Leksykalizacja 142 Parsowanie 143 Wykorzystanie leksera i parsera 146 Parsowanie za pomocą Boost.Spirit 146 Drzewo składni abstrakcyjnej 147 Parser 148 Wyświetlacz 148 Podsumowanie 149Rozdział 16. Iterator 151 Iteratory w bibliotece standardowej 151 Przeglądanie drzewa binarnego 153 Iteracja przy użyciu koprocedur 156 Podsumowanie 157Rozdział 17. Mediator 159 Chat room 159 Mediator ze zdarzeniami 162 Podsumowanie 164Rozdział 18. Memento 167 Rachunek bankowy 167 Cofnij i ponów 169 Podsumowanie 171Rozdział 19. Pusty obiekt 173 Scenariusz 173 Pusty obiekt 174 Wskaźnik shared_ptr nie jest pustym obiektem 175 Ulepszenia projektu 175 Niejawny pusty obiekt 175 Podsumowanie 176Rozdział 20. Obserwator 177 Obserwatory właściwości 177 Observer178 Observable179 Łączenie obserwatorów z obserwowanymi obiektami 180 Problemy z zależnościami 181 Anulowanie subskrypcji i bezpieczeństwo wątków 182 Wielobieżność 183 Obserwator z biblioteki Boost.Signals2 185 Podsumowanie 185Rozdział 21. Stan 187 Przejścia między stanami zależne od stanu 187 Maszyna stanów – „samoróbka” 190 Maszyny stanów z wykorzystaniem biblioteki Boost.MSM 192 Podsumowanie 195Rozdział 22. Strategia 197 Strategia dynamiczna 197 Strategia statyczna 200 Podsumowanie 201Rozdział 23. Metoda szablonowa 203 Symulacja gry 203 Podsumowanie 205Rozdział 24. Wizytator 207 Nachalny wizytator 208 Wyświetlacz reflektywny 209 Co to jest dysponowanie? 210 Klasyczny wizytator 212 Implementacja dodatkowego wizytatora 213 Wizytator acykliczny 214 Warianty i funkcja std::visit 216 Podsumowanie 217CZĘŚĆ IV. DODATEK A. FUNKCJONALNE WZORCE PROJEKTOWE 219Rozdział 25. Monada Maybe 221 O autorze: Dmitri Nesteruk jest analitykiem giełdowym i programistą. Występuje na konferencjach, tworzy kursy i pisze książki techniczne. Zawodowo interesuje się integracją rozwiązań w dziedzinie obliczeń, finansów i handlu algorytmicznego. Z upodobaniem programuje w C# i C++ i implementuje wysokowydajne przetwarzanie danych za pomocą takich technologii jak CUDA oraz FPGA. W 2009 roku za osiągnięcia w dziedzinie C# otrzymał tytuł MVP.

Informatyka

luźne rozmowy producentów mleka, dobre miejsce władysławowo, rarr, zmiana lekarza rodzinnego ile trwa, czy pracodawca może zmusić do nadgodzin 2018, inwentaryzacja na czym polega, mieszkaniec afryki, marcinkiewicz kazimierz

yyyyy