reklama - zainteresowany?

Język C++. Koncepcje i techniki programowania - Helion

Język C++. Koncepcje i techniki programowania
Autor: Andrew Koenig, Barbara E. Moo
Tytuł oryginału: Ruminations on C++
Tłumaczenie: Jarosław Dobrzański
ISBN: 83-7361-702-7
stron: 392, Format: B5, okładka: miękka
Data wydania: 2004-12-14
Księgarnia: Helion

Cena książki: 39,90 zł

Dodaj do koszyka Język C++. Koncepcje i techniki programowania

Tagi: C++ - Programowanie

Język C++ to najpopularniejszy obecnie język programowania. Jego podstawowe zalety -- przejrzysta składnia, niewielka ilość słów kluczowych i szeroki wachlarz możliwości -- przysporzyły mu wielu zwolenników. Na rynku dostępnych jest wiele książek o programowaniu w C++, jednak większość z nich zawiera sposoby rozwiązywania konkretnych problemów i zadań programistycznych. Niewiele książek koncentruje się na założeniach, na których opiera się programowanie w języku C++.

W książce "Język C++. Koncepcje i techniki programowania" autorzy skoncentrowali się na kluczowych technikach programowania w C++. Jednak nie przedstawiają ich w formie odpowiedzi na pytania "jak to zrobić", ale "dlaczego robimy to tak, a nie inaczej". Opisują szeroki wachlarz idei i technik programowania w C++ począwszy od szczegółowych przykładów kodu, a skończywszy na zasadach i filozofii projektowania.

  • Tworzenie klas
  • Uchwyty klas
  • Zasady projektowania obiektowego
  • Szablony i iteratory
  • Stosowanie bibliotek
  • Projektowanie bibliotek
  • Techniki programowania

Dzięki tej książce nauczysz się nie tylko przestrzegać reguł języka C++, ale także myśleć w tym języku podczas pracy nad programem.

O autorach:
Andrew Koenig jest członkiem działu badającego systemy oprogramowania w Shannon Laboratory firmy AT&T oraz redaktorem projektu komitetów standaryzacyjnych języka C++. [więcej...]

Barbara Moo jest konsultantką z dwudziestoletnim doświadczeniem programistycznym, zarządzała projektem pierwszego kompilatora C++. [więcej...]

Dodaj do koszyka Język C++. Koncepcje i techniki programowania

Dodaj do koszyka Język C++. Koncepcje i techniki programowania

Spis treści

Język C++. Koncepcje i techniki programowania -- spis treści

Wstęp (11)

Wprowadzenie (15)

  • 0.1. Podejście pierwsze (15)
  • 0.2. Jak to zrobić bez klas? (18)
  • 0.3. Dlaczego w C++ było łatwiej? (19)
  • 0.4. Bardziej rozbudowany przykład (20)
  • 0.5. Wnioski (20)

Część I Motywacja (23)

Rozdział 1. Dlaczego używam C++? (25)

  • 1.1. Problem (25)
  • 1.2. Historia i kontekst (26)
  • 1.3. Automatyczna dystrybucja oprogramowania (27)
  • 1.4. Czas na C++ (30)
  • 1.5. Oprogramowanie z odzysku (34)
  • 1.6. Postscriptum (35)

Rozdział 2. Dlaczego pracuję nad rozwojem C++? (37)

  • 2.1. Sukces małych projektów (37)
  • 2.2. Abstrakcja (39)
  • 2.3. Maszyny powinny pracować dla ludzi (42)

Rozdział 3. Życie w prawdziwym świecie (43)

Część II Klasy i dziedziczenie (49)

Rozdział 4. Lista kontrolna dla autorów klas (51)

Rozdział 5. Klasy surogatów (61)

  • 5.1. Problem (61)
  • 5.2. Rozwiązanie klasyczne (62)
  • 5.3. Wirtualne funkcje kopiujące (63)
  • 5.4. Definiowanie klasy surogatu (64)
  • 5.5. Podsumowanie (67)

