158710
Book
In basket
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 Znaczące nazwy 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 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ę Programowanie strukturalne Jak pisać takie funkcje? SetupTeardownIncluder 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 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 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 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 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 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] 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 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 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 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 Czytelnik-pisarz Ucztujący filozofowie 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 Udane oczyszczanie kodu Implementacja klasy Args Jak to napisałem? Args zgrubny szkic Zatrzymałem się O przyrostowości Argumenty typu String Struktura biblioteki JUnit Biblioteka JUnit Przebudowa klasy SerialDate Na początek uruchamiamy Teraz poprawiamy Zapachy kodu i heurystyki Komentarze Niewłaściwe informacje Przestarzałe komentarze Nadmiarowe komentarze Źle napisane komentarze Zakomentowany kod Środowisko Budowanie wymaga więcej niż jednego kroku Testy wymagają więcej niż jednego kroku Funkcje Nadmiar argumentów Argumenty wyjściowe Argumenty znacznikowe Martwe funkcje Ogólne Wiele języków w jednym pliku źródłowym Oczywiste działanie jest nieimplementowane Niewłaściwe działanie w warunkach granicznych Zdjęte zabezpieczenia Powtórzenia Kod na nieodpowiednim poziomie abstrakcji Klasy bazowe zależne od swoich klas pochodnych Za dużo informacji Martwy kod Separacja pionowa Niespójność Zaciemnianie Sztuczne sprzężenia Zazdrość o funkcje Argumenty wybierające Zaciemnianie intencji Źle rozmieszczona odpowiedzialność Niewłaściwe metody statyczne Użycie opisowych zmiennych Nazwy funkcji powinny informować o tym, co realizują Zrozumienie algorytmu Zamiana zależności logicznych na fizyczne Zastosowanie polimorfizmu zamiast instrukcji if-else lub switch-case Wykorzystanie standardowych konwencji Zamiana magicznych liczb na stałe nazwane Precyzja Struktura przed konwencją Hermetyzacja warunków Unikanie warunków negatywnych Funkcje powinny wykonywać jedną operację Ukryte sprzężenia czasowe Unikanie dowolnych działań Hermetyzacja warunków granicznych Funkcje powinny zagłębiać się na jeden poziom abstrakcji Przechowywanie danych konfigurowalnych na wysokim poziomie Unikanie nawigacji przechodnich Java Unikanie długich list importu przez użycie znaków wieloznacznych Nie dziedziczymy stałych Stałe kontra typy wyliczeniowe Nazwy Wybór opisowych nazw Wybór nazw na odpowiednich poziomach abstrakcji Korzystanie ze standardowej nomenklatury tam, gdzie jest to możliwe Jednoznaczne nazwy Użycie długich nazw dla długich zakresów Unikanie kodowania Nazwy powinny opisywać efekty uboczne Testy Niewystarczające testy Użycie narzędzi kontroli pokrycia Nie pomijaj prostych testów Ignorowany test jest wskazaniem niejednoznaczności Warunki graniczne Dokładne testowanie pobliskich błędów Wzorce błędów wiele ujawniają Wzorce pokrycia testami wiele ujawniają Testy powinny być szybkie Współbieżność II Przykład klient-serwer Serwer Dodajemy wątki Uwagi na temat serwera Możliwe ścieżki wykonania Liczba ścieżek Wyliczanie możliwych uporządkowań Kopiemy głębiej 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 Samouczek. Pełny kod przykładów Klient-serwer bez wątków Klient-serwer z użyciem wątków
Sygnatura czytelni BWEAiI: XII E 85
Availability:
Wypożyczalnia
There are copies available to loan: sygn. 139744, 139388, 145678 N, 139743, 145677 N (5 egz.)
Biblioteka WEAiI
Copies are only available in the library: sygn. 139742 N (1 egz.)
Notes:
Tytuł oryginału: Clean code : a handbook of agile software craftsmanship
General note
Na okładce i grzbiecie podtytuł: podręcznik dobrego programisty.
Pliki z przykładami omawianymi w książce można znaleźć pod adresem internetowym wydawnictwa podanym na stronie redakcyjnej.
Bibliography, etc. note
Bibliografia, netografia przy większości rozdziałów. Indeksy.
The item has been added to the basket. If you don't know what the basket is for, click here for details.
Do not show it again

Deklaracja dostępności