- Obecnie brak na stanie
|
Autor: Andrei Alexandrescu ISBN: 83-204-3052-6 Format: B5, 362 str. Wydawnictwo: WNT |
| O książce |
|
Książka jest poświęcona wzorcom projektowym, programowaniu generycznemu i językowi programowania C++. Właściwe połączenie tych trzech elementów ułatwia programistom tworzenie zwartego i elastycznego kodu, nadającego się do wielokrotnego użycia. Autor wprowadza pojęcie komponentów genetycznych - szablonów projektowych przeznaczonych do generowania powtarzalnych kawałków kodu. Umożliwiają one proste i łagodne przejście od projektowania do implementacji oraz tworzenie kodu lepiej oddającego pierwotny zamysł projektowy. Ułatwiają ponowne użycie struktur projektowych, często bez potrzeby wprowadzania w nich jakichkolwiek zmian. Autor opisuje wybrane mechanizmy i właściwości języka C++, wykorzystywane do tworzenia komponentów generycznych. Analizuje problemy pojawiające się w codziennej pracy programisty. Przedstawia nowatorską technikę projektowania klas, a mianowicie projektowanie na podstawie wytycznych, a także nowe i bardzo silne narzędzie metaprogramowania, jakim są listy typów. Zajmuje się implementacjami wzorców projektowych, takich jak Odwiedzający, Singleton, Polecenie i Fabryka Abstrakcyjna, oraz realizacją mechanizmu wywołania wielowirtualnego. Łącząc niezwykłą pomysłowość z techniczną wirtuozerią, przedstawia nowatorskie podejście do projektowania programów. Oto adres utworzonej przez tłumacza strony internetowej tej książki: http://www.nowoczesne-cplusplus.com/ Spis treści Przedmowa Scotta Meyersa Przedmowa Johna Ylissidesa Wstęp Podziękowania Część I. Techniki 1. Klasy parametryzowane wytycznymi 1.1. Zagadnienie wielości w projektowaniu oprogramowania 1.2. Porażka uniwersalnych interfejsów 1.3. Wielodziedziczenie rusza na ratunek? 1.4. W szablonach nadzieja 1.5. Wytyczne i klasy wytycznych 1.6. Wytyczne wzbogacone 1.7. Destruktory wytycznych 1.8. Opcjonalna funkcjonalność przez niepełną specjalizację 1.9. Łączenie wytycznych 1.10. Modyfikowanie struktury klasy za pomocą wytycznych 1.11. Zgodność wytycznych 1.12. Rozkład klasy na wytyczne 1.13. Podsumowanie 2. Techniki 2.1. Asercje statyczne 2.2. Częściowa specjalizacja szablonów 2.3. Klasy lokalne 2.4. Odwzorowanie stałych całkowitych w typy 2.5. Odwzorowanie typu w typ 2.6. Wybór typu 2.7. Statyczne wykrywanie dziedziczenia i możliwości konwersji 2.8. Opakowanie dla type_info 2.9. NullType i EmptyType 2.10. Cechowanie typów 2.11. Podsumowanie 3. Listy typów 3.1. Potrzeba 3.2. Definiowanie listy typów 3.3. Tworzenie listy typów przez wyliczenie elementów 3.4. Obliczanie długości 3.5. Intermezzo 3.6. Indeksowanie 3.7. Wyszukiwanie w listach typów 3.8. Łączenie list typów 3.9. Usuwanie elementu z listy typów 3.10. Usuwanie powtórzeń 3.11. Zastępowanie elementu w liście typów 3.12. Sortowanie list typów według porządku częściowego 3.13. Generowanie klas za pomocą list typów 3.14. Podsumowanie 3.15. Listy typów w skrócie 4. Przydzielacz małych obiektów 4.1. Domyślny przydzielacz sterty 4.2. Działanie przydziełacza pamięci 4.3. Przydzielacz małych obiektów 4.4. Kawałki pamięci (chunks) 4.5. Przydzielacz bloków o stałym rozmiarze 4.6. Klasa SmallObjAllocator 4.7. Udajemy twórcę kompilatora 4.8. Proste, skomplikowane, a jednak w końcu proste 4.9. Sprawy administracyjne 4.10. Podsumowanie 4.11. Przydzielacz małych obiektów w skrócie Część II. Komponenty 5. Funktory uogólnione 5.1. Wzorzec projektowy Polecenie 5.2. Polecenie w praktyce 5.3. Twory wywoływame w C++ 5.4. Szkielet szablonu Functor 5.5. Przekazujący Functor::operator ( ) 5.6. Obsługa funktorów 5.7. Zbuduj jeden, drugi otrzymasz w prezencie 5.8. Konwersje typów argumentów i wyniku 5.9. Wskaźniki do funkcji składowych 5.10. Wiązanie 5.11. Makropolecenia 5.12. Brutalna rzeczywistość I: koszt funkcji przekazujących 5.13. Brutalna rzeczywistość II: przydział pamięci na stercie 5.14. Implementacja „powtórz" i „cofnij" za pomocą szablonu Functor 5.15. Podsumowanie 5.16. Functor w skrócie 6. Implementacja singletonów 6.1. Dane statyczne + funkcje statyczne != singleton 6.2. Podstawowe idiomy języka C++ związane z singletonami 6.3. Zapewnienie jedyności singletonu 6.4. Niszczenie singletonu 6.5. Problem martwej referencji 6.6. Rozwiązanie problemu martwych referencji (I): Singleton Feniksowy 6.7. Rozwiązanie problemu martwych referencji (II): Singletony z długowiecznością 6.8. Implementacja singletonów z długowiecznością 6.9. Wielowątkowość 6.10. Składamy wszystko razem 6.11. Praca z szablonem SingletonHolder 6.12. Podsumowanie 6.13. SingletonHolder w skrócie 7. Inteligente wskaźniki 7.1. 1001 drobiazgów na temat inteligentnych wskaźników 7.2. Zysk 7.3. Dowiązanie 7.4. Funkcje składowe inteligentnych wskaźników 7.5. Strategie zarządzania własnością 7.6. Operator pobrania adresu 7.7. Niejawna konwersja do wskaźnika 7.8. Równość i nierówność 7.9. Porównania porządkujące 7.10. Kontrola i zgłaszanie błędów 7.11. Stałe inteligentne wskaźniki i inteligentne wskaźniki do stałych 7.12. Tablice 7.13. Inteligentne wskaźniki i wielowątkowość 7.14. Składamy generyczny inteligentny wskaźnik 7.15. Podsumowanie 7.16. SmartPtr w skrócie 8. Fabryki obiektów 8.1. Zapotrzebowanie na fabryki obiektów 8.2. Fabryki obiektów w C++: klasy i obiekty 8.3. Implementacja fabryki obiektów 8.4. Identyfikatory typów 8.5. Uogólnienie 8.6. Szczególiki 8.7. Fabryki klonów 8.8. Korzystanie z fabryk obiektów w połączeniu z innymi komponentami generycznymi 8.9. Podsumowanie 8.10. Szablon Factory w skrócie 8.11. Szablon CloneFactory w skrócie 9. Fabryka Abstrakcyjna 9.1. Rola abstrakcyjnych fabryk w architekturze systemu 9.2. Interfejs generycznej fabryki abstrakcyjnej 9.3. Implementacja interfejsu AbstractFactory 9.4. Implementacja fabryki abstrakcyjnej opartej na prototypach 9.5. Podsumowanie 9.6. AbstractFactory i ConcreteFactory w skrócie 10. Odwiedzający 10.1. Podstawy 10.2. Przeciążanie: funkcja uniwersalna 10.3. Ulepszenie implementacji: Odwiedzający acykliczny 10.4. Generyczna implementacja wzorca Odwiedzający 10.5. Powrót do wersji „cyklicznej" 10.6. Odmiany wzorca Odwiedzający 10.7. Podsumowanie 10.8. Wzorzec Odwiedzający w skrócie 11. Wielometody 11.1. Czym są wielometody? 11.2. Kiedy wielometody są rzeczywiście potrzebne? 11.3. Rozwiązanie siłowe: dwa zapytania o typ 11.4. Zautomatyzowane rozwiązanie siłowe 11.5. Symetria w rozwiązaniu siłowym 11.6. Rozwiązanie logarytmiczne 11.7. FnDispatcher i symetria 11.8. Funktory jako wielometody 11.9. Konwersja argumentów: static_cast czy dynamic_cast? 11.10. Rozwiązanie w czasie stałym: szybkość ponad wszystko 11.11. BasicDispatcher i BasicFastDispatcher jako wytyczne 11.12. Co dalej? 11.13. odsumowanie 11.14. Wielometody w skrócie Dodatek. Minimalistyczna biblioteka wielowątkowa D.l. Krytyka wielowątkowości D.2. Podejście zastosowane w bibliotece Loki D.3. Operacje atomowe na typach całkowitoliczbowych D.4. Muteksy D.5. Semantyka blokowania w programowaniu obiektowym D.6. Opcjonalny modyfikator volatile D.7. Semafory, zdarzenia i inne luksusy D.8. Podsumowanie Literatura Skorowidz |
Złóż mnie. Bądź ze mnie dumny! Ten Model to mocny, napędzany sprężyną drewniany traktor, z charakterystycznym dla Ugears eleganckim designem i mechaniką. Ten piękny i mocny Traktor jest następcą naszego oryginalnego, zabytkowego modelu Traktora. UGears 70184
Brak towaru
Zestaw startowy zawierający Raspberry Pi 4B 8 GB oraz wszystkie niezbędne akcesoria: kartę pamięci microSD 32 GB z systemem Rasberry Pi OS, przewód Ethernet oraz oficjalne akcesoria: obudowę, zestaw chłodzący, zasilacz, przewód HDMI oraz kamerę.
Brak towaru
Zestaw startowy zawierający Raspberry Pi 4B 2 GB oraz wszystkie niezbędne akcesoria: kartę pamięci microSD 32 GB z systemem Rasberry Pi OS, przewód Ethernet oraz oficjalne akcesoria: obudowę, zestaw chłodzący, zasilacz, przewód HDMI oraz kamerę.
Brak towaru
Mikrokontroler ARM R7FA4M1AB3CFMAA0 od Renesas z rodziny RA4M1, montowany powierzchniowo, wykorzystuje rdzeń ARM Cortex M4 i oferuje 256 kB pamięci Flash oraz bogate interfejsy komunikacyjne. Działa w zakresie napięcia 1,6-5,5 V i temperaturach od -40°C do 105°C, posiadając 18 kanałów ADC i 10 liczników.
Brak towaru
Zestaw do naprawy ścieżek na płytkach drukowanych. Zawiera dyspenser FBX08S, który umożliwia precyzyjne dozowanie przewodów miedzianych oraz dwie szpule drutu FXS-9 o grubości 0,01 mm. Mechanic FBX08s
Brak towaru
Dwukanałowy generator sygnałowy oferuje zakres częstotliwości do 15MHz dla fal czworokątnych i trójkątnych oraz do 6MHz dla impulsów i fal dowolnych. Urządzenie zapewnia wysoką precyzję z dokładnością częstotliwości 20ppm i stabilnością 1ppm/3h, a także funkcje regulacji szerokości impulsu i rozdzielczość amplitudy 1mV. JDS2900-15
Brak towaru
Dwukanałowy generator sygnałowy obsługuje zakres częstotliwości do 30MHz dla fali sinusoidalnej i pozwala na precyzyjne dostosowanie parametrów sygnału. Urządzenie charakteryzuje się wysoką dokładnością, rozdzielczością 14 bitów dla fali oraz impedancją wyjściową 50Ω. JDS2900-30
Brak towaru
Dwukanałowy generator sygnałowy oferuje zakres częstotliwości do 40MHz dla fali sinusoidalnej i do 25MHz dla fal prostokątnej oraz trójkątnej. Charakteryzuje się wysoką precyzją, szerokim zakresem regulacji parametrów oraz impedancją wyjściową 50Ω. JDS2900-40
Brak towaru
Dwukanałowy generator sygnałowy DDS obsługuje zakres częstotliwości do 15MHz z precyzją do 0.01uHz i technologią DDS zapewniającą stabilność sygnału. Urządzenie oferuje 12-bitową rozdzielczość pionową, rozdzielczość amplitudy 1mV oraz wyjście o impedancji 50Ω. Junctek JDS6600-15
Brak towaru
Dwukanałowy generator sygnałowy DDS o zakresie do 30MHz oferuje precyzyjną generację sygnałów z technologią DDS i rozdzielczością do 0.01uHz. Urządzenie posiada 12-bitową rozdzielczość pionową, rozdzielczość amplitudy 1mV oraz wyjście o impedancji 50Ω. Junctek JDS6600-30
Brak towaru
Dwukanałowy generator sygnałowy DDS o zakresie do 40MHz zapewnia precyzyjną generację sygnałów dzięki technologii DDS z dokładnością do 0.01uHz. Urządzenie oferuje 12-bitową rozdzielczość pionową, rozdzielczość amplitudy 1mV i wyjście o impedancji 50Ω, czyniąc go niezastąpionym w laboratoriach elektronicznych. Junctek JDS6600-40
Brak towaru
Dwukanałowy generator sygnałowy DDS o częstotliwości 60MHz umożliwia generowanie różnorodnych przebiegów, z fali sinusoidalnej o zakresie do 60MHz do fali impulsowej do 6MHz. Urządzenie wyróżnia się precyzyjną rozdzielczością częstotliwości 0.01uHz, stabilnością 1ppm/3h oraz 12-bitową rozdzielczością przebiegu. Junctek JDS6600-60
Brak towaru
Wektorowy analizator sieci z dwoma portami. Może wykonywać pomiary dla częstotliwości od 50 kHz do 4,4 GHz. Wyposażony w wyświetlacz LCD, może być podłączony do komputera przez złącze USB. Nanovna V2 4"
Brak towaru
Wektorowy analizator sieci z dwoma portami. Może wykonywać pomiary dla częstotliwości od 50 kHz do 3 GHz. Wyposażony w wyświetlacz LCD, może być podłączony do komputera przez złącze USB. Nanovna V2 3.2"
Brak towaru
Odbiornik SDR (Software Defined Radio), który umożliwia odbiór sygnałów w zakresie częstotliwości od 10 kHz do 1 GHz. Jest idealny zarówno do monitorowania niskich częstotliwości, jak i do odbioru sygnałów na wyższych pasmach
Brak towaru
Moduł kamery termowizyjnej z czujnikiem podczerwieni MLX90640 oraz wyświetlaczem LCD TFT 2,8". Oferuje dokładność na poziomie 2°C i kąt widzenia 55°x35°.
Brak towaru