Czysty kod. Podręcznik dobrego programisty - Robert C. Martin
Botland
RSS
49.90
40.57 + VAT
- Kod:
- 5008
- GTIN-13:
- 9788383223445
- Dodany do bazy:
- Ostatnio widziany:
- Zmiana ceny:
- +5% (28.06.2025)
- Poprzednia cena:
- 47.41
Uwaga! Sprzedaż produktu została zakończona. Sprawdź inne w tej kategorii.Opis produktu: Czysty kod. Podręcznik dobrego programisty - Robert C. Martin
Chcesz dowiedzieć się czym charakteryzuje się "czysty" kod i jak napisać dobry program bez błędów? W tej książce przeczytasz o technikach solidnego i skutecznego programowania. Zapoznasz się z zasadami i wzorcami pisania składnego kodu. Nauczysz się jak tworzyć nazwy funkcji i obiektów oraz jak pisać testy jednostkowe. W lekturze opisanych jest kilka przykładów porządkowania kodu, dzięki którym nauczysz się jak sprawić by twój program spełniał przyjęte standardy.
W książce zostały zawarte takie zagadnienia jak:
* 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
Czysty kod. Podręcznik dobrego programisty - Robert C. Martin.Przykładowe projekty wykorzystane w książce dostępne do pobrania. Fragment ksiązki do przeczytania on-line.
Spis treści Słowo wstępne (13) Wstęp (19) 1. Czysty kod (23)
* Niech stanie się kod... (24)
* W poszukiwaniu doskonałego kodu... (24)
* Całkowity koszt bałaganu (25)
* Rozpoczęcie wielkiej zmiany projektu (26)
* Postawa (27)
* Największa zagadka (28)
* Sztuka czystego kodu? (28)
* Co to jest czysty kod? (28)
* Szkoły myślenia (34)
* Jesteśmy autorami (35)
* Zasada skautów (36)
* Poprzednik i zasady (36)
* Zakończenie (36)
* Bibliografia (37)
2. Znaczące nazwy (39)
* Wstęp (39)
* Używaj nazw przedstawiających intencje (40)
* Unikanie dezinformacji (41)
* Tworzenie wyraźnych różnic (42)
* Tworzenie nazw, które można wymówić (43)
* Korzystanie z nazw łatwych do wyszukania (44)
* Unikanie kodowania (45)
* Notacja węgierska (45)
* Przedrostki składników (46)
* Interfejsy i implementacje (46)
* Unikanie odwzorowania mentalnego (47)
* Nazwy klas (47)
* Nazwy metod (47)
* Nie bądź dowcipny (48)
* Wybieraj jedno słowo na pojęcie (48)
* Nie twórz kalamburów! (49)
* Korzystanie z nazw dziedziny rozwiązania (49)
* Korzystanie z nazw dziedziny problemu (49)
* Dodanie znaczącego kontekstu (50)
* Nie należy dodawać nadmiarowego kontekstu (51)
* Słowo końcowe (52)
3. Funkcje (53)
* Małe funkcje! (56)
* Bloki i wcięcia (57)
* Wykonuj jedną czynność (57)
* Sekcje wewnątrz funkcji (58)
* Jeden poziom abstrakcji w funkcji (58)
* Czytanie kodu od góry do dołu - zasada zstępująca (58)
* Instrukcje switch (59)
* Korzystanie z nazw opisowych (61)
* Argumenty funkcji (62)
* Często stosowane funkcje jednoargumentowe (62)
* Argumenty znacznikowe (63)
* Funkcje dwuargumentowe (63)
* Funkcje trzyargumentowe (64)
* Argumenty obiektowe (64)
* Listy argumentów (65)
* Czasowniki i słowa kluczowe (65)
* Unikanie efektów ubocznych (65)
* Argumenty wyjściowe (66)
* Rozdzielanie poleceń i zapytań (67)
* Stosowanie wyjątków zamiast zwracania kodów błędów (67)
* Wyodrębnienie bloków try-catch (68)
* Obsługa błędów jest jedną operacją (69)
* Przyciąganie zależności w Error.java (69)
* Nie powtarzaj się (69)
* Programowanie strukturalne (70)
* Jak pisać takie funkcje? (70)
* Zakończenie (71)
* SetupTeardownIncluder (71)
* Bibliografia (73)
4. Komentarze (75)
* Komentarze nie są szminką dla złego kodu (77)
* Czytelny kod nie wymaga komentarzy (77)
* Dobre komentarze (77)
* Komentarze prawne (77)
* Komentarze informacyjne (78)
* Wyjaśnianie zamierzeń (78)
* Wyjaśnianie (79)
* Ostrzeżenia o konsekwencjach (80)
* Komentarze TODO (80)
* Wzmocnienie (81)
* Komentarze Javadoc w publicznym API (81)
* Złe komentarze (81)
* Bełkot (81)
* Powtarzające się komentarze (82)
* Mylące komentarze (84)
* Komentarze wymagane (85)
* Komentarze dziennika (85)
* Komentarze wprowadzające szum informacyjny (86)
* Przerażający szum (87)
* Nie używaj komentarzy, jeżeli można użyć funkcji lub zmiennej (88)
* Znaczniki pozycji (88)
* Komentarze w klamrach zamykających (88)
* Atrybuty i dopiski (89)
* Zakomentowany kod (89)
* Komentarze HTML (90)
* Informacje nielokalne (91)
* Nadmiar informacji (91)
* Nieoczywiste połączenia (91)
* Nagłówki funkcji (92)
* Komentarze Javadoc w niepublicznym kodzie (92)
* Przykład (92)
* Bibliografia (95)
5. Formatowanie (97)
* Przeznaczenie formatowania (98)
* Formatowanie pionowe (98)
* Metafora gazety (99)
* Pionowe odstępy pomiędzy segmentami kodu (99)
* Gęstość pionowa (101)
* Odległość pionowa (101)
* Uporządkowanie pionowe (105)
* Formatowanie poziome (106)
* Poziome odstępy i gęstość (106)
* Rozmieszczenie poziome (107)
* Wcięcia (109)
* Puste zakresy (110)
* Zasady zespołowe (110)
* Zasady formatowania wujka Boba (111)
6. Obiekty i struktury danych (113)
* Abstrakcja danych (113)
* Antysymetria danych i obiektów (115)
* Prawo Demeter (117)
* Wraki pociągów (118)
* Hybrydy (118)
* Ukrywanie struktury (119)
* Obiekty transferu danych (119)
* Active Record (120)
* Zakończenie (121)
* Bibliografia (121)
7. Obsługa błędów (123)
* Użycie wyjątków zamiast kodów powrotu (124)
* Rozpoczynanie od pisania instrukcji try-catch-finally (125)
* Użycie niekontrolowanych wyjątków (126)
* Dostarczanie kontekstu za pomocą wyjątków (127)
* Definiowanie klas wyjątków w zależności od potrzeb wywołującego (127)
* Definiowanie normalnego przepływu (129)
* Nie zwracamy null (130)
* Nie przekazujemy null (131)
* Zakończenie (132)
* Bibliografia (132)
8. Granice (133)
* Zastosowanie kodu innych firm (134)
* Przeglądanie i zapoznawanie się z granicami (136)
* Korzystanie z pakietu log4j (136)
* Zalety testów uczących (138)
* Korzystanie z nieistniejącego kodu (138)
* Czyste granice (139)
* Bibliografia (140)
9. Testy jednostkowe (141)
* Trzy prawa TDD (142)
* Zachowanie czystości testów (143)
* Testy zwiększają możliwości (144)
* Czyste testy (144)
* Języki testowania specyficzne dla domeny (147)
* Podwójny standard (147)
* Jedna asercja na test (149)
* Jedna koncepcja na test (150)
* F.I.R.S.T. (151)
* Zakończenie (152)
* Bibliografia (152)
10. Klasy (153)
* Organizacja klas (153)
* Hermetyzacja (154)
* Klasy powinny być małe! (154)
* Zasada pojedynczej odpowiedzialności (156)
* Spójność (158)
* Utrzymywanie spójności powoduje powstanie wielu małych klas (158)
* Organizowanie zmian (164)
* Izolowanie modułów kodu przed zmianami (166)
* Bibliografia (167)
11. Systemy (169)
* Jak budowałbyś miasto? (170)
* Oddzielenie konstruowania systemu od jego używania (170)
* Wydzielenie modułu main (171)
* Fabryki (172)
* Wstrzykiwanie zależności (172)
* Skalowanie w górę (173)
* Separowanie (rozcięcie) problemów (176)
* Pośredniki Java (177)
* Czyste biblioteki Java AOP (178)
* Aspekty w AspectJ (181)
* Testowanie architektury systemu (182)
* Optymalizacja podejmowania decyzji (183)
* Korzystaj ze standardów, gdy wnoszą realną wartość (183)
* Systemy wymagają języków dziedzinowych (184)
* Zakończenie (184)
* Bibliografia (185)
12. Powstawanie projektu (187)
* Uzyskiwanie czystości projektu przez jego rozwijanie (187)
* Zasada numer 1 prostego projektu - system przechodzi wszystkie testy (188)
* Zasady numer 2 - 4 prostego projektu - przebudowa (188)
* Brak powtórzeń (189)
* Wyrazistość kodu (191)
* Minimalne klasy i metody (192)
* Zakończenie (192)
* Bibliografia (192)
13. Współbieżność (193)
* W jakim celu stosować współbieżność? (194)
* Mity i nieporozumienia (195)
* Wyzwania (196)
* Zasady obrony współbieżności (196)
* Zasada pojedynczej odpowiedzialności (197)
* Wniosek - ograniczenie zakresu danych (197)
* Wniosek - korzystanie z kopii danych (197)
* Wniosek - wątki powinny być na tyle niezależne, na ile to tylko możliwe (198)
* Poznaj używaną bibliotekę (198)
* Kolekcje bezpieczne dla wątków (198)
* Poznaj modele wykonania (199)
* Producent-konsument (199)
* Czytelnik-pisarz (200)
* Ucztujący filozofowie (200)
* Uwaga na zależności pomiędzy synchronizowanymi metodami (201)
* Tworzenie małych sekcji synchronizowanych (201)
* Pisanie prawidłowego kodu wyłączającego jest trudne (202)
* Testowanie kodu wątków (202)
* Traktujemy przypadkowe awarie jako potencjalne problemy z wielowątkowością (203)
* Na początku uruchamiamy kod niekorzystający z wątków (203)
* Nasz kod wątków powinien dać się włączać (203)
* Nasz kod wątków powinien dać się dostrajać (204)
* Uruchamiamy więcej wątków, niż mamy do dyspozycji procesorów (204)
* Uruchamiamy testy na różnych platformach (204)
* Uzbrajamy nasz kod w elementy próbujące wywołać awarie i wymuszające awarie (205)
* Instrumentacja ręczna (205)
* Instrumentacja automatyczna (206)
* Zakończenie (207)
* Bibliografia (208)
14. Udane oczyszczanie kodu (209)
* Implementacja klasy Args (210)
* Args - zgrubny szkic (216)
* Argumenty typu String (228)
* Zakończenie (261)
15. Struktura biblioteki JUnit (263)
* Biblioteka JUnit (264)
* Zakończenie (276)
16. Przebudowa klasy SerialDate (277)
* Na początek uruchamiamy (278)
* Teraz poprawiamy (280)
* Zakończenie (293)
* Bibliografia (294)
17. Zapachy kodu i heurystyki (295)
* Komentarze (296)
* C1. Niewłaściwe informacje (296)
* C2. Przestarzałe komentarze (296)
* C3. Nadmiarowe komentarze (296)
* C4. Źle napisane komentarze (297)
* C5. Zakomentowany kod (297)
* Środowisko (297)
* E1. Budowanie wymaga więcej niż jednego kroku (297)
* E2. Testy wymagają więcej niż jednego kroku (297)
* Funkcje (298)
* F1. Nadmiar argumentów (298)
* F2. Argumenty wyjściowe (298)
* F3. Argumenty znacznikowe (298)
* F4. Martwe funkcje (298)
* Ogólne (298)
* G1. Wiele języków w jednym pliku źródłowym (298)
* G2. Oczywiste działanie jest nieimplementowane (299)
* G3. Niewłaściwe działanie w warunkach granicznych (299)
* G4. Zdjęte zabezpieczenia (299)
* G5. Powtórzenia (300)
* G6. Kod na nieodpowiednim poziomie abstrakcji (300)
* G7. Klasy bazowe zależne od swoich klas pochodnych (301)
* G8. Za dużo informacji (302)
* G9. Martwy kod (302)
* G10. Separacja pionowa (303)
* G11. Niespójność (303)
* G12. Zaciemnianie (303)
* G13. Sztuczne sprzężenia (303)
* G14. Zazdrość o funkcje (304)
* G15. Argumenty wybierające (305)
* G16. Zaciemnianie intencji (305)
* G17. Źle rozmieszczona odpowiedzialność (306)
* G18. Niewłaściwe metody statyczne (306)
* G19. Użycie opisowych zmiennych (307)
* G20. Nazwy funkcji powinny informować o tym, co realizują (307)
* G21. Zrozumienie algorytmu (308)
* G22. Zamiana zależności logicznych na fizyczne (308)
* G23. Zastosowanie polimorfizmu zamiast instrukcji if-else lub switch-case (309)
* G24. Wykorzystanie standardowych konwencji (310)
* G25. Zamiana magicznych liczb na stałe nazwane (310)
* G26. Precyzja (311)
* G27. Struktura przed konwencją (312)
* G28. Hermetyzacja warunków (312)
* G29. Unikanie warunków negatywnych (312)
* G30. Funkcje powinny wykonywać jedną operację (312)
* G31. Ukryte sprzężenia czasowe (313)
* G32. Unikanie dowolnych działań (314)
* G33. Hermetyzacja warunków granicznych (314)
* G34. Funkcje powinny zagłębiać się na jeden poziom abstrakcji (315)
* G35. Przechowywanie danych konfigurowalnych na wysokim poziomie (316)
* G36. Unikanie nawigacji przechodnich (317)
* Java (317)
* J1. Unikanie długich list importu przez użycie znaków wieloznacznych (317)
* J2. Nie dziedziczymy stałych (318)
* J3. Stałe kontra typy wyliczeniowe (319)
* Nazwy (320)
* N1. Wybór opisowych nazw (320)
* N2. Wybór nazw na odpowiednich poziomach abstrakcji (321)
* N3. Korzystanie ze standardowej nomenklatury tam, gdzie jest to możliwe (322)
* N4. Jednoznaczne nazwy (322)
* N5. Użycie długich nazw dla długich zakresów (323)
* N6. Unikanie kodowania (323)
* N7. Nazwy powinny opisywać efekty uboczne (323)
* Testy (324)
* T1. Niewystarczające testy (324)
* T2. Użycie narzędzi kontroli pokrycia (324)
* T3. Nie pomijaj prostych testów (324)
* T4. Ignorowany test jest wskazaniem niejednoznaczności (324)
* T5. Warunki graniczne (324)
* T6. Dokładne testowanie pobliskich błędów (324)
* T7. Wzorce błędów wiele ujawniają (324)
* T8. Wzorce pokrycia testami wiele ujawniają (325)
* T9. Testy powinny być szybkie (325)
* Zakończenie (325)
* Bibliografia (325)
A: Współbieżność II (327)
* Przykład klient-serwer (327)
* Serwer (327)
* Dodajemy wątki (329)
* Uwagi na temat serwera (329)
* Zakończenie (331)
* Możliwe ścieżki wykonania (331)
* Liczba ścieżek (332)
* Kopiemy głębiej (333)
* Zakończenie (336)
* Poznaj używaną bibliotekę (336)
* Biblioteka Executor (336)
* Rozwiązania nieblokujące (337)
* Bezpieczne klasy nieobsługujące wątków (338)
* Zależności między metodami mogą uszkodzić kod współbieżny (339)
* Tolerowanie awarii (340)
* Blokowanie na kliencie (340)
* Blokowanie na serwerze (342)
* Zwiększanie przepustowości (343)
* Obliczenie przepustowości jednowątkowej (344)
* Obliczenie przepustowości wielowątkowej (344)
* Zakleszczenie (345)
* Wzajemne wykluczanie (346)
* Blokowanie i oczekiwanie (346)
* Brak wywłaszczania (346)
* Cykliczne oczekiwanie (346)
* Zapobieganie wzajemnemu wykluczaniu (347)
* Zapobieganie blokowaniu i oczekiwaniu (347)
* Umożliwienie wywłaszczania (348)
* Zapobieganie oczekiwaniu cyklicznemu (348)
* Testowanie kodu wielowątkowego (349)
* Narzędzia wspierające testowanie kodu korzystającego z wątków (351)
* Zakończenie (352)
* Samouczek. Pełny kod przykładów (352)
* Klient-serwer bez wątków (352)
* Klient-serwer z użyciem wątków (355)
B: org.jfree.date.SerialDate (357) C: Odwołania do heurystyk (411) Epilog (413) Skorowidz (415)
Elecena nie prowadzi sprzedaży elementów elektronicznych, ani w niej nie pośredniczy.
Produkt pochodzi z oferty sklepu Botland