uebungen/readme.md

15 KiB

Programmieren 2 (Wintersemester 2024/2025)

👋 Willkommen zum Kurs Programmieren 2

In Programmieren 2 lernen Sie die Programmierung in Java auf einem fortgeschrittenen Niveau. Sie werden alle wichtigen Konzepte von Java kennenlernen und diese in praktischen Übungen anwenden. Hierbei werden Sie in kleinen Teams arbeiten und komplexere, objektorientierte Programme in Java entwickeln. Die dazu nötigen objektorientierten Konzepte (Polymorphie, Vererbung, Interfaces, etc.) werden Sie ebenso im Kurs anwenden, wie die dazu grundlegenden Algorithmen und Datenstrukturen.

🎓 Freiwillige Übungen

Hier finden Sie die freiwilligen Übungen zur Vorlesung Programmieren 2 (PR2). Die Übungen sind unten aufgelistet. Die Spalte Ausgabe hat keine Bedeutung.

Hinweise zur nötigen Softwareausstattung finden Sie hier.

# Kapitel Thema
1. Auffrischung String in Großbuchstaben umwandeln
2. Auffrischung Labeled Break
3. Auffrischung Passwortbewertung
4. Auffrischung printf mit Formatstring
5. Auffrischung Maximum in einem Array suchen
6. Auffrischung Taschenrechner
7. Einführung Java-Coding-Standard anwenden
8. Einführung JavaDoc schreiben
9. Einführung Klasse mit JUnit testen
10. Strukturierung Information-Hiding einer Klasse verbessern
11. Strukturierung Vorhandene Bibliotheken als JAR einbinden
12. Vererbung Final anwenden
13. Vererbung Figur und Rechteck
14. Vererbung Figur erweitern
15. Vererbung Figur noch einmal erweitern
16. Vererbung Konstruktoren schreiben
17. Vererbung Polymorphie einsetzen
18. Vererbung Singleton
19. Vererbung Statische Methoden und Attribute
20. Vererbung Methode überladen
21. Vererbung Methoden überschreiben
22. Vererbung Varag-Methode schreiben
23. Vererbung Vererbung von Figuren
24. Abstrakte Klassen [Abstrakte Klassen](Abstrakte Klassen_001/readme.md)
25. Abstrakte Klassen [Abstrakte Klasse](Abstrakte Klassen_002/readme.md)
26. Interfaces Comparable implementieren
27. Interfaces Interface Stack entwerfen
28. Interfaces Interface: Uebersetzer
29. Interfaces Interfaces anwenden und entwerfen
30. Object und Wrapper [Deep-Copy mit clone()](Object und Wrapper_001/readme.md)
31. Object und Wrapper [Clone](Object und Wrapper_002/readme.md)
32. Object und Wrapper [equals() und hashCode() implementieren und nutzen](Object und Wrapper_003/readme.md)
33. Object und Wrapper [equals und hashCode](Object und Wrapper_004/readme.md)
34. Object und Wrapper [toString()-Methode implementieren](Object und Wrapper_005/readme.md)
35. Object und Wrapper [Optimierung bei Integer](Object und Wrapper_006/readme.md)
36. Object und Wrapper [Methoden der Wrapper-Klassen](Object und Wrapper_007/readme.md)
37. Enumerationen Eigene Enumeration schreiben und verwenden
38. Enumerationen Enumeration schreiben
39. Enumerationen Singleton-Eigenschaft von Enumerationen
40. Enumerationen Stein, Papier, Schere, Echse, Spock
41. Ausnahmen Ausnahmen testen
42. Ausnahmen Eigene Ausnahmen schreiben und an entsprechender Stelle werfen
43. Ausnahmen Eigene Exception schreiben
44. Ausnahmen Handle-or-Declare-Regel anwenden
45. Ausnahmen Ausnahmen mit try und catch behandeln.
46. Input und Output [BufferedReader zum zeilenweisen Lesen einsetzen](Input und Output_001/readme.md)
47. Input und Output [DataOutputStream](Input und Output_002/readme.md)
48. Input und Output [DataOutputStream durch Serialisierung ersetzen](Input und Output_003/readme.md)
49. Input und Output [Daten mit DataOutputStream und DataInputStream verarbeiten](Input und Output_004/readme.md)
50. Input und Output [Daten mit einem InputStream lesen](Input und Output_005/readme.md)
51. Input und Output [Daten mit einem OutputStream schreiben](Input und Output_006/readme.md)
52. Input und Output [Filesystem-Abstraktion mit File](Input und Output_007/readme.md)
53. Input und Output [Fileattribute lesen](Input und Output_008/readme.md)
54. Input und Output [FilterReader](Input und Output_009/readme.md)
55. Input und Output [Konsolen Input/Output](Input und Output_010/readme.md)
56. Input und Output [Zeilen einer Textdatei zählen](Input und Output_011/readme.md)
57. Input und Output [RandomAccessFile](Input und Output_012/readme.md)
58. Input und Output [Reader verwenden](Input und Output_013/readme.md)
59. Input und Output [Rot13-Verschlüsselung](Input und Output_014/readme.md)
60. Input und Output [Datei zerhacken](Input und Output_015/readme.md)
61. Input und Output [Serialisierung](Input und Output_016/readme.md)
62. Generische Typen [Einen generischen Typ schreiben](Generische Typen_001/readme.md)
63. Generische Typen [Generische Klasse Pair schreiben](Generische Typen_002/readme.md)
64. Generische Typen [Generische Klasse Pair erweitern: NumberPair](Generische Typen_003/readme.md)
65. Generische Typen [Generische Klasse Pair erweitern: SamePair](Generische Typen_004/readme.md)
66. Generische Typen [PairList](Generische Typen_005/readme.md)
67. Generische Typen [Wildcard benutzen](Generische Typen_006/readme.md)
68. Generische Typen [Generische Queue](Generische Typen_007/readme.md)
69. Generische Typen [super und extends einsetzen](Generische Typen_008/readme.md)
70. Generische Typen [Generische Typen zusammen mit Wildcards einsetzen](Generische Typen_009/readme.md)
71. Geschachtelte Klassen [Eigene compare-Methode schreiben](Geschachtelte Klassen_001/readme.md)
72. Geschachtelte Klassen [Innere Klasse Beobachter](Geschachtelte Klassen_002/readme.md)
73. Geschachtelte Klassen [Callback mit anonymer Klasse realisieren](Geschachtelte Klassen_003/readme.md)
74. Lambdas Comparator als Lambda
75. Lambdas Callback mit Lambda realisieren
76. Geschachtelte Klassen [MatrixSuche](Geschachtelte Klassen_001/readme.md)
77. Lambdas StringTransmogrifier
78. Lambdas StringTransmogrifier erweitern
79. Collections Iterator schreiben
80. Collections Iterator programmieren
81. Collections List<T> und dessen Implementierungen
82. Collections Map<T> verwenden
83. Collections ReverserGeneric
84. Collections Strings umgekehrt sortieren: Reverser
85. Collections Set<T> und dessen Implementierungen
86. Collections CommandLineSorter
87. Collections CommandLineSorter -- Version 2
88. Collections Comparator<T> verwenden und Objekte sortieren
89. Collections Wörterbuchprogramm
90. Streams Kleinbuchstaben in einem String zählen
91. Streams Buchstaben in einer Liste von Strings zählen
92. Streams Kleinbuchstaben in einem String zählen
93. Streams Liste filtern
94. Streams Streams mit interner Iteration
95. Streams Map und Filter auf Streams
96. Streams Map und Reduce auf Streams
97. Streams Reduce
98. Streams Summe über reduce bestimmen
99. Streams Wörter zählen
100. Threads Fakultät parallel berechnen
101. Threads Thread per interrupt beenden
102. Threads wait und notify benutzen
103. Threads Parallele Ausgaben erzeugen
104. Threads Race-Condition finden und beheben
105. Threads Stack und Heap unterscheiden
106. Threads synchronized verwenden
107. Threads Timer und TimerTask verwenden
108. Reflection Klasse per Reflection analysieren
109. Reflection Objekte per Reflection erzeugen