Jezyk_C_Efektywne_programowanie_obiektowe_cpefpo.pdf

(651 KB) Pobierz
IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI
KATALOG KSI¥¯EK
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
Jêzyk C++. Efektywne
programowanie obiektowe
Autor: Kayshav Dattatri
T³umaczenie: Micha³ Grzegorczyk, Jaromir Senczyk,
Przemys³aw Steæ, Przemys³aw Szeremiota, Tomasz Walczak
ISBN: 83-7361-812-0
Tytu³ orygina³u:
C++: Effective Object-Oriented
Software Construction
Format: B5, stron: 800
Programowanie obiektowe jest nierozerwalnie zwi¹zane z jêzykiem C++. Koncepcje
i metody programowania obiektowego, niezbêdne do swobodnego pos³ugiwania siê
t¹ technik¹, pomimo pozornej prostoty s¹ stosunkowo trudne do opanowania.
Projektowanie aplikacji w jêzyku C++ wymaga jednak nie tylko znajomo ci
podstawowych zasad programowania obiektowego, ale równie¿ wielu innych technik
programistycznych. Nale¿y prawid³owo zaplanowaæ strukturê aplikacji, poznaæ zasady
pisania poprawnego kodu i nauczyæ siê korzystaæ z notacji UML do modelowania
zale¿no ci pomiêdzy elementami aplikacji.
„C++. Efektywne programowanie obiektowe” to podrêcznik przeznaczony zarówno
dla pocz¹tkuj¹cych, jak i zaawansowanych programistów C++. Przedstawia metody
programowania obiektowego stosowane przez profesjonalistów. Opisuje techniki
obiektowe w kontek cie rzeczywistych problemów, przed jakimi staj¹ twórcy
oprogramowania podczas codziennej pracy.
• Podstawowe pojêcia i koncepcje programowania obiektowego
• Abstrakcja danych
• Notacja UML
• Zarz¹dzanie pamiêci¹ w programowaniu obiektowym
• Dziedziczenie
• Zasady programowania generycznego
• Obs³uga wyj¹tków
• Zaawansowane aplikacje obiektowe
Dziêki zawartym w tej ksi¹¿ce wiadomo ciom wykonasz nawet najtrudniejsze zadania
programistyczne, wykorzystuj¹c techniki obiektowe.
TWÓJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
O NOWO CIACH
ZAMÓW CENNIK
CZYTELNIA
FRAGMENTY KSI¥¯EK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
Rekomendacje ................................................................................ 13
Przedmowa ..................................................................................... 15
Wstęp ............................................................................................ 17
Część I
Pojęcia, techniki i aplikacje ...........................................21
Pochodzenie ................................................................................................................... 23
Przykład programowania proceduralnego ................................................................ 24
Reprezentacja konta bankowego .............................................................................. 25
Bezpieczeństwo konta bankowego ........................................................................... 26
Rozwiązywanie problemów w programowaniu obiektowym ................................... 27
Wprowadzenie do modelu obiektowego .......................................................................... 28
Terminologia .................................................................................................................. 30
Poznajemy komunikaty, metody i zmienne egzemplarza ............................................... 30
Z czego składa się obiekt? ........................................................................................ 31
Tworzenie obiektów ................................................................................................. 32
Co mo na uznać za klasę? .............................................................................................. 33
Co nie jest klasą? ............................................................................................................ 34
Cel klasy ......................................................................................................................... 35
Więcej o obiektach ......................................................................................................... 36
Stan obiektu ............................................................................................................. 36
Dlaczego stan obiektu jest wa ny? ........................................................................... 37
Kto kontroluje stan obiektu? .................................................................................... 38
Zachowanie obiektu ................................................................................................. 39
Etapy w konstruowaniu oprogramowania obiektowego ................................................. 40
Analiza obiektowa .................................................................................................... 40
Projektowanie obiektowe ......................................................................................... 41
Programowanie obiektowe ............................................................................................. 43
Kluczowe elementy modelu obiektowego ...................................................................... 43
Paradygmaty i języki programowania obiektowego ....................................................... 45
Jakie wymagania musi spełniać język obiektowy? ......................................................... 46
Zalety modelu obiektowego ........................................................................................... 47
Podsumowanie ............................................................................................................... 48
Rozdział 1. Czym jest programowanie obiektowe? ............................................. 23
6
Język C++. Efektywne programowanie obiektowe
Rozdział 2. Czym jest abstrakcja danych? ......................................................... 49
Analiza projektu odtwarzacza ........................................................................................ 51
Oddzielanie interfejsu od implementacji ........................................................................ 52
Znaczenie interfejsu ................................................................................................. 52
Dlaczego interfejs obiektu jest tak wa ny? ..................................................................... 53
Jaki interfejs jest wystarczający? .............................................................................. 53
Znaczenie implementacji ................................................................................................ 54
Ochrona implementacji .................................................................................................. 54
Jakie są korzyści ukrywania danych? ............................................................................. 56
Relacje między interfejsem, implementacją i hermetyzacją danych ............................... 57
Środki ostro ności przy hermetyzacji danych ................................................................ 58
Co i kiedy ukrywać? ....................................................................................................... 58
Abstrakcyjne typy danych .............................................................................................. 59
Implementacja abstrakcyjnego typu danych — stosu ..................................................... 60
Abstrakcja danych w języku C++ ................................................................................... 62
Regiony dostępu klasy .................................................................................................... 63
Niektóre pojęcia związane z klasami .............................................................................. 69
Kto jest implementatorem klasy? ................................................................................... 70
Implementowanie funkcji składowych ........................................................................... 70
Identyfikacja obiektu docelowego w funkcjach składowych .......................................... 71
Przykładowy program .................................................................................................... 73
Uwaga skoncentrowana jest na obiekcie ........................................................................... 74
Drugi rzut oka na interfejs .............................................................................................. 75
Czym są bezpieczne klasy wielowątkowe? .................................................................... 76
Zapewnianie niezawodności abstrakcji — niezmienniki i asercje klasy ......................... 78
Niezmienniki klasy ................................................................................................... 79
Warunki wstępne i warunki końcowe ...................................................................... 79
U ywanie asercji do implementowania niezmienników i warunków ....................... 80
Efektywne korzystanie z asercji ............................................................................... 81
Sposoby reprezentacji projektów obiektowych .............................................................. 82
Notacja Boocha .............................................................................................................. 83
Relacje między klasami .................................................................................................. 83
Asocjacja .................................................................................................................. 84
Agregacja (ma-coś) .................................................................................................. 84
Relacja korzystania .................................................................................................. 86
Relacja dziedziczenia (jest-czymś) ........................................................................... 87
Kategorie klas .......................................................................................................... 88
UML ............................................................................................................................... 88
Relacje między klasami .................................................................................................. 90
Asocjacja ........................................................................................................................ 90
Asocjacja jako agregacja .......................................................................................... 92
Asocjacja typu OR ................................................................................................... 93
Kompozycja ................................................................................................................... 93
Relacja uogólniania (jest-czymś) .................................................................................... 94
Znaczenie relacji ma-coś ................................................................................................ 95
Podsumowanie ............................................................................................................... 97
Rozdział 3. Abstrakcja danych w języku C++ ..................................................... 99
Podstawowe informacje o klasie .................................................................................... 99
Elementy klasy ............................................................................................................. 100
Regiony dostępu ..................................................................................................... 100
Konstruktor kopiujący .................................................................................................. 103
Dostęp do danych składowych obiektu — model języka C++ ............................... 106
Operacja przypisania .................................................................................................... 111
Więcej o wskaźniku this i dekorowaniu nazw .............................................................. 116
Metoda stała (const) ..................................................................................................... 118
Spis treści
7
Jak kompilator implementuje metody stałe? ................................................................. 120
Ró nice między klasą a strukturą w języku C++ .......................................................... 120
Co mo e zawierać klasa? .............................................................................................. 121
W czasie projektowania najwa niejszy jest interfejs klasy ........................................... 122
Nazwy klas, nazwy metod, typy argumentów i dokumentacja ..................................... 123
Sposoby przekazywania argumentów z perspektywy klienta ....................................... 124
Semantyka własności ................................................................................................... 128
Wybór odpowiedniego sposobu przekazywania argumentu ......................................... 130
Wartości zwracane przez funkcję ................................................................................. 131
Zwracanie referencji ..................................................................................................... 133
Jak napisać bezpieczną pod względem pamięci klasę? ................................................. 134
Optymalizacja kodu ............................................................................................... 134
Obowiązki klienta w pracy z klasami i funkcjami ........................................................ 134
Podsumowanie ............................................................................................................. 136
Rozdział 4. Inicjalizacja i zwalnianie pamięci w programowaniu obiektowym ...... 137
Co to jest inicjalizacja? ................................................................................................. 137
Inicjalizacja za pomocą konstruktora ..................................................................... 139
Reguły pracy z obiektami zagnie d onymi ............................................................ 146
Zagadnienia związane z przywracaniem pamięci ......................................................... 146
Śmieci .................................................................................................................... 146
Wiszące referencje ................................................................................................. 147
Jak zapobiegać powstawaniu śmieci i wiszących referencji? ................................. 148
Przywracanie pamięci a projektowanie języka ....................................................... 149
Kiedy powstają śmieci w języku C++? .................................................................. 151
Kiedy obiekt zajmuje zasoby? ................................................................................ 152
Przywracanie pamięci w języku C++ ........................................................................... 152
To samość obiektów .................................................................................................... 154
Semantyka kopiowania obiektów ................................................................................. 157
Semantyka prostej operacji kopiowania ................................................................. 158
Semantyka przypisywania obiektów ............................................................................ 163
Przypisanie jako operacja na l-wartości ................................................................. 166
Semantyka porównywania obiektów ............................................................................ 166
Równość obiektów a ekwiwalencja ........................................................................ 168
Dlaczego potrzebna jest kontrola kopiowania? ............................................................ 170
Przykład semafora .................................................................................................. 171
Przykład — serwer licencji .................................................................................... 173
Przykład — klasa String ......................................................................................... 174
Analiza ......................................................................................................................... 180
Kopiowanie przy zapisie .............................................................................................. 182
Kiedy u ywać zliczania referencji? ........................................................................ 188
Podsumowanie kopiowania przy zapisywaniu ....................................................... 188
Klasy i typy .................................................................................................................. 189
Podsumowanie ............................................................................................................. 190
Rozdział 5. Dziedziczenie ................................................................................ 191
Podstawy dziedziczenia ................................................................................................ 191
Znaczenie relacji dziedziczenia .................................................................................... 205
Skutki relacji dziedziczenia .......................................................................................... 205
Bezpośrednie i pośrednie klasy bazowe ................................................................. 206
Zasada podstawiania polimorficznego ......................................................................... 207
Inicjalizacja obiektów klasy bazowej ..................................................................... 210
Rozszerzanie hierarchii klas za pomocą dziedziczenia ................................................. 213
Podstawowe zalety dziedziczenia ................................................................................. 215
Wiązanie dynamiczne, funkcje wirtualne i polimorfizm .............................................. 216
Co oznacza wiązanie dynamiczne? ........................................................................ 219
Obsługa wiązania dynamicznego — funkcje wirtualne ......................................... 220
8
Język C++. Efektywne programowanie obiektowe
Wpływ dziedziczenia na hermetyzację danych ............................................................ 222
Co oznacza polimorfizm? ............................................................................................. 224
Efektywne stosowanie funkcji wirtualnych .................................................................. 225
Przesłanianie .......................................................................................................... 225
Kiedy potrzeba wirtualnego destruktora? ..................................................................... 228
Konstruktory i funkcje wirtualne .................................................................................. 231
Uogólnianie-uszczegóławianie ..................................................................................... 233
Klasy abstrakcyjne ....................................................................................................... 233
Zastosowania klas abstrakcyjnych ................................................................................ 237
Zaawansowany przykład klasy abstrakcyjnej — gra w szachy .............................. 241
Waga dziedziczenia ...................................................................................................... 249
Efektywne wielokrotne u ywanie kodu ........................................................................ 250
Klient abstrakcyjnej klasy bazowej .............................................................................. 253
Podsumowanie zalet dziedziczenia ............................................................................... 254
Zagro enia związane z dziedziczeniem i wiązaniem dynamicznym ............................ 256
Jak implementowane są funkcje wirtualne w języku C++? .................................... 257
Koszty funkcji wirtualnych .................................................................................... 258
Dynamiczne wiązanie i sprawdzanie typu .............................................................. 259
Zbędne u ywanie dziedziczenia i wiązania dynamicznego .......................................... 259
Wypo yczanie zbiorów bibliotecznych .................................................................. 259
Ró ne sposoby u ywania funkcji wirtualnych ............................................................. 270
Podsumowanie ............................................................................................................. 272
Rozdział 6. Dziedziczenie wielokrotne ............................................................. 273
Prosta definicja dziedziczenia wielokrotnego ............................................................... 273
Abstrakcja uniwersytetu ............................................................................................... 274
Powtórne wykorzystanie kodu z ulepszeniami ....................................................... 278
Znaczenie wielokrotnego dziedziczenia ....................................................................... 280
Przykład dziedziczenia wielokrotnego ......................................................................... 281
Rozwiązywanie konfliktów nazw w języku C++ ................................................... 282
Problem z wieloznacznością klas bazowych .......................................................... 285
Podstawowe zalety dziedziczenia wielokrotnego ......................................................... 287
Rozwiązania alternatywne dla dziedziczenia wielokrotnego ........................................ 287
Pierwsze rozwiązanie alternatywne ........................................................................ 287
Drugie rozwiązanie alternatywne ........................................................................... 290
Problem powtórnego dziedziczenia .............................................................................. 291
Rozwiązanie problemu powtórnego dziedziczenia ....................................................... 295
Dzielenie obiektów za pomocą wirtualnych klas bazowych .................................. 295
Zalety wirtualnych klas bazowych ......................................................................... 297
Nowe problemy wynikające z u ycia wirtualnych klas bazowych ......................... 297
Porównanie dziedziczenia wielokrotnego w językach Eiffel i C++ ....................... 302
Ogólne problemy z dziedziczeniem .............................................................................. 304
Dodawanie statycznych mo liwości za pomocą klas mieszanych ................................ 306
Definicja klasy mieszanej ....................................................................................... 306
Kiedy nale y u ywać klas mieszanych? ................................................................. 310
Dynamicznie zmieniająca się sytuacja ......................................................................... 311
Elastyczność projektu z klasami pełniącymi ró ne role ......................................... 316
Jak u ywać klas pełniących ró ne role? ................................................................. 316
Inne rozwiązanie zarządzania rolami ..................................................................... 324
Polimorficzne u ywanie obiektów TUniversityMember ........................................ 326
Wprowadzanie zmian w istniejących klasach ........................................................ 326
Klasy mieszane a obiekty pełniące role — mo liwości zastosowań ...................... 328
Wyprowadzenie prywatne w języku C++ ..................................................................... 330
Kiedy u ywać wyprowadzenia prywatnego? ......................................................... 332
Ponowne eksportowanie składowych prywatnej klasy bazowej ............................. 334
Alternatywne rozwiązanie dla wyprowadzenia prywatnego — zawieranie ........... 335
Kiedy potrzebne jest prywatne wyprowadzenie? ................................................... 337
Zgłoś jeśli naruszono regulamin