język c++. efektywne programowanie obiektowe helion, helion
[ Pobierz całość w formacie PDF ]
IDZ DO
PRZYK£ADOW
Jêzyk C++. Efektywne
SPIS TRECI
programowanie obiektowe
KATALOG KSI¥¯EK
Autor: Kayshav Dattatri
T³umaczenie: Micha³ Grzegorczyk, Jaromir Senczyk,
Przemys³aw Steæ, Przemys³aw Szeremiota, Tomasz Walczak
ISBN: 83-7361-812-0
Tytu³ orygina
Software Construction
Format: B5, stron: 800
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
TWÓJ KOSZYK
DODAJ DO KOSZYKA
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 znajomoci
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¿noci 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 kontekcie 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 wiadomociom wykonasz nawet najtrudniejsze zadania
programistyczne, wykorzystuj¹c techniki obiektowe.
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
O NOWOCIACH
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 treci
Rekomendacje ................................................................................13
Przedmowa .....................................................................................15
Wstp ............................................................................................17
Cz I Pojcia, techniki i aplikacje ...........................................21
Rozdział 1. Czym jest programowanie obiektowe? .............................................23
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 mo0na uzna1 za klas,? .............................................................................................. 33
Co nie jest klas#? ............................................................................................................ 34
Cel klasy ......................................................................................................................... 35
Wi,cej o obiektach ......................................................................................................... 36
Stan obiektu ............................................................................................................. 36
Dlaczego stan obiektu jest wa0ny? ........................................................................... 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łnia1 j,zyk obiektowy? ......................................................... 46
Zalety modelu obiektowego ........................................................................................... 47
Podsumowanie ............................................................................................................... 48
6
Jzyk 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 wa0ny? ..................................................................... 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 ostro0no;ci przy hermetyzacji danych ................................................................ 58
Co i kiedy ukrywa1? ....................................................................................................... 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
U0ywanie 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 jzyku 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 wskaGniku this i dekorowaniu nazw .............................................................. 116
Metoda stała (const) ..................................................................................................... 118
Spis treci
7
Jak kompilator implementuje metody stałe? ................................................................. 120
Ró0nice mi,dzy klas# a struktur# w j,zyku C++ .......................................................... 120
Co mo0e zawiera1 klasa? .............................................................................................. 121
W czasie projektowania najwa0niejszy 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 napisa1 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 pamici w programowaniu obiektowym ......137
Co to jest inicjalizacja? ................................................................................................. 137
Inicjalizacja za pomoc# konstruktora ..................................................................... 139
Reguły pracy z obiektami zagnie0d0onymi ............................................................ 146
Zagadnienia zwi#zane z przywracaniem pami,ci ......................................................... 146
<mieci .................................................................................................................... 146
Wisz#ce referencje ................................................................................................. 147
Jak zapobiega1 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
To0samo;1 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;1 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 u0ywa1 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
Jzyk 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 u0ywanie kodu ........................................................................ 250
Klient abstrakcyjnej klasy bazowej .............................................................................. 253
Podsumowanie zalet dziedziczenia ............................................................................... 254
Zagro0enia 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 u0ywanie dziedziczenia i wi#zania dynamicznego .......................................... 259
Wypo0yczanie zbiorów bibliotecznych .................................................................. 259
Ró0ne sposoby u0ywania 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 u0ycia wirtualnych klas bazowych ......................... 297
Porównanie dziedziczenia wielokrotnego w j,zykach Eiffel i C++ ....................... 302
Ogólne problemy z dziedziczeniem .............................................................................. 304
Dodawanie statycznych mo0liwo;ci za pomoc# klas mieszanych ................................ 306
Definicja klasy mieszanej ....................................................................................... 306
Kiedy nale0y u0ywa1 klas mieszanych? ................................................................. 310
Dynamicznie zmieniaj#ca si, sytuacja ......................................................................... 311
Elastyczno;1 projektu z klasami pełni#cymi ró0ne role ......................................... 316
Jak u0ywa1 klas pełni#cych ró0ne role? ................................................................. 316
Inne rozwi#zanie zarz#dzania rolami ..................................................................... 324
Polimorficzne u0ywanie obiektów TUniversityMember ........................................ 326
Wprowadzanie zmian w istniej#cych klasach ........................................................ 326
Klasy mieszane a obiekty pełni#ce role — mo0liwo;ci zastosowa ...................... 328
Wyprowadzenie prywatne w j,zyku C++ ..................................................................... 330
Kiedy u0ywa1 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
[ Pobierz całość w formacie PDF ]