Чистый код. Руководство хорошего программиста
Товар
- 0 раз купили
- 4.96 оценка
- 2 осталось
- 623 отзыва
Доставка
Характеристики
Описание
Stron: 444
Format: 16,5 x 23,4 cm
Rok wydania: 2010
Oprawa:miękka
Czysty kod. Podręcznik dobrego programisty
Robert C. Martin
Poznaj najlepsze metody tworzenia doskonałego kodu
- Jak pisać dobry kod, a zły przekształcić w dobry?
- Jak formatować kod, aby osiągnąć maksymalną czytelność?
- Jak implementować pełną obsługę błędów bez zaśmiecania logiki kodu?
O tym, ile problemów sprawia niedbale napisany kod, wie każdy programista. Nie wszyscy jednak wiedzą, jak napisać ten świetny, „czysty” kod i czym właściwie powinien się on charakteryzować. Co więcej – jak odróżnić dobry kod od złego? Odpowiedź na te pytania oraz sposoby tworzenia czystego, czytelnego kodu znajdziesz właśnie w tej książce. Podręcznik jest obowiązkową pozycją dla każdego, kto chce poznać techniki rzetelnego i efektywnego programowania.
W książce „Czysty kod. Podręcznik dobrego programisty” szczegółowo omówione zostały zasady, wzorce i najlepsze praktyki pisania czystego kodu. Podręcznik zawiera także kilka analiz przypadków o coraz większej złożoności, z których każda jest doskonałym ćwiczeniem porządkowania zanieczyszczonego bądź nieudanego kodu. Z tego podręcznika dowiesz się m.in., jak tworzyć dobre nazwy, obiekty i funkcje, a także jak tworzyć testy jednostkowe i korzystać z programowania sterowanego testami. Nauczysz się przekształcać kod zawierający problemy w taki, który jest solidny i efektywny.
- Nazwy klas i metod
- Funkcje i listy argumentów
- Rozdzielanie poleceń i zapytań
- Stosowanie wyjątków
- Komentarze
- Formatowanie
- Obiekty i struktury danych
- Obsługa błędów
- Testy jednostkowe
- Klasy i systemy
- Współbieżność
- Oczyszczanie kodu
Niech stworzony przez Ciebie kod imponuje czystością!
O autorze
Robert C. Martin (Wujek Bob) jest programistą od 1970 roku. Jest uznanym mówcą na konferencjach całego świata. Napisał między innymi książki Czysty kod (Helion, 2009), Agile. Programowanie zwinne: zasady, wzorce i praktyki zwinnego wytwarzania oprogramowania w C# (Helion, 2008), Mistrz czystego kodu. Kodeks postępowania profesjonalnych programistów (Helion, 2013) oraz UML for Java Programmers (Prentice Hall, 2003). Oprócz tego Martin opublikował setki artykułów, rozpraw i wpisów na blogach. Działał jako redaktor naczelny magazynu „The C++ Report” i był pierwszym przewodniczącym organizacji Agile Alliance. Założył i prowadzi międzynarodową firmę Object Mentor Inc., skupiającą doświadczonych programistów i menedżerów specjalizujących się we wspomaganiu firm w realizacji trudnych projektów.
Spis treści
- Słowo wstępne
- Wstęp
Podziękowania
Rysunki
- Rozdział 1. Czysty kod
Niech stanie się kod...
W poszukiwaniu doskonałego kodu...
Całkowity koszt bałaganu
Rozpoczęcie wielkiej zmiany projektu
Postawa
Największa zagadka
Sztuka czystego kodu?
Co to jest czysty kod?
Szkoły myślenia
Jesteśmy autorami
Zasada skautów
Poprzednik i zasady
Zakończenie
Bibliografia
- Rozdział 2. Znaczące nazwy
Wstęp
Używaj nazw przedstawiających intencje
Unikanie dezinformacji
Tworzenie wyraźnych różnic
Tworzenie nazw, które można wymówić
Korzystanie z nazw łatwych do wyszukania
Unikanie kodowania
Notacja węgierska
Przedrostki składników
Interfejsy i implementacje
Unikanie odwzorowania mentalnego
Nazwy klas
Nazwy metod
Nie bądź dowcipny
Wybieraj jedno słowo na pojęcie
Nie twórz kalamburów!
Korzystanie z nazw dziedziny rozwiązania
Korzystanie z nazw dziedziny problemu
Dodanie znaczącego kontekstu
Nie należy dodawać nadmiarowego kontekstu
Słowo końcowe
- Rozdział 3. Funkcje
Małe funkcje!
Bloki i wcięcia
Wykonuj jedną czynność
Sekcje wewnątrz funkcji
Jeden poziom abstrakcji w funkcji
Czytanie kodu od góry do dołu zasada zstępująca
Instrukcje switch
Korzystanie z nazw opisowych
Argumenty funkcji
Często stosowane funkcje jednoargumentowe
Argumenty znacznikowe
Funkcje dwuargumentowe
Funkcje trzyargumentowe
Argumenty obiektowe
Listy argumentów
Czasowniki i słowa kluczowe
Unikanie efektów ubocznych
Argumenty wyjściowe
Rozdzielanie poleceń i zapytań
Stosowanie wyjątków zamiast zwracania kodów błędów
Wyodrębnienie bloków try-catch
Obsługa błędów jest jedną operacją
Przyciąganie zależności w Error.java
Nie powtarzaj się[13]
Programowanie strukturalne
Jak pisać takie funkcje?
Zakończenie
SetupTeardownIncluder
Bibliografia
- Rozdział 4. Komentarze
Komentarze nie są szminką dla złego kodu
Czytelny kod nie wymaga komentarzy
Dobre komentarze
Komentarze prawne
Komentarze informacyjne
Wyjaśnianie zamierzeń
Wyjaśnianie
Ostrzeżenia o konsekwencjach
Komentarze TODO
Wzmocnienie
Komentarze Javadoc w publicznym API
Złe komentarze
Bełkot
Powtarzające się komentarze
Mylące komentarze
Komentarze wymagane
Komentarze dziennika
Komentarze wprowadzające szum informacyjny
Przerażający szum
Nie używaj komentarzy, jeżeli można użyć funkcji lub zmiennej
Znaczniki pozycji
Komentarze w klamrach zamykających
Atrybuty i dopiski
Zakomentowany kod
Komentarze HTML
Informacje nielokalne
Nadmiar informacji
Nieoczywiste połączenia
Nagłówki funkcji
Komentarze Javadoc w niepublicznym kodzie
Przykład
Bibliografia
- Rozdział 5. Formatowanie
Przeznaczenie formatowania
Formatowanie pionowe
Metafora gazety
Pionowe odstępy pomiędzy segmentami kodu
Gęstość pionowa
Odległość pionowa
Uporządkowanie pionowe
Formatowanie poziome
Poziome odstępy i gęstość
Rozmieszczenie poziome
Wcięcia
Puste zakresy
Zasady zespołowe
Zasady formatowania wujka Boba
- Rozdział 6. Obiekty i struktury danych
Abstrakcja danych
Antysymetria danych i obiektów
Prawo Demeter
Wraki pociągów
Hybrydy
Ukrywanie struktury
Obiekty transferu danych
Active Record
Zakończenie
Bibliografia
- Rozdział 7. Obsługa błędów
Użycie wyjątków zamiast kodów powrotu
Rozpoczynanie od pisania instrukcji try-catch-finally
Użycie niekontrolowanych wyjątków
Dostarczanie kontekstu za pomocą wyjątków
Definiowanie klas wyjątków w zależności od potrzeb wywołującego
Definiowanie normalnego przepływu
Nie zwracamy null
Nie przekazujemy null
Zakończenie
Bibliografia
- Rozdział 8. Granice
Zastosowanie kodu innych firm
Przeglądanie i zapoznawanie się z granicami
Korzystanie z pakietu log4j
Zalety testów uczących
Korzystanie z nieistniejącego kodu
Czyste granice
Bibliografia
- Rozdział 9. Testy jednostkowe
Trzy prawa TDD
Zachowanie czystości testów
Testy zwiększają możliwości
Czyste testy
Języki testowania specyficzne dla domeny
Podwójny standard
Jedna asercja na test
Jedna koncepcja na test
F.I.R.S.T.[8]
Zakończenie
Bibliografia
- Rozdział 10. Klasy
Organizacja klas
Hermetyzacja
Klasy powinny być małe!
Zasada pojedynczej odpowiedzialności
Spójność
Utrzymywanie spójności powoduje powstanie wielu małych klas
Organizowanie zmian
Izolowanie modułów kodu przed zmianami
Bibliografia
- Rozdział 11. Systemy
Jak budowałbyś miasto?
Oddzielenie konstruowania systemu od jego używania
Wydzielenie modułu main
Fabryki
Wstrzykiwanie zależności
Skalowanie w górę
Separowanie (rozcięcie) problemów
Pośredniki Java
Czyste biblioteki Java AOP
Aspekty w AspectJ
Testowanie architektury systemu
Optymalizacja podejmowania decyzji
Korzystaj ze standardów, gdy wnoszą realną wartość
Systemy wymagają języków dziedzinowych
Zakończenie
Bibliografia
- Rozdział 12. Powstawanie projektu
Uzyskiwanie czystości projektu przez jego rozwijanie
Zasada numer 1 prostego projektu system przechodzi wszystkie testy
Zasady numer 2 4 prostego projektu przebudowa
Brak powtórzeń
Wyrazistość kodu
Minimalne klasy i metody
Zakończenie
Bibliografia
- Rozdział 13. Współbieżność
W jakim celu stosować współbieżność?
Mity i nieporozumienia
Wyzwania
Zasady obrony współbieżności
Zasada pojedynczej odpowiedzialności
Wniosek ograniczenie zakresu danych
Wniosek korzystanie z kopii danych
Wniosek wątki powinny być na tyle niezależne, na ile to tylko możliwe
Poznaj używaną bibliotekę
Kolekcje bezpieczne dla wątków
Poznaj modele wykonania
Producent-konsument[9]
Czytelnik-pisarz[10]
Ucztujący filozofowie[11]
Uwaga na zależności pomiędzy synchronizowanymi metodami
Tworzenie małych sekcji synchronizowanych
Pisanie prawidłowego kodu wyłączającego jest trudne
Testowanie kodu wątków
Traktujemy przypadkowe awarie jako potencjalne problemy z wielowątkowością
Na początku uruchamiamy kod niekorzystający z wątków
Nasz kod wątków powinien dać się włączać
Nasz kod wątków powinien dać się dostrajać
Uruchamiamy więcej wątków, niż mamy do dyspozycji procesorów
Uruchamiamy testy na różnych platformach
Uzbrajamy nasz kod w elementy próbujące wywołać awarie i wymuszające awarie
Instrumentacja ręczna
Instrumentacja automatyczna
Zakończenie
Bibliografia
- Rozdział 14. Udane oczyszczanie kodu
Implementacja klasy Args
Jak to napisałem?
Args zgrubny szkic
Zatrzymałem się
O przyrostowości
Argumenty typu String
Zakończenie
- Rozdział 15. Struktura biblioteki JUnit
Biblioteka JUnit
Zakończenie
- Rozdział 16. Przebudowa klasy SerialDate
Na początek uruchamiamy
Teraz poprawiamy
Zakończenie
Bibliografia
- Rozdział 17. Zapachy kodu i heurystyki
Komentarze
C1. Niewłaściwe informacje
C2. Przestarzałe komentarze
C3. Nadmiarowe komentarze
C4. Źle napisane komentarze
C5. Zakomentowany kod
Środowisko
E1. Budowanie wymaga więcej niż jednego kroku
E2. Testy wymagają więcej niż jednego kroku
Funkcje
F1. Nadmiar argumentów
F2. Argumenty wyjściowe
F3. Argumenty znacznikowe
F4. Martwe funkcje
Ogólne
G1. Wiele języków w jednym pliku źródłowym
G2. Oczywiste działanie jest nieimplementowane
G3. Niewłaściwe działanie w warunkach granicznych
G4. Zdjęte zabezpieczenia
G5. Powtórzenia
G6. Kod na nieodpowiednim poziomie abstrakcji
G7. Klasy bazowe zależne od swoich klas pochodnych
G8. Za dużo informacji
G9. Martwy kod
G10. Separacja pionowa
G11. Niespójność
G12. Zaciemnianie
G13. Sztuczne sprzężenia
G14. Zazdrość o funkcje
G15. Argumenty wybierające
G16. Zaciemnianie intencji
G17. Źle rozmieszczona odpowiedzialność
G18. Niewłaściwe metody statyczne
G19. Użycie opisowych zmiennych
G20. Nazwy funkcji powinny informować o tym, co realizują
G21. Zrozumienie algorytmu
G22. Zamiana zależności logicznych na fizyczne
G23. Zastosowanie polimorfizmu zamiast instrukcji if-else lub switch-case
G24. Wykorzystanie standardowych konwencji
G25. Zamiana magicznych liczb na stałe nazwane
G26. Precyzja
G27. Struktura przed konwencją
G28. Hermetyzacja warunków
G29. Unikanie warunków negatywnych
G30. Funkcje powinny wykonywać jedną operację
G31. Ukryte sprzężenia czasowe
G32. Unikanie dowolnych działań
G33. Hermetyzacja warunków granicznych
G34. Funkcje powinny zagłębiać się na jeden poziom abstrakcji
G35. Przechowywanie danych konfigurowalnych na wysokim poziomie
G36. Unikanie nawigacji przechodnich
Java
J1. Unikanie długich list importu przez użycie znaków wieloznacznych
J2. Nie dziedziczymy stałych
J3. Stałe kontra typy wyliczeniowe
Nazwy
N1. Wybór opisowych nazw
N2. Wybór nazw na odpowiednich poziomach abstrakcji
N3. Korzystanie ze standardowej nomenklatury tam, gdzie jest to możliwe
N4. Jednoznaczne nazwy
N5. Użycie długich nazw dla długich zakresów
N6. Unikanie kodowania
N7. Nazwy powinny opisywać efekty uboczne
Testy
T1. Niewystarczające testy
T2. Użycie narzędzi kontroli pokrycia
T3. Nie pomijaj prostych testów
T4. Ignorowany test jest wskazaniem niejednoznaczności
T5. Warunki graniczne
T6. Dokładne testowanie pobliskich błędów
T7. Wzorce błędów wiele ujawniają
T8. Wzorce pokrycia testami wiele ujawniają
T9. Testy powinny być szybkie
Zakończenie
Bibliografia
- Dodatek A: Współbieżność II
Przykład klient-serwer
Serwer
Dodajemy wątki
Uwagi na temat serwera
Zakończenie
Możliwe ścieżki wykonania
Liczba ścieżek
Wyliczanie możliwych uporządkowań
Kopiemy głębiej
Zakończenie
Poznaj używaną bibliotekę
Biblioteka Executor
Rozwiązania nieblokujące
Bezpieczne klasy nieobsługujące wątków
Zależności między metodami mogą uszkodzić kod współbieżny
Tolerowanie awarii
Blokowanie na kliencie
Blokowanie na serwerze
Zwiększanie przepustowości
Obliczenie przepustowości jednowątkowej
Obliczenie przepustowości wielowątkowej
Zakleszczenie
Wzajemne wykluczanie
Blokowanie i oczekiwanie
Brak wywłaszczania
Cykliczne oczekiwanie
Zapobieganie wzajemnemu wykluczaniu
Zapobieganie blokowaniu i oczekiwaniu
Umożliwienie wywłaszczania
Zapobieganie oczekiwaniu cyklicznemu
Testowanie kodu wielowątkowego
Narzędzia wspierające testowanie kodu korzystającego z wątków
Zakończenie
Samouczek. Pełny kod przykładów
Klient-serwer bez wątków
Klient-serwer z użyciem wątków
- Dodatek B: org.jfree.date.SerialDate
- Epilog
Гарантии
Гарантии
Мы работаем по договору оферты и предоставляем все необходимые документы.
Лёгкий возврат
Если товар не подошёл или не соответсвует описанию, мы поможем вернуть его.
Безопасная оплата
Банковской картой, электронными деньгами, наличными в офисе или на расчётный счёт.