Rozdział 6. Uchwyty - część 1. (69)

  • 6.1. Problem (69)
  • 6.2. Prosta klasa (70)
  • 6.3. Przyłączanie uchwytu (72)
  • 6.4. Dostęp do obiektu (72)
  • 6.5. Prosta implementacja (73)
  • 6.6. Uchwyty z licznikami użycia (74)
  • 6.7. Kopiowanie przy zapisie (76)
  • 6.8. Omówienie (77)

Rozdział 7. Uchwyty - część 2. (79)

  • 7.1. Przypomnienie (80)
  • 7.2. Separowanie licznika użycia (81)
  • 7.3. Abstrahowanie liczników użycia (82)
  • 7.4. Funkcje dostępowe i kopiowanie przy zapisie (84)
  • 7.5. Omówienie (85)

Rozdział 8. Program obiektowy (87)

  • 8.1. Problem (87)
  • 8.2. Rozwiązanie obiektowe (88)
  • 8.3. Klasy uchwytów (91)
  • 8.4. Rozwinięcie 1. - nowe operacje (94)
  • 8.5. Rozwinięcie 2. - nowe typy węzłów (96)
  • 8.6. Refleksje (98)

Rozdział 9. Analiza ćwiczenia praktycznego - część 1. (99)

  • 9.1. Problem (99)
  • 9.2. Projektowanie interfejsu (101)
  • 9.3. Kilka brakujących elementów (103)
  • 9.4. Testowanie interfejsu (104)
  • 9.5. Strategia (104)
  • 9.6. Taktyka (105)
  • 9.7. Łączenie obrazów (108)
  • 9.8. Wnioski (111)

Rozdział 10. Analiza ćwiczenia praktycznego - część 2. (113)

  • 10.1. Strategia (113)
  • 10.2. Korzystanie z możliwości struktury (125)
  • 10.3. Wnioski (128)

Rozdział 11. Kiedy nie używać funkcji wirtualnych? (131)

  • 11.1. Argumenty "za" (131)
  • 11.2. Argumenty "przeciw" (132)
  • 11.3. Szczególna rola destruktorów (137)
  • 11.4. Podsumowanie (139)

Część III Szablony (141)

Rozdział 12. Tworzenie klasy zasobnika (143)

  • 12.1. Co jest w środku? (143)
  • 12.2. Co oznacza kopiowanie zasobnika? (144)
  • 12.3. Jak dostać się do elementów w zasobniku? (147)
  • 12.4. Jak odróżnić odczyt od zapisu? (148)
  • 12.5. Jak poradzić sobie z rozrostem zasobnika? (150)
  • 12.6. Jakie operacje udostępnia zasobnik? (151)
  • 12.7. Jakie są założenia związane z typem elementu zasobnika? (152)
  • 12.8. Zasobniki i dziedziczenie (153)
  • 12.9. Projektowanie klasy "tablicopodobnej" (154)

Rozdział 13. Dostęp do elementów zasobnika (161)

  • 13.1. Imitowanie wskaźnika (161)
  • 13.2. Dostęp do danych (163)
  • 13.3. Pozostałe problemy (165)
  • 13.4. Pointer wskazujący const Array (169)
  • 13.5. Użyteczne dodatki (170)

Rozdział 14. Iteratory (175)

  • 14.1. Uzupełnianie klasy Pointer (175)
  • 14.2. Co to jest iterator? (178)
  • 14.3. Usuwanie elementu (179)
  • 14.4. Usuwanie zasobnika (180)
  • 14.5. Inne względy projektowe (181)
  • 14.6. Podsumowanie (182)

Rozdział 15. Sekwencje (183)

  • 15.1. Dzieło sztuki (183)
  • 15.2. Stara, radykalna idea (185)
  • 15.3. Może jeszcze kilka dodatków... (189)
  • 15.4. Przykład zastosowania (192)
  • 15.5. Może jeszcze coś... (196)
  • 15.6. Do przemyślenia (198)

