Burzliwy rozwój obiektowości nastąpił w połowie lat 90. wraz z upowszechnieniem się takich języków jak C++ czy Smalltalk. Obecnie programowanie zorientowane obiektowo wciąż jest jednym z najważniejszych paradygmatów projektowania. Łatwo zauważyć, że większość nowoczesnych języków programowania i technologii sieciowych opiera się na technikach obiektowych. Nieco trudniej jest dostrzec, że mimo szybkiego ewoluowania technik i języków programistycznych podstawowe pojęcia programowania obiektowego pozostają niezmienne i niezależne od jakiejkolwiek platformy. Początkujący programiści powinni więc poświęcić nieco czasu na zapoznanie się z tymi pojęciami i naukę czegoś, co można nazwać "myśleniem obiektowym w programowaniu".
Ta książka jest kolejnym, poprawionym i uzupełnionym wydaniem wyczerpującego wprowadzenia do programowania zorientowanego obiektowo. Jej głównym celem jest przedstawienie podstaw myślenia obiektowego i najważniejszych pojęć w tym zakresie. Wyjaśniono tu, w jaki sposób poprawnie posługiwać się dziedziczeniem i kompozycją, odróżniać agregację od asocjacji oraz zrozumieć różnice między interfejsem a implementacją. Szczególną uwagę zwrócono na technologie, które przetrwały próbę czasu ostatnich 20 lat i stały się rdzeniem koncepcji programowania obiektowego. Opisano też najważniejsze wzorce projektowe, wskazano techniki unikania zależności i zaprezentowano zasady zwane SOLID, których przestrzeganie pozwala tworzyć kod wysokiej jakości, zrozumiały i elastyczny.
Dzięki tej książce:
- zrozumiesz podstawowe pojęcia obiektowości
- zaczniesz myśleć abstrakcyjnie podczas projektowania interfejsów
- nauczysz się budowy i zasad modelowania klas
- będziesz tworzyć kod, który będzie się nadawał do wielokrotnego wykorzystania
- zaczniesz unikać zależności i silnych powiązań między klasami
- przyswoisz sobie i będziesz stosować zasady SOLID
Techniki obiektowe. Zrozum, zanim zaimplementujesz!
Rozdziały:
O autorze
Podziękowania
Prawa autorskie
Wstęp
- Tematyka książki
- Nowości w piątym wydaniu
- Adresaci książki
- Metodyka
- Kod źródłowy
1. Podstawowe pojęcia obiektowości
- Podstawowe pojęcia
- Obiekty a stare systemy
- Programowanie obiektowe a proceduralne
- Zamiana podejścia proceduralnego na obiektowe
- Programowanie proceduralne
- Programowanie obiektowe
- Definicja obiektu
- Dane obiektu
- Zachowania obiektu
- Definicja klasy
- Tworzenie obiektów
- Atrybuty
- Metody
- Komunikaty
- Modelowanie klas przy użyciu diagramów UML
- Hermetyzacja i ukrywanie danych
- Interfejsy
- Implementacje
- Realistyczna ilustracja paradygmatu interfejsu i implementacji
- Model paradygmatu interfejs implementacja
- Dziedziczenie
- Nadklasy i podklasy
- Abstrakcja
- Związek typu jest
- Polimorfizm
- Kompozycja
- Abstrakcja
- Związek typu ma
- Podsumowanie
2. Myślenie w kategoriach obiektowych
- Różnica między interfejsem a implementacją
- Interfejs
- Implementacja
- Przykład implementacji i interfejsu
- Zastosowanie myślenia abstrakcyjnego w projektowaniu interfejsów
- Minimalizowanie interfejsu
- Określanie grupy docelowej
- Zachowania obiektu
- Ograniczenia środowiska
- Identyfikowanie publicznych interfejsów
- Identyfikowanie implementacji
- Podsumowanie
- Źródła
3. Inne pojęcia z zakresu obiektowości
- Konstruktory
- Kiedy wywoływany jest konstruktor
- Zawartość konstruktora
- Konstruktor domyślny
- Zastosowanie wielu konstruktorów
- Przeciążanie metod
- Zastosowanie języka UML do modelowania klas
- Budowa nadklasy
- Projektowanie konstruktorów
- Obsługa błędów
- Ignorowanie problemu
- Szukanie błędów i kończenie działania programu
- Szukanie błędów i próba ich naprawienia
- Zgłaszanie wyjątków
- Pojęcie zakresu
- Atrybuty lokalne
- Atrybuty obiektowe
- Atrybuty klasowe
- Przeciążanie operatorów
- Wielokrotne dziedziczenie
- Operacje obiektów
- Podsumowanie
- Źródła
4. Anatomia klasy
- Nazwa klasy
- Komentarze
- Atrybuty
- Konstruktory
- Metody dostępowe
- Metody interfejsu publicznego
- Prywatne metody implementacyjne
- Podsumowanie
- Źródła
5. Wytyczne dotyczące projektowania klas
- Modelowanie systemów świata rzeczywistego
- Identyfikowanie interfejsów publicznych
- Minimalizacja interfejsu publicznego
- Ukrywanie implementacji
- Projektowanie niezawodnych konstruktorów i destruktorów
- Projektowanie mechanizmu obsługi błędów w klasie
- Pisanie dokumentacji i stosowanie komentarzy
- Tworzenie obiektów nadających się do kooperacji
- Wielokrotne użycie kodu
- Rozszerzalność
- Tworzenie opisowych nazw
- Wyodrębnianie nieprzenośnego kodu
- Umożliwianie kopiowania i porównywania obiektów
- Ograniczanie zakresu
- Konserwacja kodu
- Iteracja
- Testowanie interfejsu
- Wykorzystanie trwałości obiektów
- Serializacja i szeregowanie obiektów
- Podsumowanie
- Źródła
6. Projektowanie z wykorzystaniem obiektów
- Wytyczne dotyczące projektowania
- Wykonanie odpowiedniej analizy
- Określanie zakresu planowanych prac
- Gromadzenie wymagań
- Tworzenie prototypu systemu
- Identyfikowanie klas
- Definiowanie wymagań wobec każdej z klas
- Określenie warunków współpracy między klasami
- Tworzenie modelu klas opisującego system
- Tworzenie prototypu interfejsu użytkownika za pomocą kodu
- Obiekty opakowujące
- Kod strukturalny
- Opakowywanie kodu strukturalnego
- Opakowywanie nieprzenośnego kodu
- Opakowywanie istniejących klas
- Podsumowanie
- Źródła
7. Dziedziczenie i kompozycja
- Wielokrotne wykorzystywanie obiektów
- Dziedziczenie
- Generalizacja i specjalizacja
- Decyzje projektowe
- Kompozycja
- Reprezentowanie kompozycji na diagramach UML
- Czemu hermetyzacja jest podstawą technologii obiektowej
- Jak dziedziczenie osłabia hermetyzację
- Szczegółowy przykład wykorzystania polimorfizmu
- Odpowiedzialność obiektów
- Klasy abstrakcyjne, metody wirtualne i protokoły
- Podsumowanie
- Źródła
8. Wielokrotne wykorzystanie kodu interfejsy i klasy abstrakcyjne
- Wielokrotne wykorzystanie kodu
- Infrastruktura programistyczna
- Co to jest kontrakt
- Klasy abstrakcyjne
- Interfejsy
- Wnioski
- Dowód kompilatora
- Zawieranie kontraktu
- Punkty dostępowe do systemu
- Przykład biznesu elektronicznego
- Biznes elektroniczny
- Podejście niezakładające wielokrotnego wykorzystania kodu
- Rozwiązanie dla aplikacji biznesu elektronicznego
- Model obiektowy UML
- Podsumowanie
- Źródła
9. Tworzenie obiektów i projektowanie obiektowe
- Relacje kompozycji
- Podział procesu budowy na etapy
- Rodzaje kompozycji
- Agregacja
- Asocjacja
- Łączne wykorzystanie asocjacji i agregacji
- Unikanie zależności
- Liczność
- Kilka asocjacji
- Asocjacje opcjonalne
- Praktyczny przykład
- Podsumowanie
- Źródła
10. Wzorce projektowe
- Historia wzorców projektowych
- Wzorzec MVC języka Smalltalk
- Rodzaje wzorców projektowych
- Wzorce konstrukcyjne
- Wzorzec projektowy Fabryka
- Wzorzec Metoda Fabryczna
- Wzorce strukturalne
- Wzorzec projektowy Adapter
- Wzorce czynnościowe
- Wzorzec projektowy Iterator
- Antywzorce
- Podsumowanie
- Źródła
11. Jak uniknąć zależności i silnych powiązań między klasami
- Kompozycja a dziedziczenie i wstrzykiwanie zależności
- 1. Dziedziczenie
- 2. Kompozycja
- Wstrzykiwanie zależności
- Wstrzykiwanie przez konstruktor
- Wstrzykiwanie za pomocą metody ustawiającej
- Podsumowanie
- Źródła
12. Zasady SOLID projektowania obiektowego
- Zasady SOLID projektowania obiektowego
- 1. Zasada jednej odpowiedzialności SRP
- 2. Zasada otwarty/zamknięty OCP
- 3. Zasada podstawiania Liskov LSP
- 4. Zasada segregacji interfejsów IPS
- 5. Zasada odwrócenia zależności DIP
- Krok 1. Przykład wstępny
- Krok 2. Separacja zachowania
- Krok 3. Wstrzykiwanie zależności