INNE EBOOKI AUTORA
Autor:
Wydawca:
Format:
epub, mobi
Rozdziały 5-6 z publikacji pt. "JAVA. Uniwersalne techniki programowania", redakcja naukowa: Krzysztof Barteczko.
Rozdział 5. Typy i metody sparametryzowane (generics)
Rozdział 6. Elementy programowania funkcyjnego w Javie 8. Przegląd pragmatyczny.
Książka przedstawia sposoby i techniki programowania użyteczne we wszelkich zastosowaniach języka Java. W publikacji akcentowany jest kontekst praktyczny: jak i do czego poszczególnych narzędzi językowych używać. Specjalna uwaga zwracana jest na nowe elementy języka, dostępne w wersjach 8 i 9. Rozbudowane rozdziały o kolekcjach, wejściu-wyjściu, programowaniu współbieżnym i dynamicznym stanowią swoiste kompendia, które dają nie tylko orientację co do zestawu dostępnych środków programowania, ale również omawiają ważne szczegóły i niuanse ich zastosowań. Publikacja adresowana jest do czytelnika zorientowanego w podstawach programowania w języku Java, apragnącego rozwijać swoje umiejętności.
Rok wydania | 2015 |
---|---|
Kategoria | Inne |
Wydawca | Wydawnictwo Naukowe PWN |
ISBN-13 | 978-83-01-18913-6 |
Język publikacji | polski |
Informacja o sprzedawcy | ePWN sp. z o.o. |
INNE EBOOKI AUTORA
POLECAMY
Ciekawe propozycje
Програмування мовою Java
do koszyka
JAVA. Programowanie obiektowe w praktyce
do koszyka
Java, to takie proste
do koszyka
JAVA. Uniwersalne techniki programowania
do koszyka
Spis treści
Wstęp | 9 |
1. Klasy | 13 |
1.1. Abstrakcja i hermetyzacja | 15 |
1.2. Enumeracje | 17 |
1.3. Definiowanie klas | 22 |
1.4. Wykorzystanie składowych statycznych | 25 |
1.5. Przeciążanie metod i konstruktorów | 26 |
1.6. Klasy i obiekty niezmienne | 27 |
1.7. Inicjowanie | 28 |
1.8. Singletony | 35 |
1.9. Klasy opakowujące typy proste | 36 |
2. Ponowne wykorzystanie klas | 41 |
2.1. Dziedziczenie | 43 |
2.2. Konwersje referencyjne | 48 |
2.3. Stwierdzanie typu | 50 |
2.4. Dziedziczenie w Javie | 52 |
2.5. Przedefiniowanie metod | 52 |
2.6. Kowariancja typów wyników | 56 |
2.7. Przedefiniowanie metod w wyliczeniach | 57 |
2.8. Przedefiniowanie a wyjątki | 58 |
2.9. Przedefiniowanie a przeciążanie, przesłanianie i pokrywanie | 59 |
2.10. Adnotacja @override | 60 |
2.11. Metody wirtualne i polimorfizm | 62 |
2.12. Kompozycja | 67 |
2.13. Kompozycja a dziedziczenie | 68 |
2.14. Reguły ponownego wykorzystania klas | 71 |
3. Wyjątki | 73 |
3.1. Obsługa wyjątków | 75 |
3.2. Zgłaszanie wyjątków | 83 |
3.3. Ponowne zgłaszanie wyjątków | 85 |
3.4. Niskopoziomowe przyczyny i łańcuchowanie wyjątków | 90 |
3.5. Wykorzystanie informacji o śladzie stosu | 91 |
4. Interfejsy i klasy wewnętrzne | 93 |
4.1. Metody i klasy abstrakcyjne | 95 |
4.2. Pojęcie interfejsu | 97 |
4.3. Problem wielodziedziczenia | 97 |
4.4. Definiowanie i implementowanie interfejsów | 99 |
4.5. Interfejsy jako typy danych | 102 |
4.6. Implementacja metod w interfejsach | 106 |
4.7. Mixiny | 107 |
4.8. Właściwości metod domyślnych | 108 |
4.9. Prywatne metody w interfejsach | 111 |
4.10. Pojęcie klasy wewnętrznej | 113 |
4.11. Przykładowe zastosowanie klasy wewnętrznej | 114 |
4.12. Anonimowe klasy wewnętrzne | 117 |
4.13. Lokalne klasy wewnętrzne | 119 |
5. Typy i metody sparametryzowane (generics) | 123 |
5.1. Definiowanie typów sparametryzowanych. Typy surowe i czyszczenie typów | 125 |
5.2. Ograniczenia parametrów typu | 128 |
5.3. Restrykcje | 129 |
5.4. Metody sparametryzowane | 131 |
5.5. Uniwersalne argumenty typu | 131 |
6. Elementy programowania funkcyjnego w Javie 8. Przegląd pragmatyczny | 137 |
6.1. O programowaniu funkcyjnym | 139 |
6.2. Interfejsy na pomoc | 140 |
6.3. Lambda-wyrażenia: pierwsze spotkanie | 141 |
6.4. O gotowych interfejsach funkcyjnych | 144 |
6.5. O przetwarzaniu strumieniowym | 145 |
7. Lambda-wyrażenia | 149 |
7.1. Interfejsy funkcyjne i lambda-wyrażenia | 151 |
7.2. Składnia i cechy lambda-wyrażeń | 152 |
7.3. Referencje do metod i konstruktorów | 158 |
7.4. Gotowe interfejsy funkcyjne | 161 |
7.5. Interfejsy z pakietu java.util.function a wyjątki kontrolowane | 169 |
7.6. Lambda-wyrażenia i obiekty typu Optional | 172 |
8. Proste narzędzia | 177 |
8.1. Analiza składniowa tekstów i wyrażenia regularne | 179 |
8.2. Uproszczenia stosowania wyrażeń regularnych w klasach String i Scanner | 191 |
8.3. Działania na liczbach | 199 |
8.4. Daty i czas | 204 |
8.4.1. Tradycyjna klasa Calendar i operacje na datach | 204 |
8.4.2. Daty i czas w Javie 8 – elementy nowego API | 210 |
8.5. Formatowanie liczb i dat | 217 |
8.6. Metody tablicowe | 222 |
9. Kolekcje | 225 |
9.1. Architektura kolekcji (JCF). Interfejsy i implementacje | 227 |
9.2. Programowanie w kategoriach interfejsów | 231 |
9.3. Ogólne operacje na kolekcjach | 233 |
9.4. Operacje opcjonalne oraz wyjątki zgłaszane przez metody kolekcyjne | 234 |
9.5. Przekształcanie kolekcji. Kolekcje z tablic | 235 |
9.6. Przykłady ogólnych operacji na kolekcjach | 237 |
9.7. Iterowanie po kolekcjach | 243 |
9.7.1. Tradycyjny iterator i rozszerzone for | 243 |
9.7.2. Iteracje wewnętrzne | 247 |
9.7.3. Spliteratory | 249 |
9.7.4. Konkurencyjne modyfikacje | 256 |
9.8. Listy | 258 |
9.8.1. Podstawowe implementacje i operacje | 258 |
9.8.2. Szczególne implementacje list: niuanse metody Arrays.asList(...) | 264 |
9.8.3. Iteratory listowe | 267 |
9.8.4. Przykłady operacji na listach | 269 |
9.9. Kolejki | 273 |
9.10. Zbiory typu HashSet, metody hashCode() i equals() | 276 |
9.11. Porównywanie i porządkowanie elementów kolekcji | 283 |
9.12. Zbiory uporządkowane i nawigowalne | 291 |
9.13. Mapy | 293 |
9.13.1. Wprowadzenie | 293 |
9.13.2. Implementacje i interfejsy. Ogólne operacje na mapach | 296 |
9.13.3. Iterowanie po mapach | 301 |
9.13.4. Użycie domyślnych metod interfejsu Map | 304 |
9.13.5. Sortowanie map | 307 |
9.14. Algorytmy, widoki, fabrykatory kolekcji | 313 |
9.15. Własne implementacje kolekcji | 316 |
10. Przetwarzanie strumieniowe | 317 |
10.1. Pojęcie strumienia. Rodzaje i cechy operacji strumieniowych | 319 |
10.2. Uzyskiwanie strumieni | 321 |
10.3. Przegląd operacji na strumieniach | 322 |
10.4. Filtrowanie i leniwość strumieni | 325 |
10.5. Metoda forEach dla strumieni | 326 |
10.6. Sortowanie strumieni | 327 |
10.7. Redukcja | 328 |
10.8. Proste kolektory | 329 |
10.9. Kolektory budujące mapy | 330 |
10.10. Generatory | 332 |
10.11. Strumienie równoległe | 334 |
10.12. Przykłady innych użytecznych metod | 336 |
11. Wejście-wyjście | 339 |
11.1. Programowanie wejścia-wyjścia: obraz ogólny | 341 |
11.2. Abstrakcyjne strumienie wejścia-wyjścia. Operacje elementarne | 342 |
11.3. Strumieniowe klasy przedmiotowe | 346 |
11.4. Instrukcja try-with-resources. Automatyczne zarządzanie zasobami a obsługa tłumionych wyjątków | 349 |
11.5. Strumieniowe klasy przetwarzające – przegląd | 356 |
11.6. Buforowanie | 359 |
11.7. Binarne strumienie wejścia-wyjścia | 360 |
11.8. Kodowanie-dekodowanie przy użyciu strumieni wejścia-wyjścia | 362 |
11.9. Serializacja obiektów | 364 |
11.10. Potoki | 369 |
11.11. Analiza składniowa strumieni – StreamTokenizer | 371 |
11.12. Obiekty plikowe i klasa File | 373 |
11.13. Wygodne metody klasy java.nio.fi le.Files | 374 |
11.14. Skaner | 378 |
11.15. Przeglądanie katalogów | 381 |
11.16. Archiwa | 390 |
11.17. Pliki o dostępie swobodnym | 397 |
11.18. Nowe wejście-wyjście (NIO): przegląd | 398 |
11.19. NIO: bufory | 401 |
11.20. NIO: kanały i bufory. Kanały plikowe | 406 |
11.21. Widoki buforów bajtowych | 410 |
11.22. NIO: bufory – uporządkowanie bajtów (endianess) | 414 |
11.23. NIO: bufory znakowe. Kodowanie i dekodowanie | 416 |
11.24. NIO: operacje kanałowe na wielu buforach (scattering i gathering) | 418 |
11.25. NIO: mapowanie plików | 420 |
11.26. NIO: bezpośrednie transfery kanałowe | 424 |
12. Programowanie współbieżne i równoległe | 425 |
12.1. Procesy i wątki | 427 |
12.2. Uruchamianie równoległych działań. Tworzenie wątków | 428 |
12.3. Zadania i wykonawcy | 432 |
12.4. Zamykanie wykonawców. Oczekiwanie na zakończenie zadań i serwis kompletacji (CompletionService) | 439 |
12.5. Zadania powtarzalne, opóźnione i okresowe | 444 |
12.6. Wykonawcy a pule wątków | 449 |
12.7. ForkJoinPool i zadania rekursywne | 452 |
12.8. Kompletery typu CountedCompleter | 463 |
12.9. CountedCompleter jako kontynuacja | 469 |
12.10. Kiedy i jak używać zadań typu ForkJoinTask? Praktyczny przykład użycia kompleterów | 473 |
12.11. Zadania kompletowalne (CompletableFuture) | 478 |
12.12. Przerywanie zadań z zewnątrz i kończenie pracy wątków | 491 |
12.13. Synchronizacja | 498 |
12.14. Synchronizacja za pomocą jawnego ryglowania | 507 |
12.15. Rygle do odczytu i zapisu: ReentrantReadWriteLock i StampedLock | 510 |
12.16. Synchronizatory wyższego poziomu | 514 |
12.17. Unikanie synchronizacji: struktura kodu, volatile, atomiki i konkurencyjne kolekcje | 519 |
12.18. Koordynacja pracy wątków – mechanizm wait-notify | 526 |
12.19. Koordynacja: warunki | 532 |
13. Dynamiczna Java | 535 |
13.1. Mechanizm refleksji | 537 |
13.2. Uchwyty metod | 543 |
13.3. Znaczenie refleksji – praktyczne przykłady | 551 |
13.4. Refleksja a generics | 558 |
13.5. Dynamiczne klasy proxy | 562 |
13.6. JavaBeans | 568 |
13.6.1. Koncepcja JavaBeans | 568 |
13.6.2. Nasłuch i wetowanie zmian właściwości za pomocą obsługi zdarzeń | 569 |
13.6.3. Introspekcja | 575 |
13.7. Adnotacje | 576 |
13.7.1. Istota adnotacji i sposoby ich definiowana | 576 |
13.7.2. Przetwarzanie adnotacji w fazie wykonania | 580 |
13.7.3. Przetwarzanie adnotacji w fazie kompilacji. Transformowanie kodu bajtowego | 582 |
13.8. Skrypty w Javie | 589 |
14. Lokalizacja i internacjonalizacja aplikacji | 595 |
14.1. Lokalizacje | 597 |
14.2. Jeszcze trochę o formatorach liczbowych | 602 |
14.3. Waluty | 603 |
14.4. Strefy czasowe | 604 |
14.5. Kalendarze i zlokalizowane daty | 606 |
14.6. Porównywanie i sortowanie napisów | 607 |
14.7. Internacjonalizacja aplikacji i dodatkowe zasoby (resource bundle) | 608 |
Literatura | 614 |