Rozdział 16. Szablony jako interfejsy (199)

  • 16.1. Problem (199)
  • 16.2. Pierwszy przykład (200)
  • 16.3. Separowanie iteracji (200)
  • 16.4. Iterowanie poprzez dowolne typy (203)
  • 16.5. Dodawanie innych typów (204)
  • 16.6. Uogólnianie sposobu przechowywania (204)
  • 16.7. Dowód przydatności (207)
  • 16.8. Podsumowanie (208)

Rozdział 17. Szablony a algorytmy ogólne (211)

  • 17.1. Konkretny przykład (212)
  • 17.2. Uogólnianie typu elementu (213)
  • 17.3. Przełożenie zliczania elementów na później (214)
  • 17.4. Niezależność od adresu (215)
  • 17.5. Wyszukiwanie w strukturach niebędących tablicami (217)
  • 17.6. Podsumowanie (218)

Rozdział 18. Iteratory ogólne (221)

  • 18.1. Inny algorytm (221)
  • 18.2. Kategorie i wymogi (223)
  • 18.3. Iteratory wejściowe (224)
  • 18.4. Iteratory wyjściowe (224)
  • 18.5. Iteratory postępowe (225)
  • 18.6. Iteratory dwukierunkowe (226)
  • 18.7. Iteratory o dostępie swobodnym (226)
  • 18.8. Dziedziczenie? (227)
  • 18.9. Wydajność (228)
  • 18.10. Podsumowanie (228)

Rozdział 19. Korzystanie z iteratorów ogólnych (231)

  • 19.1. Typy iteratorów (232)
  • 19.2. Wirtualne sekwencje (232)
  • 19.3. Iterator strumienia wyjściowego (234)
  • 19.4. Iterator strumienia wejściowego (236)
  • 19.5. Omówienie (239)

Rozdział 20. Adaptery dla iteratorów (241)

  • 20.1. Przykład (241)
  • 20.2. Asymetria kierunkowa (243)
  • 20.3. Konsekwencja a asymetria (244)
  • 20.4. Automatyczne odwracanie (245)
  • 20.5. Omówienie (247)

Rozdział 21. Obiekty funkcji (249)

  • 21.1. Przykład (249)
  • 21.2. Wskaźniki funkcji (252)
  • 21.3. Obiekty funkcji (254)
  • 21.4. Szablony obiektów funkcji (255)
  • 21.5. Ukrywanie typów pośrednich (256)
  • 21.6. Jeden typ zawiera kilka (257)
  • 21.7. Implementacja (258)
  • 21.8. Omówienie (260)

Rozdział 22. Adaptery funkcji (261)

  • 22.1. Dlaczego obiekty funkcji? (261)
  • 22.2. Obiekty funkcji dla operatorów wbudowanych (262)
  • 22.3. Funkcje wiążące (263)
  • 22.4. Spojrzenie z bliska (264)
  • 22.5. Dziedziczenie interfejsu (265)
  • 22.6. Używanie klas (266)
  • 22.7. Omówienie (267)

Część IV Biblioteki (269)

Rozdział 23. Biblioteki w bieżącym zastosowaniu (271)

  • 23.1. Problem (271)
  • 23.2. Istota problemu - część 1. (273)
  • 23.3. Implementacja - część 1. (273)
  • 23.4. Istota problemu - część 2. (276)
  • 23.5. Implementacja - część 2. (276)
  • 23.6. Omówienie (278)

Rozdział 24. Obiektowa lekcja projektowania interfejsu biblioteki (281)

  • 24.1. Komplikacje (282)
  • 24.2. Poprawianie interfejsu (283)
  • 24.3. Szczegółowe rozważania (285)
  • 24.4. Pisanie kodu (286)
  • 24.5. Wnioski (288)

