• Obecnie brak na stanie
Nowoczesne projektowanie w C++
search
  • Nowoczesne projektowanie w C++
ID: 32008
Andrei Alexandrescu
Wycofany
 

Wysyłka od 50 zł gratis

darmowa wysyłka paczkomatem na terenie Polski dla wszystkich zamówień powyżej 50 PLN

 

Wysyłka tego samego dnia

Jeśli Twoja wpłata zostanie zaksięgowana na naszym koncie do godz. 11:00

 

14 dni na zwrot

Każdy konsument może zwrócić zakupiony towar w ciągu 14 dni bez zbędnych pytań

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
32008

Produkty z tej samej kategorii (16)