Hilfe Warenkorb Konto Anmelden
 
 
   Schnellsuche   
     zur Expertensuche                      
Der Weg zum Java-Profi: Konzepte und Techniken für die professionelle Java-Entwicklung
  Großes Bild
 
Der Weg zum Java-Profi: Konzepte und Techniken für die professionelle Java-Entwicklung
von: Michael Inden
dpunkt, 2011
ISBN: 9783898648783
1016 Seiten, Download: 11048 KB
 
Format:  PDF
geeignet für: Apple iPad, Android Tablet PC's Online-Lesen PC, MAC, Laptop

Typ: B (paralleler Zugriff)

 

 
eBook anfordern
Inhaltsverzeichnis

  Übersicht 8  
  Inhaltsverzeichnis 10  
  1 Einleitung 20  
     1.1 Über dieses Buch 20  
        1.1.1 Motivation 20  
        1.1.2 Was leistet dieses Buch und was nicht? 21  
        1.1.3 Wie und was soll mithilfe des Buchs gelernt werden? 21  
        1.1.4 Wer sollte dieses Buch lesen? 23  
     1.2 Aufbau des Buchs 23  
        1.2.1 Gliederung des Buchs 24  
        1.2.2 Kapitelübersicht 25  
     1.3 Konventionen 30  
     1.4 Danksagungen 32  
  Teil I Java-Grundlagen, Analyse und Design 34  
     2 Professionelle Arbeitsumgebung 36  
        2.1 Vorteile von IDEs am Beispiel von Eclipse 36  
        2.2 Projektorganisation 37  
        2.3 Einsatz von Versionsverwaltungen 39  
           2.3.1 Arbeiten mit Versionsverwaltungen 42  
           2.3.2 Tagging und Branching 43  
           2.3.3 CVS und SVN im Vergleich 46  
        2.4 Einsatz eines Unit-Test-Frameworks 47  
           2.4.1 Das JUnit-Framework 48  
           2.4.2 Schreiben und Ausführen von Tests 50  
        2.5 Einsatz eines IDE-unabhängigen Build-Prozesses 53  
           2.5.1 Motivation für ein IDE-unabhängiges Build-System 53  
           2.5.2 Ant-Build 54  
        2.6 Weiterführende Literatur 63  
     3 Objektorientiertes Design 64  
        3.1 OO-Grundlagen 65  
           3.1.1 Grundbegriffe 65  
           3.1.2 Beispielentwurf: Ein Zähler 73  
           3.1.3 Diskussion der OO-Grundgedanken 80  
           3.1.4 Wissenswertes zum Objektzustand 84  
        3.2 Grundlegende OO-Techniken 93  
           3.2.1 Abstrakte Basisklassen 93  
           3.2.2 Schnittstellen (Interfaces) 95  
           3.2.3 Interfaces und abstrakte Basisklassen 97  
        3.3 Vom imperativen zum objektorientierten Entwurf 98  
        3.4 Fortgeschrittenere OO-Techniken 102  
           3.4.1 Read-only-Interface 103  
           3.4.2 Immutable-Klasse 109  
           3.4.3 Delegation statt Vererbung 114  
           3.4.4 Marker-Interface 118  
           3.4.5 Konstantensammlungen, Aufzählungen und das Enum-Muster 119  
           3.4.6 Value Object 124  
        3.5 Formen der Varianz 127  
           3.5.1 Grundlagen der Varianz 127  
           3.5.2 Kovariante Rückgabewerte 130  
        3.6 Generische Typen (Generics) 132  
           3.6.1 Einführung 132  
           3.6.2 Generics und Auswirkungen der Type Erasure 137  
           3.6.3 Containerklassen: Generics und Varianz 144  
        3.7 Weiterführende Literatur 156  
     4 Java-Grundlagen 158  
        4.1 Die Klasse Object 158  
           4.1.1 Die Methode toString() 160  
           4.1.2 Die Methode equals() 164  
        4.2 Primitive Datentypen und Wrapper-Klassen 175  
           4.2.1 Konvertierung von Werten 176  
           4.2.2 Ausgabe und Verarbeitung von Zahlen 182  
        4.3 Stringverarbeitung 185  
           4.3.1 Die Klasse String 185  
           4.3.2 Die Klassen StringBuffer und StringBuilder 189  
           4.3.3 Ausgaben mit format() und printf() 192  
           4.3.4 Die Klasse StringTokenizer 194  
           4.3.5 Die Methode split() und das 1x1 der regulären Ausdrücke 195  
        4.4 Datumsverarbeitung 200  
           4.4.1 Fallstricke der Datums-APIs 201  
           4.4.2 Das Date-API 202  
           4.4.3 Das Calendar-API 205  
        4.5 Interfaces und innere Klassen 207  
           4.5.1 Interfaces 207  
           4.5.2 Varianten innerer Klassen 208  
           4.5.3 Designbeispiel mit inneren Klassen und Interfaces 211  
           4.5.4 Lokal definierte Klassen und Interfaces 213  
        4.6 Ein- und Ausgabe (I/O) 216  
           4.6.1 Dateibehandlung und die Klasse File 216  
           4.6.2 Ein- und Ausgabestreams 223  
           4.6.3 Speichern und Laden von Daten und Objekten 230  
           4.6.4 Grundlagen der Netzwerkprogrammierung 237  
        4.7 Fehlerbehandlung 242  
           4.7.1 Exception Handling 244  
           4.7.2 Assertions 250  
        4.8 Weiterführende Literatur 253  
  Teil II Bausteine stabiler Java-Applikationen 254  
     5 Das Collections-Framework 256  
        5.1 Datenstrukturen 256  
           5.1.1 Wahl einer geeigneten Datenstruktur 257  
           5.1.2 Arrays 259  
           5.1.3 Das Interface Collection 261  
           5.1.4 Listen und das Interface List 266  
           5.1.5 Mengen und das Interface Set 272  
           5.1.6 Grundlagen von hashbasierten Containern 274  
           5.1.7 Grundlagen automatisch sortierender Container 283  
           5.1.8 Die Methoden equals(), hashCode() und 290  
           5.1.9 Konkrete Realisierungen von Mengen 292  
           5.1.10 Schlüssel-Wert-Abbildungen und das Interface Map 295  
           5.1.11 Erweiterungen am Beispiel der Klasse HashMap 302  
           5.1.12 Entscheidungshilfe zur Wahl von Datenstrukturen 305  
        5.2 Suchen, Sortieren und Filtern 306  
           5.2.1 Suchen 307  
           5.2.2 Sortieren mit Komparatoren 309  
           5.2.3 Filtern von Collections 315  
        5.3 Utility-Klassen und Hilfsmethoden 321  
           5.3.1 Nützliche Hilfsmethoden 322  
           5.3.2 Dekorierer synchronized, unmodifiable und 323  
           5.3.3 Vordefinierte Algorithmen 328  
           5.3.4 Design eines Zugriffsinterface 331  
        5.4 Probleme im Collections-Framework 335  
           5.4.1 Merkwürdigkeiten in Arrays 335  
           5.4.2 Probleme von Stack, Queue und Deque 337  
        5.5 Weiterführende Literatur 340  
     6 Applikationsbausteine 342  
        6.1 Einsatz von Bibliotheken am Beispiel 342  
        6.2 Wertebereichs- und Parameterprüfungen 347  
           6.2.1 Prüfung einfacher Wertebereiche und Wertemengen 347  
           6.2.2 Prüfung komplexerer Wertebereiche 351  
        6.3 Logging-Frameworks 359  
           6.3.1 Apache log4j 360  
           6.3.2 Tipps und Tricks zum Einsatz von Logging mit log4j 367  
        6.4 Utility-Klassen zur Dateibehandlung 375  
           6.4.1 Die Klasse FileUtils 375  
           6.4.2 Die Klasse StreamUtils 377  
           6.4.3 Implementierung von Stringstreams 382  
        6.5 Konfigurationsparameter und -dateien 384  
           6.5.1 Einlesen von Kommandozeilenparametern 384  
           6.5.2 Verarbeitung von Properties 393  
           6.5.3 Die Klasse Preferences 399  
           6.5.4 Weitere Möglichkeiten zur Konfigurationsverwaltung 401  
     7 Multithreading 408  
        7.1 Threads und Runnables 410  
           7.1.1 Definition der auszuführenden Aufgabe 410  
           7.1.2 Start, Ausführung und Ende von Threads 411  
           7.1.3 Lebenszyklus von Threads und Thread-Zustände 413  
        7.2 Zusammenarbeit von Threads 419  
           7.2.1 Konkurrierende Datenzugriffe 419  
           7.2.2 Locks, Monitore und kritische Bereiche 420  
           7.2.3 Deadlocks und Starvation 425  
           7.2.4 Kritische Bereiche und das Interface Lock 427  
        7.3 Kommunikation von Threads 431  
           7.3.1 Kommunikation mit Synchronisation 432  
           7.3.2 Kommunikation über die Methoden wait(), 435  
           7.3.3 Abstimmung von Threads 444  
           7.3.4 Unerwartete IllegalMonitorStateExceptions 448  
        7.4 Das Java-Memory-Modell 449  
           7.4.1 Sichtbarkeit 450  
           7.4.2 Atomarität 451  
           7.4.3 Reorderings 453  
        7.5 Besonderheiten bei Threads 456  
           7.5.1 Verschiedene Arten von Threads 456  
           7.5.2 Exceptions in Threads 458  
           7.5.3 Sicheres Beenden von Threads 459  
           7.5.4 Zeitgesteuerte Ausführung 463  
        7.6 Die Concurrency Utilities 466  
           7.6.1 Concurrent Collections 467  
           7.6.2 Das Executor-Framework 476  
        7.7 Weiterführende Literatur 487  
     8 Fortgeschrittene Java-Themen 488  
        8.1 Crashkurs Reflection 488  
           8.1.1 Grundlagen 490  
           8.1.2 Zugriff auf Methoden und Attribute 493  
           8.1.3 Spezialfälle 498  
        8.2 Serialisierung 501  
           8.2.1 Implementieren der Serialisierung 501  
           8.2.2 Die Serialisierung anpassen 506  
           8.2.3 Versionsverwaltung der Serialisierung 510  
           8.2.4 Optimierung der Serialisierung 513  
        8.3 Objektkopien und das Interface Cloneable 518  
           8.3.1 Das Interface Cloneable 519  
           8.3.2 Alternativen zur Methode clone() 528  
        8.4 Internationalisierung 530  
           8.4.1 Grundlagen 531  
           8.4.2 Die Klasse Locale 532  
           8.4.3 Die Klasse PropertyResourceBundle 535  
           8.4.4 Formatierte Ein- und Ausgabe 539  
           8.4.5 Zahlen und die Klasse NumberFormat 540  
           8.4.6 Datumswerte und die Klasse DateFormat 543  
           8.4.7 Textmeldungen und die Klasse MessageFormat 548  
        8.5 Programmbausteine zur Internationalisierung 550  
           8.5.1 Unterstützung mehrerer Datumsformate 550  
           8.5.2 Nutzung mehrerer Sprachdateien 555  
        8.6 Multithreading und Swing 565  
           8.6.1 Crashkurs Event Handling in Swing 565  
           8.6.2 Ausführen von Aktionen 567  
           8.6.3 Die Klasse SwingWorker 571  
        8.7 Garbage Collection 575  
           8.7.1 Einflussfaktoren auf die Garbage Collection 575  
           8.7.2 Algorithmen zur Garbage Collection 579  
           8.7.3 Optimierungen der Garbage Collection 581  
           8.7.4 Memory Leaks: Gibt es die auch in Java?! 582  
           8.7.5 Objektzerstörung und finalize() 584  
        8.8 Weiterführende Literatur 586  
     9 Neuerungen in JDK 7 588  
        9.1 Erweiterungen der Sprache selbst 588  
        9.2 Erweiterungen des NIO in JDK 7 596  
           9.2.1 Dateibehandlung in JDK 7 596  
           9.2.2 Asynchronous I/O 602  
        9.3 Multithreading 603  
        9.4 Neuerungen in AWT und Swing 606  
        9.5 Collections 607  
        9.6 Der Garbage Collector »G1« 608  
        9.7 Geplante Datumsverarbeitung mit dem neuen Datums-API 609  
  Teil III Fallstricke und Lösungen im Praxisalltag 614  
     10 Bad Smells 616  
        10.1 Programmdesign 618  
           10.1.1 Bad Smell: Verwenden von Magic Numbers 618  
           10.1.2 Bad Smell: Konstanten in Interfaces definieren 619  
           10.1.3 Bad Smell: System.exit() mitten im Programm 622  
           10.1.4 Bad Smell: Zusammengehörende Konstanten nicht als Typ definiert 623  
           10.1.5 Bad Smell: Programmcode im Logging-Code 625  
           10.1.6 Bad Smell: Unvollständige Betrachtung aller Alternativen 626  
           10.1.7 Bad Smell: Unvollständige Änderungen nach Copy-Paste 627  
           10.1.8 Bad Smell: Casts auf unbekannte Subtypen 629  
           10.1.9 Bad Smell: Pre-/Post-Increment in komplexeren Statements 631  
           10.1.10 Bad Smell: Keine Klammern um Blöcke 633  
           10.1.11 Bad Smell: Variablendeklaration nicht im kleinstmöglichen Sichtbarkeitsbereich 635  
           10.1.12 Bad Smell: Mehrere aufeinanderfolgende Parameter gleichen Typs 636  
           10.1.13 Bad Smell: Grundloser Einsatz von Reflection 637  
        10.2 Klassendesign 639  
           10.2.1 Bad Smell: Unnötigerweise veränderliche Attribute 639  
           10.2.2 Bad Smell: Aufruf abstrakter Methoden im Konstruktor 641  
           10.2.3 Bad Smell: Herausgabe von this im Konstruktor 645  
           10.2.4 Bad Smell: Referenzierung von Subklassen in Basisklassen 646  
           10.2.5 Bad Smell: Mix abstrakter und konkreter Basisklassen 648  
           10.2.6 Bad Smell: Öffentlicher Defaultkonstruktor lediglich zum Zugriff auf Hilfsmethoden 650  
        10.3 Fehlerbehandlung und Exception Handling 652  
           10.3.1 Bad Smell: Unbehandelte Exception 652  
           10.3.2 Bad Smell: Unpassender Exception-Typ 653  
           10.3.3 Bad Smell: Exceptions zur Steuerung des Kontrollflusses 655  
           10.3.4 Bad Smell: Fangen der allgemeinsten Exception 656  
           10.3.5 Bad Smell: Rückgabe von null statt Exception im Fehlerfall 658  
           10.3.6 Bad Smell: Unbedachte Rückgabe von null 660  
           10.3.7 Bad Smell: Sonderbehandlung von Randfällen 662  
           10.3.8 Bad Smell: Keine Gültigkeitsprüfung von Eingabeparametern 663  
           10.3.9 Bad Smell: Fehlerhafte Fehlerbehandlung 665  
           10.3.10 Bad Smell: I/O ohne finally bzw. finalize() 667  
           10.3.11 Bad Smell: Resource Leaks durch Exceptions im Konstruktor 669  
        10.4 Häufige Fallstricke 673  
        10.5 Weiterführende Literatur 681  
     11 Refactorings 682  
        11.1 Das Standardvorgehen 690  
        11.2 Der Refactoring-Katalog 693  
           11.2.1 Reduziere die Sichtbarkeit von Attributen 693  
           11.2.2 Minimiere veränderliche Attribute 696  
           11.2.3 Reduziere die Sichtbarkeit von Methoden 700  
           11.2.4 Ersetze Mutator- durch Business-Methode 701  
           11.2.5 Minimiere Zustandsänderungen (Refactoring-Kombination) 702  
           11.2.6 Führe ein Interface ein 702  
           11.2.7 Aufspalten eines Interface 703  
           11.2.8 Einführen eines Read-only-Interface 704  
           11.2.9 Einführen eines Read-Write-Interface 704  
           11.2.10 Einführen von Convenience-Methoden 705  
           11.2.11 Einführen einer Zustandsprüfung 707  
           11.2.12 Überprüfung von Eingabeparametern 709  
           11.2.13 Trenne Informationsbeschaffung und -verarbeitung 713  
           11.2.14 Konstantensammlung in enum umwandeln 718  
           11.2.15 Entferne Exceptions zur Steuerung des Kontrollflusses 721  
           11.2.16 Umwandlung in Utility-Klasse mit statischen Hilfsmethoden 724  
        11.3 Weiterführende Literatur 727  
     12 Entwurfsmuster 728  
        12.1 Erzeugungsmuster 731  
           12.1.1 Erzeugungsmethode 731  
           12.1.2 Fabrikmethode (Factory method) 734  
           12.1.3 Erbauer (Builder) 737  
           12.1.4 Singleton 740  
           12.1.5 Prototyp (Prototype) 744  
        12.2 Strukturmuster 748  
           12.2.1 Fassade (Façade) 749  
           12.2.2 Adapter 751  
           12.2.3 Dekorierer (Decorator) 753  
           12.2.4 Kompositum (Composite) 756  
        12.3 Verhaltensmuster 760  
           12.3.1 Iterator 761  
           12.3.2 Null-Objekt (Null Object) 763  
           12.3.3 Schablonenmethode (Template method) 766  
           12.3.4 Strategie (Strategy) 770  
           12.3.5 Befehl (Command) 778  
           12.3.6 Proxy 785  
           12.3.7 Zuständigkeitskette (Chain of Responsibility) 787  
           12.3.8 Beobachter (Observer) 789  
           12.3.9 MVC-Architektur 798  
        12.4 Weiterführende Literatur 799  
  Teil IV Qualitätssicherungsmaßnahmen 800  
     13 Programmierstil und Coding Conventions 802  
        13.1 Grundregeln eines guten Programmierstils 802  
           13.1.1 Keep It Human-Readable 803  
           13.1.2 Keep It Simple And Short 803  
           13.1.3 Keep It Natural 803  
           13.1.4 Keep It Clean 803  
        13.2 Die Psychologie beim Sourcecode-Layout 804  
           13.2.1 Faktor der Ähnlichkeit 804  
           13.2.2 Faktor der Nähe 805  
        13.3 Coding Conventions 807  
           13.3.1 Grundlegende Namens- und Formatierungsregeln 808  
           13.3.2 Namensgebung 811  
           13.3.3 Dokumentation 813  
           13.3.4 Programmdesign 815  
           13.3.5 Klassendesign 820  
           13.3.6 Parameterlisten 823  
           13.3.7 Logik und Kontrollfluss 825  
        13.4 Sourcecode-Überprüfung mit Tools 827  
           13.4.1 Metriken 828  
           13.4.2 Sourcecode-Überprüfung im Build-Prozess 832  
     14 Unit Tests 840  
        14.1 Überblick 840  
           14.1.1 Arten von Tests 840  
           14.1.2 Äußere vs. innere Qualität 843  
           14.1.3 Auswirkungen von Unit Tests auf die Qualität 844  
        14.2 Motivation für Unit Tests aus der Praxis 846  
           14.2.1 Unit Tests für Neuentwicklungen 846  
           14.2.2 Unit Tests und Legacy-Code 853  
        14.3 Fortgeschrittene Unit-Test-Techniken 864  
           14.3.1 Testen mit Stubs 864  
           14.3.2 Testen mit Mocks 866  
           14.3.3 Unit Tests von privaten Methoden 869  
        14.4 Unit Tests mit Threads und Timing 870  
        14.5 Nützliche Tools für Unit Tests 875  
           14.5.1 Hamcrest 875  
           14.5.2 Infinitest 879  
           14.5.3 Cobertura 880  
        14.6 Weiterführende Literatur 886  
     15 Codereviews 888  
        15.1 Definition 888  
        15.2 Probleme und Tipps zur Durchführung 890  
        15.3 Vorteile von Codereviews 892  
        15.4 Codereview-Tools 895  
        15.5 Codereview-Checkliste 897  
     16 Optimierungen 898  
        16.1 Grundlagen 899  
           16.1.1 Optimierungsebenen und Einflussfaktoren 900  
           16.1.2 Optimierungstechniken 901  
           16.1.3 CPU-bound-Optimierungsebenen am Beispiel 903  
           16.1.4 Messungen – Erkennen kritischer Bereiche 907  
           16.1.5 Abschätzungen mit der O-Notation 914  
        16.2 Einsatz geeigneter Datenstrukturen 917  
           16.2.1 Einfluss von Arrays und Listen 918  
           16.2.2 Optimierungen für Set und Map 922  
           16.2.3 API-Design Collection vs. Iterator 924  
        16.3 Lazy Initialization 925  
           16.3.1 Lazy Initialization am Beispiel 926  
           16.3.2 Konsequenzen des Einsatzes der Lazy Initialization 929  
           16.3.3 Lazy Initialization mithilfe des PROXY-Musters 931  
        16.4 Optimierungen am Beispiel 933  
        16.5 I/O-bound-Optimierungen 941  
           16.5.1 Technik – Wahl passender Strategien 941  
           16.5.2 Technik – Caching und Pooling 944  
           16.5.3 Technik – Vermeidung unnötiger Aktionen 945  
        16.6 Memory-bound-Optimierungen 948  
           16.6.1 Technik – Wahl passender Strategien 948  
           16.6.2 Technik – Caching und Pooling 951  
           16.6.3 Optimierungen der Stringverarbeitung 956  
           16.6.4 Technik – Vermeidung unnötiger Aktionen 959  
        16.7 CPU-bound-Optimierungen 961  
           16.7.1 Technik – Wahl passender Strategien 962  
           16.7.2 Technik – Caching und Pooling 962  
           16.7.3 Technik – Vermeidung unnötiger Aktionen 963  
        16.8 Weiterführende Literatur 965  
  Teil V Anhang 966  
     A Einführung in die UML 968  
        A.1 Die UML im Überblick 968  
        A.2 Strukturdiagramme – statische Modelle 972  
           A.2.1 Klassendiagramme 972  
           A.2.2 Objektdiagramme 976  
           A.2.3 Komponentendiagramme 976  
           A.2.4 Paketdiagramme 977  
        A.3 Verhaltensdiagramme – dynamische Modelle 978  
           A.3.1 Anwendungsfalldiagramme 978  
           A.3.2 Sequenzdiagramme 979  
           A.3.3 Kommunikationsdiagramme 983  
           A.3.4 Zustandsdiagramme 984  
           A.3.5 Aktivitätsdiagramme 986  
        A.4 Weiterführende Literatur 987  
     B Überblick über den Softwareentwicklungsprozess 988  
        B.1 Vorgehensmodelle 988  
           B.1.1 Aufgaben und Phasen beim Softwareentwurf 988  
           B.1.2 Wasserfallmodell und V-Modell 989  
           B.1.3 Extreme Programming (XP) 991  
           B.1.4 Test-Driven Development (TDD) 993  
           B.1.5 Diskussion 994  
     Literaturverzeichnis 996  
     Index 1000  


nach oben


  Mehr zum Inhalt
Kapitelübersicht
Kurzinformation
Inhaltsverzeichnis
Leseprobe
Blick ins Buch
Fragen zu eBooks?

  Navigation
Belletristik / Romane
Computer
Geschichte
Kultur
Medizin / Gesundheit
Philosophie / Religion
Politik
Psychologie / Pädagogik
Ratgeber
Recht
Reise / Hobbys
Sexualität / Erotik
Technik / Wissen
Wirtschaft

  Info
Hier gelangen Sie wieder zum Online-Auftritt Ihrer Bibliothek
© 2008-2024 ciando GmbH | Impressum | Kontakt | F.A.Q. | Datenschutz