Rozdział 25. Projektowanie bibliotek jako budowanie języka (289)

  • 25.1. Ciągi znakowe (289)
  • 25.2. Wyczerpanie dostępnej pamięci (290)
  • 25.3. Kopiowanie (293)
  • 25.4. Ukrywanie implementacji (296)
  • 25.5. Konstruktor domyślny (298)
  • 25.6. Inne operacje (299)
  • 25.7. Podciągi (301)
  • 25.8. Wnioski (302)

Rozdział 26. Projektowanie języka jako budowanie bibliotek (303)

  • 26.1. Abstrakcyjne typy danych (303)
  • 26.2. Biblioteki i abstrakcyjne typy danych (305)
  • 26.3. Rezerwacja pamięci (308)
  • 26.4. Przyporządkowywanie i inicjalizacja składowych klas (309)
  • 26.5. Obsługa wyjątków (311)
  • 26.6. Podsumowanie (312)

Część V Techniki (313)

Rozdział 27. Klasy, które się śledzą (315)

  • 27.1. Projektowanie klasy śledzącej (315)
  • 27.2. Tworzenie martwego kodu (318)
  • 27.3. Generowanie wyników inspekcji dla obiektów (319)
  • 27.4. Weryfikowanie zachowania zasobnika (321)
  • 27.5. Podsumowanie (325)

Rozdział 28. Grupowy przydział pamięci dla obiektów (327)

  • 28.1. Problem (327)
  • 28.2. Projektowanie rozwiązania (327)
  • 28.3. Implementacja (330)
  • 28.4. Dziedziczenie (332)
  • 28.5. Podsumowanie (333)

Rozdział 29. Aplikatory, manipulatory i obiekty funkcji (335)

  • 29.1. Problem (336)
  • 29.2. Rozwiązanie (338)
  • 29.3. Inne rozwiązanie (338)
  • 29.4. Dodatkowe argumenty (340)
  • 29.5. Przykład (341)
  • 29.6. Formy skrócone (343)
  • 29.7. Przemyślenia (344)
  • 29.8. Uwagi historyczne, źródła i podziękowania (345)

Rozdział 30. Uniezależnianie bibliotek aplikacji od wejść i wyjść (347)

  • 30.1. Problem (347)
  • 30.2. Rozwiązanie 1. - spryt i metoda siłowa (348)
  • 30.3. Rozwiązanie 2. - abstrakcyjne wyjście (349)
  • 30.4. Rozwiązanie 3. - spryt bez metody siłowej (351)
  • 30.5. Uwagi (354)

Część VI Podsumowanie (355)

Rozdział 31. Przez złożoność do prostoty (357)

  • 31.1. Świat jest złożony (357)
  • 31.2. Złożoność staje się ukryta (358)
  • 31.3. Komputery mają to samo (359)
  • 31.4. Komputery rozwiązują prawdziwe problemy (361)
  • 31.5. Biblioteki klas i semantyka języka (362)
  • 31.6. Ułatwianie jest trudne (364)
  • 31.7. Abstrakcja a interfejs (365)
  • 31.8. Konserwacja złożoności (366)

Rozdział 32. "Witaj świecie" i co dalej? (367)

  • 32.1. Znajdź w pobliżu eksperta (367)
  • 32.2. Wybierz narzędzie i opanuj je (368)
  • 32.3. Niektóre elementy C są ważne... (368)
  • 32.4. ...inne niekoniecznie (370)
  • 32.5. Wyznacz sobie szereg problemów do rozwiązania (371)
  • 32.6. Konkluzja (374)

Dodatki (377)

Skorowidz (379)

Dodaj do koszyka Język C++. Koncepcje i techniki programowania

Code, Publish & WebDesing by CATALIST.com.pl



(c) 2005-2024 CATALIST agencja interaktywna, znaki firmowe należą do wydawnictwa Helion S.A.